Browse Source

commit

developer
zhangshu 9 months ago
parent
commit
b07f28f201
  1. 1
      .gitignore
  2. 938
      download/1.txt
  3. 844
      download/2.txt
  4. 152
      download/DownloadUtil.py
  5. BIN
      download/download.zip
  6. 60
      download/main_download.py
  7. 16
      src/Orm.py
  8. 10
      src/insert_keyword.py
  9. 82
      src/main.py
  10. 11
      test/test3.py

1
.gitignore

@ -137,4 +137,3 @@ dmypy.json
# Cython debug symbols
cython_debug/

938
download/1.txt

@ -0,0 +1,938 @@
bXhm_EPnWyE
RS_m_n5l5GE
oj7PGVeblPQ
ausNlOUQJrk
05PVnmUjYi8
NJtpd7-K5g4
Pvysr8SF5kg
TyJXdyK_Aho
OfQZbrfb-0g
SvjVNVSwuF8
XcOevaLBmNY
g93ogrSbSDM
pBceUp7L7Ho
DZVSU2y3SUo
xnonzlTX6yk
EdGRKXMA1yo
5KRwX23mA9w
iPn9HbyLLUg
MPQJkvmSOXg
VgTiB--8EW8
av5Rbj4pOhI
jLUTJvXe5C0
92itdM_4fzk
GLc9o-ziiTA
Lb8MnSNqfgc
G4-cbmqwb40
thFQOqVyqaI
deyG2C5P4ZI
MmOeQBcN_HY
4_W0Ie05A1s
PRhBLFNCSOc
xWnH9WuH4qQ
Pm-5OcoxqRM
O3Vho7ITrw0
BJa77_EqoVE
R3rtQ-BBie4
juZ1y_suy24
AK1h6X7Vy6c
9v3PM3-IY-U
_6wZFNH_dxc
A7_vRWCnqD8
r_kiCJUCuCA
H87YoYw8G10
WzVg5Mv81UE
eVBiV1vXwuk
YW01ohYL-sw
fGtdBMxn1ig
FepZOEZa0zA
nqJWf4lY8Oo
sfxMhAugN0Q
-9eGr7Tir94
SDu06Hk7u3o
U5sGuBnkpWU
H59ah-8_Llo
_2QiwnbCiZA
rplQBk5UXjg
uNRk1pCXtzw
gOFuuPgtZJs
r9Wc-fun8K8
JZhF-CWa9qM
s7VpH97x60E
fzHrEyQoqF8
CfWUQ3y_Z-I
_1uRlBNi4K8
b2s494k8RWM
pks7nWNJtOE
O-lYQaaUCMk
zwxNRd-vOrc
Tsk219wxfUs
2cQSdkhC7WE
974qgpI9ZDI
esXXwoAfvlA
V1mpJDBclsk
tAb-s2rUIEU
jpGq7UttEns
WsEfQpADiWo
54BefoMhsNk
h3sNoA--MUU
nGoNw6q2imc
fHcIISVc-R0
LTbnhtEiu-A
vMplkBHvss0
GZRiNdjyQ_g
cJxSHCyAZGc
3WXO5PluQkg
40aUfgN0vYE
Tgj5qit2WCA
vkYzlXoMyCQ
n_tCgd7ab_4
e5c8584sHhA
TeN7hiD_g3Y
BZhwABsbkjY
PdZ60VNyyPc
pECRjppZ_k0
zDxKz1lmOGo
vdYGJfWSXME
oW6lNV5GsE0
b7GRlvef8GA
3zAX4hmrqms
NNdNMGbJKKg
RcrCgziZEv4
6ik88sSo4Sw
vdVlqMVxfU0
Ub8laDfvSk0
0cUfihFcQL8
mc5juoR5YOA
GsGwAHFo68Q
wXXnegHM0To
2ZUAnBNQdA8
DTiV1iKhExc
ZRp3i7-wWkw
KUfk37i2_Q0
dlJdHAoUhO4
toVDWAL8aAQ
fQFoJguzqKc
vm1pPOABdzw
aaZRC8exZds
JXoKchiev9w
_RgXyqX0wgY
xGGT4LwGZtQ
P96b_msFuQ4
OTXJAA-yf6Y
1KD5qzN8yTE
p9JBi_72qTg
5GInuq-_hv8
q1R-bwDlH2Y
7K3Qt7TaYzM
jBDvt6tS--o
exIbb0vt7rw
kxaKlU8Vsgg
TPrrEsQxdc4
5jRaiztjr9I
pe6QJXG9F-g
4eChvgMhkvg
dia3-_PzyNg
7BTDqJ-ackk
PUls4QmR_ro
-diLh6pizeQ
oldIqTgmf7A
923e8aprSlI
r410i1IUnP0
RerSg_4E7Jg
N_qCNbwODsA
gzQIt757uzc
GHzw1HY6sRA
RS36xWidtXU
d6wO5xYEZ4s
0zZVT6hgInk
gUy2Q6dJBuY
tHkoc2ry7O0
pALAjY9rgtc
w5fDq2HF6BQ
vtPswWzR1vU
GjApBeItsKg
IxiPZHsBpFg
zYHUH20uqzE
iCMxyJDCawc
-vNG3jZqIDc
855fzLnhFsY
dMkferLEyj8
N0oPc445U_U
H2F4ku7nefU
KNNyzXgLQYE
NhgywTXOAz4
63Wave4P2rY
fl2GlP51ZHs
PhmbV4Jgvtw
5hmH4AnAyTQ
qii7X0u1b8k
QdHwHdWf_gg
EcZ1eO333x8
fFXK-yefTRo
7DKukF2KCRU
_UY6fsjSEdw
v74eZF1XdhI
YSDKozRxa0Y
Ee15RgD9b1E
jQPTMImR3QM
cwyBdUTUFc0
hUeTs6MqSDM
6UCLK09OlKc
pxa5WVGRLoI
vPmOa_Y1fqE
N8NEk7DCgU8
MwDU2j9DvHw
GYUPGa4HQPg
gMPaOVjLyyQ
1k1TFzw8erc
Nmoc69cL6fI
kn6sQoMY0bQ
aiVZwOgDlU4
DPr4fA3DnM8
NJSVQue1Rlo
ITquAe1BaBs
yWmXgn707i4
lgiJyPsWSZk
yb3T4-1qMAY
PPuDIEmmZKQ
ZOldilYU6yA
AaHWU-fUReA
EaqX5Mh-TEo
MSpPsRjkXLM
TbPnqgFSeLQ
4QoKbd5zNjY
lreAQaYD7DM
hBzmwaVYYLg
9z9tFq5k6Kw
2fa0lntUQO0
rNR6aMlsNLo
sJUBWilQpJw
VvMQxq7wU8U
1y5GvevF10E
jfWmLBujhHI
khBFrSwfDlc
tryTAxF-Npk
UV7fdGvAgb0
STchzxGrS_s
JUoWmGNsQUA
_315UjnqjGI
LmBvsgTLUHM
Xo_x5hcI1JE
eH4xg4nf5dc
6cjOc0RGtUY
9zKjLyfMIxg
HGf2C-eHrM8
Pb7BHtXpIZI
aeVjNR-vQaU
W8WumC-49ck
cs5czxl6kJw
yAAhDLpCX6c
3J5xJYWuZu0
qQvB6txr9xg
pWmmLkhHjNE
W-pTkSXcmBU
FMxyZQdbsJU
jSWlkQ_yb24
GjPaiBa-Tos
N7t7qCr7-9g
T4M7Uv2rktc
f49CmYstRLY
ARphmeUQUqs
a9NhLXnNVR8
roZB5TMLSk4
wGsmfV4oT_c
R2j60RIiNlc
_36aymz-uHA
ogT4z94NPcQ
6r-X9zqmNeY
RtpIEW4MNpI
2XXXkUCnJho
aEIZFoApd6c
kqEbg-3ZArI
h4hPurvZSZg
ae1iwnQOKs4
IOF8vnkmy8o
0dIUBy8o8w8
RAQHGnfTn2k
uVM0ZGdF7vY
nw9Lb_-8mJM
w-gyzwwC4aw
tA_gRAE-4ME
Uqcc88v1JIE
lgXm6WlpRH4
TSf4E8ZQ4Fk
FRKD7GAukWU
zQEMi_53R3o
fZhNEL7h0Tw
FUKbW3nrI8w
E5f6hEYYFr0
X-UhbbpUPTc
J3sBGf3HZ2M
L6qs82evlQM
P5gj8rsBOZo
pcWJ5A5xbpQ
n13kXwptAFI
vN4Izh3i7wc
ezs3dEQCOb4
cPR7oIYgffw
MAHoGAX_O84
Ol1Vks6C1lo
9hv_PZOcI9o
Pyg75pvmHtk
0UVCWhmk8Lc
NiBHpbn5vvc
ZTjioIWf--U
XnNpUDyzJQo
P8XmJW4ALfw
OxDHN_hNtb4
JsxQuUnWFDg
E4fbjnkHITo
y6J76E9xftg
9QI1q7zGq-M
kA40StvCSak
c66LTFLun58
yubsyc0rE3A
uJcN5jY9kKA
ozY2DW7h3N0
JQzyEeq_qHA
WmPWI5T0P1Y
NsvZbWnbSi4
g93Vq2f2ah4
0gcRyR8flJs
z37N_00cC8A
tOkt57NxTd0
CQAtpnYlKMU
enILA8osi20
ajw4cHFS-0s
7DFqorM47ME
3arFGPJN6nY
xQg2cCvAPc8
nJ3HUXyXqoo
NY05P4zrzSw
Z1Od34Lkwdc
5wm9VrFiauE
uG2KswpDGw4
qOpZ5j2G7QE
FbBwtifUg1o
Mq3Qe9xT8Nc
V2ADUY5N9mw
VU1618jw6Cw
QWQ2bc8RK1c
3Bt2hu8lBEE
ayWVWAYktRU
fW8wyk8rRHQ
RhoUlJnM7hc
MQFnLVXW4Ks
pAFcFos6nu0
mq-ngcbLL6o
w7fjd7ZwblM
k5DqSvz1JKw
vOvM1MbZHz0
uyKm88WfweI
kjeEKOT1Luo
P4vgtGlASRk
mJ8-zTaYV1o
3yHXhLEs7LI
YbJzPeL-VGQ
PKFrqCQOZyI
ErtNCjNlUfo
vNBkNKax-Z4
GgxxggHvG3A
ZN26KwKQFvM
4yvJCSIGLg8
XUl_t6Niqf0
ZbcBo4ZmX2A
c9NFgy766MM
iMsRvRm3egI
p3rzHam2Mjo
Q1TX9Krb80o
SwWn4Sze3ig
DVj3yozJlYU
vT4yD4i9IsU
eb_kaB3QAxg
CZ9tIC3gzZ0
d7FsJcg6VFs
3pPNaGEzgbs
QsKrp1U7uto
V7ynsYAEjC0
xUMaboqMEXg
2EmYyjImEio
93zhgqnzM_A
CiOd4dN8930
_kwilbaoq-4
rSYswYc9nto
tm_YYLoiRM4
lM8vffoJSfA
OjUutBiA2Uk
SAh-gHhujDc
DxAF69QGZF4
uBSmzIXVOoM
UeMtNPoY9Ys
1Ihg0m_7YBI
0YsfFw1-8z4
8zxb_Bca0Aw
x5vLxLWPrR0
P-Gdcr3Rwxc
k5Lm2R3RUZg
GtPwGq6TsR8
jyhTi2O-8uU
HPgxGFbSYyo
_wTRkaOFOUw
ZxHyry6j8GI
O6B95eQdcTw
3OrV3ceynWA
r5hRD2eK2k4
piBNtx07tTo
DHv3PRwDClM
aOA-1Ik0R2c
PhyU80iN3-U
p-5QmKgWee4
pwsc9RKSGlM
MBWDYIRTTfM
V8mRMRm-5ig
F-Gn9s0oZ4Y
W5H9pQsH7Do
W5Sru6CWHu4
NGxwyni4gEc
Y-boIFMAqfA
h_Q9EuH9Vp4
wiGPQfCb3rs
qS8bu-LC2mI
ADMh2cFDh4w
t4e5bbp3yFk
7DQmYOUM7DQ
ZrEu8u2GkQY
YuslB4M-_b0
gC6pAUDKS3U
jRNPlGhZaY4
iiLh7UHu-bg
ddeLMeGcc2o
kf-Ro1gHimk
aWEZfGLdEH8
qMCUbiKQ0sI
35d5Rdct-zg
uFdZ4jyl28Y
lsGQWAbrQuU
vYeuTR4J-pQ
bfU_tvukEWY
SS_XlqqmxxE
aoPzysPXFCk
1BKnPoCe264
Tjc-6-PSrno
b_fZvAiCEIM
k5qUq4SnGLU
cM9K90lUUmE
v7WGnI0HEGY
BG2SagSRJPY
najWp5dkHZQ
Sk3DjcAYyHc
xpb7g1WM_y4
oiSKF36XkRc
77fduJAG1DA
3E2UEPeLygA
qfGg5GeT_wE
i4fh-NbSKHM
NzffTzHZ16E
pauNShaBuNs
XaxGzCThuBA
ZZ_9wU82bF4
_OCWHZM8Vdg
vm_NPzJQoXY
Wz-bDdTb1og
yMEFJH-GRFI
I7Aivt9D3pk
cpepW5i-xVg
217cPJOapbQ
d7ctBDcXhp4
xsTcrAssPU0
qIVvL-aFBL8
NwzavA4p_KQ
eu1tJ5cnKCs
Li0n71-gEg4
4qrsqjz8fr4
tb7gOanBmf0
n0bPfsiZWQs
kvCbgrMXWoE
TDvTkAmSE0o
RNban9kFNtw
jJziZNLJ-N8
xS9byA5CeH4
fjYLbLZJPKc
pSmjbAXVJBQ
YgZJaFckzuI
FJbx4oCunCQ
GhGL73gc0H4
QdBB2_Gu6sM
unEK4KHjTSI
Ni3Re7OqEWc
jvpwNNVlAWw
-hdWQL6bWqA
FL2xZ--DOp0
T_oxkC1k4vE
zs__bkxbz7c
u0HdvBUnwmE
cDmL6UvYO0I
CS40z4-t83w
FhKfjo46UOg
aBG6Z-ih0l8
JmAr9TUY6EQ
AcTUptb5B2k
oKwG-Mpd9vw
dqYPHAvSaGU
ULZFcnCrd-g
avabYRHk_VM
JCjfqESS870
RAQW5mWdVlU
RtCH-KAJI70
Yuh9cK7j7fo
og6rCFAxhIc
351v0buuz_o
_nLEF_GwBVI
Tbrm_s3iqQ8
UavgrUR1OkQ
ungPjLDLP8o
iK_I2OJkN_M
42TODu6XW00
-cpkcfo-og8
2CFBR-G47gU
YML_TKyFNnA
Yo3lxbsny64
wregGLnacmM
lgUQMm5tl0Y
-baKuQlJJpc
jm4wnOrpXf8
1JuCiu8YShk
w4s5qB26L4o
CbdphiJhZBs
vAbp-SULHDA
xng0euoZOgY
PXLXMoUmdNQ
SLUbW6c_bOE
ZVh_Qm_TC-0
1sHL8Rebzy8
dBcIIBLjTsI
OTXhEzwqnd8
zlWQnQtmwsY
h1Ry31a9ePc
pCdMx8eg-js
XvAqH0usngM
4iWph8VLgZ8
5eLgzz1l3DQ
v-OKq0vXeGU
HZDzNUjPAtc
3FXb9oHuR0k
MeQNbM6OfuI
-vppUhJxiFk
2_vT5ZwgX_U
f7R73cx75e0
AhsUGecx3dk
OMzX2_vk2Ok
Yb5hx2AOkt4
ji5FRfAQOVY
LOhW63Y3GIw
b2qB-e42jck
dwfWgU1tP6M
9EQsJNRRG-s
5bjP_PTEG30
T2oSWYTftrI
mDAjyEBZq7U
9gy7TQ_uggk
DOB5vgF0UxU
_Z6Za8gS_ZY
4ywEi7L_rJg
yx7B9LSbFvQ
8uUc0stMmR4
Get3uYL-uTs
0C3BcIQgw44
B4Ph1JQ0cpc
pgxcOUNaeNg
XvqAA_-wyuo
sHsnVZYTl8A
Bn9UyL5IXPY
sDQa-N_ryao
jpPpt-ThZww
N0b6gKUsNDU
EQjF76X3Kvg
T55JOnAJ1UM
G2OqWODLnwU
qLUNJ80yfaI
WUSlcDwzCr8
HRynBT6-HEI
NvsomFAEkjk
EAsLoCsRSOA
nNkSzRAcO9U
37sHOFI36Tw
2E-e4_NW7-g
2TjnQThTh9c
dLqgn_d4_B8
bPr-jw-ufmY
rQ5MB99ZUl8
5TLM0taAoK8
P-GSYNX_OIg
bzLcRuAcNS4
4Ap4QXfHBqk
QxhgJ7Iv2SY
vuTiL18SujQ
YBOWjUwjA-A
K172_8HDS9g
ND_KfwqZ7gc
rdfGcR2NFOw
99yrihn5sxU
gsEVyWGs9J0
u9LbJczE1Jk
BfkfvGLXcKg
nOXpZS0aL7A
OLL4Of8CGtU
eAJXxz6H1-k
tHEd4kdS1RI
8Pctz4lYSQY
JesA6QSZuTE
0dJg5cPrfuM
9fGEr_RshgY
qyWz4qpIzL0
c79kHqckhm0
amSPleTL86M
bEMwPHbiMP8
l0co1HX_qZw
xP5OEsR9PjA
o1HEGfjKzA8
vzDI9oPyTBU
VNTfVH9RzH0
vqfb1-dV0cM
IhROkd7-Ewo
aF5uIX8jYfA
OzV9V9gjVWw
mFEjwJ0Es-w
rIhNiOfE4BA
OlCMzzimW_U
XZi5YVDm0nQ
neafv_YT590
DaCQH1MDe1w
DBs9kYkVG-A
i95ILiKqWho
o5_fjaLIw38
hVxupKZKE9s
TLK_k0ScQYY
Ov6RSXoINwM
59-nvyefxq4
i1meEhY9Vhs
DGRbDS1a_ho
t579Af4dz9o
YNn8fiTL5q4
4AkXK7N9kC8
S8azl1UiKsU
aQ5lCKtB--s
frG86e_YfY4
cHSHK9NHciM
i0wzaKz2NkQ
VfLWzEArlpI
FjJ2OfA79sU
aLBwBfuIVQU
2d3iUIW2FJc
X4ag3QMfWpA
Gdsw1BPvzXQ
Rv1rLsn9dMM
1nH2nd-bfLk
cJWJvarZgJE
3df2MyIio5k
VsxJiEcnvrQ
H7Q57BAyLd0
OvMCXGdSnYI
pSS_7Gi1fFE
n78sJTLz-u4
5XbBLo9ALYs
w1XvZQGJwxc
Uz3ST1xfbC0
Qz7VYhJd38k
Mw_XfqThkug
rs-OMfV27ns
vya6XnW_uHI
Jx1oX6SYis4
WRGb759vq-A
vBdInqhLHEs
kwPgxxeWplE
I2fRpfJDJsQ
ukHQqvJk5jE
TOfo0MjGGKM
uq6khP17yQI
FHMHXLFaJ5Y
VH440tMvLho
T7zq5BlXNy0
Ypa3Kw2_iec
n3NLvpGHCMk
xgGMXXw8cWw
qUp_BZIA05g
6kYymRENLmk
U1QJEfT_sE0
9lm7oSFptFA
BR2SuSLxDSs
LCxCc33MOAQ
Mg59u9vR3JY
VGm3K1XeS5k
xOmuzqaSvXg
pvq3_4OpeDs
BnRB_KfFABI
3LwBO8TNHTo
YNWP31wp60Q
V8qJ-SsdSD8
_zXIdwTmCPo
J5FsulhY3qo
0jUZ0MILRJw
x36Mko6tE-g
KQyb_74YMGo
KNrI149-pb0
0XoSwrY0eJA
dUl6aKIs46g
RyMjGntLPug
oQA3C-flnXM
dHGe_-auj3Q
XhIo2khvIaE
XJAk6y17IdU
w4GszE5pC20
HKv_90w9pDM
SsClqGAYUP8
6YD3SG5bErs
kztJDpXlwPs
wRcV9gugFUE
gaisFdpIkWo
WHZThJrg_mg
KFMKZ7UO8cA
VNSbYG24VVs
bQiP_SZktN4
5N0201dSZlE
DjY9SxNoW8Q
3_g_QWXAzTg
n305LEScoQs
H0JFP9NpO70
QGvae363cXI
e57Fhj_gsA8
uDZ5iEvAua8
yvaEHa7Pds0
u80PDweSyOk
oYqmljaKBGU
6kySgpTwcPg
UJ_4GCJEYbg
_tHkgQBTlBM
S5JsM13ENWM
d8OvlgDqqxM
WoiBtgS8CT8
HB3XvkLuegI
Sds9_GEJPrM
vsB4fZofVSg
XLdKxDN86y8
vs3Q3RpO09U
jKJQKPGKcMw
LEIwLF3egoY
NihtDmAcEbE
2KECnTyxezc
GyBwFRV3ErI
Xb3p-WcEuPU
ld7XBH9nomk
YVICTszK1u8
Q5Mp0MISWMc
5OnN2lkTDtM
Uu0PMBhQ12w
W9fNeM3N0Cg
ApqGK0tsbNs
LFg_7DuFfZg
mYqKI8mrCtc
OJxVidA1vvo
sTF_IQ4buDY
Sbj4WSgNgf0
icHOYk4s1WA
meeQnTx7Qi0
fDusBxvn6oI
7OtBk61YWg4
aQy_YJzwyMY
2CD04k9R834
6GpcndfzPCU
qdoQ5iYlQlg
HeaLOsnt1P8
pPp48cjM718
oZdGf7tTVzc
yl9SmCggRjc
bmXJtvc1xlQ
0PtiFwYUB8c
62KZhFmPESs
7lnBueaWy8U
EKQwwRgt9p4
XbOTtnfocvw
q7-_I0rTHP4
pIDHMaIsWrQ
f-UZwV3mgbY
aH5Rf_dLIdk
4oAQB6d45w4
olhGeoNTric
OZnV5Ctf-j8
9PZFv8sE300
cdVeMvhNie0
h8Wo7pylXII
xJtdc3FFDrk
1NhfiRdUBAg
A1YSHUAttSQ
CoDWq8Lbquo
XMSyPuHJHSY
GzOTpwssjX4
vHXpDiCEJA8
4XgGLHnyWOM
D45s1E23OqY
wj-Stm_pPoo
gQsuQtPfzQQ
_lxlKNmL3Z0
0I6x-xNYj3U
YSqTSjDHiRI
-U_-aN50cc8
jCn_1vfvDS0
YjkSyf-9PC4
0PHBbP9yWMM
eLKnqrfL3_A
WQ48689A0xU
uw5ykW4sdhE
kCsEZcXQhL0
fUnyVRrQogk
1hLFdNnhS1A
fXyuRwmDr0g
WJnKxN9Xs5c
GhS8NEV4UdA
Zx0qLkVke2Y
N5QX5rMOYeY
joxnqx8EsD8
_T_qQxe4AFY
ejoF_UmuwVk
ddQ9m2ke_MQ
O-3B3jCWdzs
75JT0teaNLU
FDKKUZeg38Y
qsN1jmxJYtY
LdglrBGjQmw
A-rb_kJ67Zk
XYk893YsAeM
r455XJ_KvFU
ibmmonMr-Zc
nWRyxW9cBig
x1fddizb1TQ
_Ai47vbPxWA
9SGl-0dsCgY
UZossF145gI
t2BPKlG-K10
IV9JlCtJb6I
3Uf73Qv5vGk
zr35xktcl40
40qRgDpD7yQ
8rkN85HR-04
gf-hA-lR4k0
jj62STZ5ZcE
it4LZpaMY54
1DGbbbhv98U
t4f0zQ6nc88
AJ-RMBvphbE
qolSOc_tPus
vqbc7iQk2kw
FTGZq_tf0kI
iEY8aG1tubE
EPfRD6Tt4I8
aZLcxV-ZOCU
w9TUFqusf7o
dKoY-6MgMso
8SLNIs0NYHg
yGWrT6P-P48
5e10FKEoRLI
CGGoj0pUxdU
4qlmOPxfn6M
YyjFhMrkpWM
jdx3clxa-3c
7AhpcbIjb7Q
vt8GXHXX2dM
YBJ6tbYX0vo
9geLV3u585A
3sIfTZ2MtBk
gAPlTafSJ2c
rMOacrOlPO8
59xU2fdYddk
Q4VRNcoeNcs
KfV12SRFNSY
n5qhXbC0PjQ
6WCwzr0k0Sg
f7fZoGXD_nE
a-MIf-bP8Lw
VDab3upvmFA
qrWsA6rE8pI
uj2pdb737_M
FPUOaLYmYgw
s1r1sKMyxLQ
m7v48hXJdFg
izuk5Zcz91M
zwIukoBIFx4
6WiLFMH5PRc
wgCzD4QnrRY
PwYQ7E4KSI8
CflpsCVEaBM
HLKoQbt2MkU
QO2yCYLqR2Q
CEABAEiOpMc
c22mwHarpQ8
x81TgojyTgM
3v8zPPcWhFU
TdVD3U7OS9c
rtnKT1lfWy4
UshOcMvbjrA
klp14klyYY8
ZizsfYD9gs8
hFdfI4qvoE4
94V_UC7nGWU
w_we60nkEM0
5Tee4pJ7NHE
ZMCWTvYl15A
EjzhXsLBkCA
llNQlAy_V6Y
fBqKM-WiEVk
X-TzlpvsUAE
4dtFjgrHFEU
Jxg3Sj1vW74
1I0voQwn-4Q
G0s8Zt_SFZs
VYPVdzaaZ60
R5ig4_p1knw
Eqe_47Qzw0U
J8s5wsPoFW4
dJ-VFPgvp3M
Klr1HyCFyAY
M1UsyRHSmfY
Z-mMGE17Ohs
ozITfcCJDiM
a9-V41Obr_g
ls1RfqBD1uI
2J2cdnsVIHo
1VXf5nitQXc
ey-LKwwh5hY
_gr-Ty4Z2dY
Q_D4uVL8uxo
rd0f2PxoYQo
lLFFcujCYuE
CEDukM4IJ_w
IQHpbmzj4cY
q-lm5H-OqtI
YtSD2_Ylb40
9_O14WO2Ek0
5bvddaRc4dA
ng6-DvURKuE
UPN0vn5WnfI
xgMWSFySlWc
837vQ5Jyz3g
QWNO_iuofaE
XStV99lEXsA
dftIfMGJqCM
z5FVkn72cLY
N0cHOdRxkJs
TrNSacVqgVM
l5f2mI6GNJc
nxyST-fygkU
e9qFzteoO4I
AXCjUzfdFc0
BOMLocijYPg
Z2Jz2Yf8rzQ
XZ-AlA64y4c
DpODDZQPBuo
XgvQB1AdrGI
8Z6bFA6RIXk

844
download/2.txt

@ -0,0 +1,844 @@
UWtl6qGwWi4
z1oUmFdjBLM
WHxOQERmjj8
vP45wBOQLS8
zNRvAMJOfAI
8BcrPvTRwEw
vHUZVwvvP7o
q9SJrKu8bK8
8u29X8-FCdI
Xtzn5vcwd_k
u-OUVJ6Q3BQ
Q6eo6-7Zx2U
lZ2Iypruyvs
Dj7vqdzeAsc
AutEIJPO1Oo
U7Nz9hYubl4
VDR6vTLVKpQ
0gLvaVGzDLQ
JTHIiWCH5C8
XW1CPagJrng
lDrgvXXePa4
qOceoS9QfNY
M_djroI_SUc
7lcDcukeXL0
G4Q9bKjJm80
SJjb6s47fWM
JtIeGF90JmU
0qWGp3qLz8w
fyyjR-oV2X4
jcxPGt8hYDw
ILZqg8r-4Cc
tq-HN8NH560
bh5nwvHRBnY
bwHS0BBS8e8
CkdmEcxgA8s
DJpyqvikK9o
xdl6Ha4Fnz4
b7XxeNFPufQ
N1j8CUU5u_Q
VII78ZbiWco
rUZ4do9JGe4
CNRZZypRzcQ
dubffuGwCnI
Ck_59cugFk0
hyv7LIP2flQ
kE96mjfBim8
GMUPDRfi61w
DsizMS_KZUE
ppDxRVMngAs
vfd_8wQ_N1c
QYD5TL7DDR8
lVaClhjFYG8
zUVDbElrzQk
w11nkI15jSo
xpIdVqis9do
Sgo5ZA3qTHk
r6Puh1BGegY
0r2Xeh-pGgw
OqkhMVz4wCc
zHJB4UeKhUM
9ISGy61JnTg
6UGEc3R5X44
szP58gaqfWk
P6Kw8tpGQBk
7DptVeMPn-s
hWySnyhms9A
NsRmJDJCE-k
EIpxpLcEg44
7JRL7cb9Jc8
SQdRWIYCFyY
Rt2MnfWBmlE
3yHjCd4duDg
Qeqd6f4kZPA
minjC6jsvGc
DvQbBsYqK5U
0c_UB1Vx-MA
qRVIfAooJ6A
lkd7btzsXoQ
kAgXGVrnj8g
TakR3fGNYgA
134IqJyqTOU
an0lu1dcuC0
dcNWZQ3U7bo
miJOayHbOzQ
uW1k4uu7BNE
T2PPM12euAk
qmZ7iEtW1Nk
a6whaN_R778
PlKCr7wyqfs
rOY4qWy9ggI
lgE4dL93AsQ
kUyvsOqSmAU
vWOsT03UoA8
kaK-PM_lSgo
Ln9MN0stlv4
y1C-sZa8EZU
nKzBuKPfgmc
HIsNBvjus9E
0KWqjlYOq7w
YBV2_l-_eDg
iU6M-A7STwQ
cZakIrpAY2o
Wy7jEXVqoA8
-OVbFSrWCQY
Ff9-78ePMz4
LvofUAyjXGE
0mYf3i_TpTM
Aiy_NBnVg-o
GYCotOWMli8
afkHFuTZ1Pk
k9h8FcPPTvA
R1YfaukAS6M
OKKaSdbR7Bg
0B9e_6u2Yxo
wQIG01MYCo4
uZgl6gk8zVA
b03hMIPeZJs
Vanrw-pOxd8
cT2hdetPVPU
YbVger_nh-s
71C_wRR9sh8
QhpOev19qNs
L0513-woAxE
VACIHBkM2zU
1sF-wniP4M0
2tJ6wNDuQhk
RDzatS8S6NQ
XuL-sOgI1ZQ
o0J21fno0JM
bRNZMl6d6kY
gZjz-khSEh0
ZhIqqH-Na94
lMnwqmKymas
LW4fqta-pLA
0dwS-FBhoAI
IKPjKCx2vsg
a-287O54ZIs
Mi9Lm34Wv_Q
1EVtGvA3-3A
_bhF62xQvi0
PbvLvGkIOn4
zlAF-ptPYVg
dJ8bHIV6A2g
Uthr81xxaRU
36qbHik7c6U
pQbYHOPtMlg
ppwG1NoSxIY
WGTAo-U8aQM
bxFw_luD0Zc
naKGkXc6BSc
F8ctvrEEiOM
NusOfWWjvG4
uGdAXZNRRB4
wqEQgkOiSng
ZwprAHq25Kc
KQi1IfA72UQ
cesA_CNSxvg
ec0on_nfWso
9GTTxDzICFY
8_9gzAqqXQc
ZTQiXvPig3M
NAhVZOzaft4
hCpVDYGfh4Q
U_qym3GfPAg
sGdSvaZOT_Y
mYgCld_f1sg
kvyhv9p46lI
lBYF_5eTOXo
kD0fOuNq8f8
YG258iaFdo4
21zUEx7QZ90
hZ3IOfY3X4g
lfYcXHkpno0
_NS7cWO16SI
hSYHqPbyETU
Zplt8BbzQuM
_S0UKtzUcjQ
Ovw02gl84TI
QW3XHmbAuLQ
NsdCnkCkpKM
hAXQAzT76to
OxtsTQ9Pkn4
3cz0MT1NxYY
Ivru-6cJ57I
8xM62YCiaso
VVRBQLiJ_k4
Tik9Bf__o64
lLqyn_C7g2Y
_i5CoY_LMYs
HiQUQApU-HM
J2WRd2zHiDs
YtgWm3dMhUY
K0LzVRhq0Lo
8eExicJR5rM
ebed71b-76k
7g9ZXxIDvDA
XBlXzrMWetY
-eVd337Aqdc
mc7gvsDJfIA
bVOQZ8plSjo
oi6n4ES4V0w
PU9JATcXEuM
B0zC9ldLX5c
XOtfAuu2Ft4
UXyRRqMZXJE
_ym5HwykD2s
d-hHmdHyJ5k
Sw9S0JYKu_c
GgRm1RxIuK8
Ks7ZmLAEJ_w
OQNHhSCaSsE
BhhOlKCj7sA
5OY6KvNwW5o
SoPb5ajisn4
QTF_F5KYOVY
Y680xh-MHDc
5X0y7dBK0-4
JgvHyRbcm6w
J4ttfZpy3Iw
iyp3xsVQYdY
ZimszWryrx8
AsjngETV-sU
w096RqLsqoU
BKA7zeYEa1s
4sJuQaHyUhY
yGWHO4K15a4
gjy9ns8Y82U
Qu5tFss83NQ
_j3uZbv3zQw
DAz5OUKO5pM
Z6EsDXnhFM8
UV7R78FgZmU
0-LuGpFlMtA
DfQ27TD8KQQ
Qn1V7ljJ_-k
DFVRJOhdvxo
eE6F_wc_zzg
4xAqysb3jpw
DfZM8L_72e0
ptt-J-X5TOc
zwBVXdVvvto
pRYIiPdV4N4
bu8NfyQOA_c
kah_Gnqmoeo
XPxjjJNd8-Y
PSqjwzsycE4
LFxmrvetjBs
YNk6PLK5yTE
I3YtSWY7orA
MHn37ruwEyk
pPNGgNPIcuk
e0ih7B8C-hA
-N7BceYS8Rk
YZw7b3Ld2d4
BN0Z1Li5asY
XNmedeg--ao
BCTEJuVY2SM
rm6pqwlQetI
kH03Zmvkv88
6sPfR3uLFGw
qwJ5wDiXUoI
54IB0gxQSjc
SxCh60RJsGI
oKeLlfU6m_0
2JkHVr2F8q8
48PBWRbB8_o
F9XZzBEL6JM
rVaMhMliKxc
ri3Xd9ACpEw
99eqLXRVbI8
Tcm2d6Fg9-M
8VtITkvKXnk
f8F3f4wsgws
zu72j73Zd-U
3Ny9aDDM1Zg
GdDXz86g72w
cialGlj3K3w
tSJ5PMOjj9E
YdwMV13eTHQ
B3fNZi4Tm-k
jS9dVXMRYvo
rsjFjJPkGbc
rIuxYR_9fQ8
iKaiQNpehE8
TUrM3t7BtOg
zKKHJqWGPlY
LMXEqWjmFNo
lYNf7I96XWw
LqzgPB50JJ4
L5uqiFGcc7w
QQfm5w-6R3c
VbagGmFzfXo
S2-nVAEeX6o
tK3SWHSAJSY
WIw2zrtkeQ8
pJCXmdn4H5c
SruPW8VJk_Q
MeqEK3jDR9c
LVCCOJH2jJQ
cVc6C77M9T8
XwLUBFJ4nRc
dGDrRZ7xuBg
mIjXVvLJxds
plsmu6xIscY
nml_koioK_w
ehJZnsWijGQ
vKXEPDEpQT0
h5VGMxmDBg8
BuZbZ8BYVlI
TQq7fc93lXA
hD-S9LlDtBE
AUa7OqqJPDg
danEfcTTOMc
utUY_zq_f4o
BNSLnOV9fhU
f56l-3fSRRg
uIRJKyHPR7s
GMKQjhHke4U
lETY5h5S7QI
-qcxWa2Ma0k
heAqqvrC2xU
ZwFktQC-8ng
DMFklDWkIac
rOwX8fw-hbU
Uq4-g0cwcns
PVi74KaEoqc
snOwJIqUwUg
_zg906NM0c0
9uArbbpq8Dw
2TY1owq0vXk
nx13JXa6bb4
s9QettXrHv0
ZeQxsYGIN0o
WZc4nPtReIk
aozXX_A8A-I
762iPaRbbYI
Vu7bbYBl-sE
FDpTv2P-3js
yvpINJSoG7Q
iBU0MiGpsF0
2zJ0_VWYi34
7UyfXElZtK8
mXpuyR-NTlI
kFzWiLB4K3E
KBcx72dwdy0
lNRExaIKz5k
LzRLGxOnnYo
QWFdQ1kfUK8
FFpx9WboJrs
fsmn0Iu04O8
kCzfw_mrwOc
tnMpIP6KlNo
oMcRx2goEnI
ni6tGA3mw8o
vpKJoVtic_Y
_erAGggM1-o
evU-adA2KOc
TbYvznjRzCA
P7Sm14AW5PM
EoGw9n5MThI
IkXVjRw79Dg
QoGJV5AO3IQ
WypLtEyXIeM
4zH-xz0CvhA
ZYxBj7I1Jrc
BgdHn1l7IPE
AK9IFG8kWxk
3dwO5oRudU8
jMHpK8GwZAA
dQ2bjo07aNs
2rYA9ouawDY
QF-iYYS4tno
Ymds3RPWLz0
7gf_bApDZoQ
4SjqkZJYKVM
nhrzoMlJqRU
9zpL9XQzKy4
uUL0nY8bfrg
PsQUH1_898M
aLtCAOP_hXY
YLGQRly_h7o
bqxfbOiBfPM
T2mv8LHz_V4
7SR3DILYx6Q
kjRklowoH-U
7Z919yXmPT4
G82AfqeprR8
37hCnVpQD1M
ltGND9pANxM
eHOk8GPFjA0
bYtwDRJyDP4
vps2I5xVYa4
z5WY2Sf4MaE
EqIeqHRSQxA
gb0k4YJQHHk
K-l2RIPZqLM
QrS0GESLElI
f90J6B8mplw
hgAKD96Yb8w
EKp4uIDHpx4
h5EjP4LVkgQ
EYOe99oay2Y
PaYiPim8U9Q
8OM1HhLAqIk
pg0-ORqb4VI
NQSurtmxC2I
GiuPBufrNx8
12Ns515_mNw
yY5OY0P7YoY
8LnSbIu5WQg
bCsfvxGlOSo
6Mx15eJ0gSY
OliqIpqvDIk
EswWez1IQpo
Z5npXPnItPs
HyXH0hO3zWU
dTGhDKV4u9s
NTWEmRo3mKQ
e8p9SEsq8II
dGFyDcceKBU
7TaYvpbav3g
j4GnPFT4x2s
8BexTuA2uV0
_GAO9VOCqhA
F-lPioe1q_g
kCDJysf2qbo
h9qH_56nvZc
R0otilV7gVM
FzMGrj781qE
ohP0VNOdkAA
XtZfD8BgSoo
aqMhscNfVy8
CwQEp_i8_IY
vuDHG2RAg08
beeBnMgq-Q4
3VF3YOkCrtQ
sQj3fSLFQso
vKijAA-ZB-Y
aw1i78Boqtw
F9B_udpSQ_o
FBa59sjpvo0
bymzxbxDcxc
EfJK3EJP4Yc
SC8ISPrAH1M
zOt3ITGW_oQ
eiNDYHLonYk
Do7-mbJgp_Y
YOZvavHKfTo
oN6gm9cW7AQ
FZ-cZ9AV5NI
FMQZKwiloKQ
5NPWrm7fzuU
SKhv_ASeqO8
HwLaRr2DdtI
zF8xqYVm0JA
JmC3F_rbNHw
ifIPb5TY6B0
P36Og8ydz8g
FOrR4b9dEM4
ncJ-hBfg9yQ
hQLa581XUNA
c_ZUDH9NtdE
phkQgLpB6NY
AjQwbSJ-4Hk
EG7wI4VBVYI
dNidgo2HpEQ
GfK7Ddh9k4M
eD5ktc3g7BA
WXdKlMDpkSI
38t71cVFnDI
pDYYNeoJ4_4
a-8lNiFM1_k
H4_VJS10-4Q
h2L7h3Xd7U0
PPZPEMLCid4
s8OyCB9zec8
zs7xtgiI8Ys
nU-ruZpQnZY
lmGvNgrhbq0
KCWbtoxQJg4
gGK1iOX_fRQ
E0vMonVAE8w
g5xGWxGArgM
gGcCI6xuWLk
0iK9VsWvCow
bfbmtwq2V7A
Le703VmJN3o
KqHRN3Yy2rs
gxeQa_iREpc
FaNu-wK4MTA
zbb09zSKYts
99y5OOPXg20
NvKq-hPPaoM
brI9r5D2cvc
Sv3Ra1btB8c
y2J4JBAvon8
HCNCR2ZE_HM
6FQLW2Whgxk
pSF5ZDmLpLo
fJf8Bg52HA8
-dPYFMapvzQ
t1Whs1-86aQ
LST5MIZLRUM
jwcAfGaA9eo
WoPwVT9Nrdw
A7wnOz32_Bk
FCTYkTe1J1g
WC3IdpV8B9Q
FaJOGRnEHNg
HUybRSLjTLI
0Z8KFCbh_xI
ShjK-pIKE90
MGqajM7d7U0
ay-sgjrl02g
-o-asb4ZV8M
QGjZGvpXBUo
oXLMC7DXqD4
KClLcmCid3U
t-MkDH12GSc
YY2Q4XDmZDE
-Lvgk3GUDlg
dKXMWcIve3k
W5XOP7JEces
FQ0q0uh9pzw
RYvO29kfHno
LTYchJ0X5CI
uTaBAfqqb-k
zD0XbB-9DT0
vqEu6CS9VzQ
jYeLPFRVEc4
vSIXsA4mIfs
xWhEwDdxxTM
uehHJ0SI05g
YLs7h3Qwwjw
0ju9bzMP_5g
LZ4RdnyYyvw
twN_-1gqR0k
7z29JVGcFpI
-tIoRbVZFOw
h5qiE1FbO7g
Zo6sKzFGl_Y
hdXotbChOh0
vk1sdoHEZuo
dc8rgD_nZNQ
RGRdIo_eUsQ
0dc4Y2PtwlU
1RU3QxuStiM
4MurylrXcI8
BM3jm780w4Q
oEOldNo7AJ0
ONCS00vhlss
5cKrQbOwxIU
GhlFJdmchLM
ydSudDbKbCY
aPea1Ym3vo4
KxlVqJFuQmY
oiO6XXzZk5w
rVh_ZXObpOc
twTUFVU7zkQ
hpKPxhxW_6c
c4lQRUOybpU
mNKHPtNMvbA
FWix7LL5cVQ
h_FndEQ10CQ
NFmxW6mBuiI
K74vN5j3o0E
3IvDf-PPfhY
PNP4z7a0E8k
oc4cdRe7Wuw
gyEMnvn6SQg
FiT0u_0u-v8
F8aNT5MbOsI
lf9OOZXe9hk
oCGD88gUSlw
CgidmeQ6uJo
wQjobzj6WzE
-uuwGfdTH2k
0VWMfexKl_s
2MJt1dTqbPk
SiQKA9u1hTM
GGaqEo1YiHg
xveUnsEc7V4
esOHvv5g5X4
aioEsYI1n-I
z1vJPOAYxnQ
lWMnayacTMw
wka1nCN3AVc
fo5m9uFKSSU
s7l2SDvnD1M
oi2L5ZdH1sE
XLUyNmBSf8Y
PajaZFBrNtI
FF8zPmRVAKY
EFhQG-1SC5s
dAHrXlofT-s
SFMmkDvD03Y
9gNA1onNL5s
9kMLtat5HX0
iVa1C8cOITY
y5-wzJjtlDM
0b0kkqUmkDg
n3D0THsr3U8
5srNHZA5Kj8
VCZKJI1W4Vw
4_9MV_42v6I
4teB-jgftS0
XR2GBIq7G0Q
ceTnsBlsnf0
RAEvkUXZBZ0
BefCARcRxjc
02EpjF21ftA
lH1GxH7W0v0
zAYAUMfMQgI
DDD9ioJww-M
yvdFiu8KitI
qHJQxPT_o-I
e5CUBBlu3HI
asHlr_Z4_G0
XCQNyRKrm8Y
c9GD0Yf0S40
tTgAz6TsgrY
fBvKl72uMRM
AsiuBT6k3aY
-SI8cZt6Pmk
Vm0tOnh6jHI
Mazv-J0ONfI
1At8lsatWyY
9oJ3UOHdrXE
wHjqNkWPUmk
KMKYutVNHRo
8BbG1Jr94o8
myFqzZ1wN5o
l7a08m-fTls
e8VlwCobFW4
9aMhbg3v7ZE
3v2PvgQg2cE
gcBcqflMp38
8b4zQWlCRUk
0HEYEcGX54Y
JdHvjiUEfRs
D6kjVwsEGyo
hruLwZfkVhk
fwk2QTUBidw
mxzC4Wqcsis
i7t3sSCc3K4
mnC4OK4YVL8
XDk3yFhZyYU
ysbMIjzzX_g
tKl2_PeK0DY
gNv26OMru5o
HZZpF0aOhRs
4cRZsCtfRgo
rLkUeVlecS8
aj6qedt2DDw
N-OdqsTXGOk
B8FbVCTTIO4
FSujL6gNxrY
E4YJArZK9n0
gYE8uRkzxHU
AGbx1BnJSoE
Az_zupGkG0M
1KpD6MOOzcc
YRLj_TosW7I
9CsrHv6eZIE
8TZ5BquBT2E
mfk_b32LSQw
Uh7TDCtIn8E
vbEG02oRyMY
peXyzRBdupw
4lJ6bNfOglU
T_Jo654U2xQ
VX06S13qeZI
axe0fGOhtKc
96q-ZU-XGng
Jm8mDXe5ngw
eKLZ6MM_h1g
5jjF0nH4yCc
TAoyA-DZaEU
vgYFJJbhPiw
9dif0O9DZJQ
aeSxj1V8Y3g
hbfeyS-oKd4
FjgR4ujytXM
Se81AYtTf34
0LYnHalA6Gc
Inpn4Ii9paM
466LT31Qf0Q
3s_bOmK1xKU
VPfEJl1AgVg
TBf1sPZMmYM
ep-lvjmdxFc
UXz5wkZ34-8
Iu4D3V2XaE8
_VlL_azNoKs
z43-N0AnSOw
3yqqTMdjXWo
p_-2QgNrpso
MYD6XdwP-JM
kRV9FhA1V6I
eAyLvQH2CcI
vJfZGz_HuIs
nBAqXqGxF6I
yCA9GVAn5H4
WQd1pYh5SrI
EUL78wa_tCI
tdnSANn-GMA
sa7quiyPj74
KwN4wQQ9mkk
HvgcqUcrgDc
BPNqDkiGhec
64kF17MVrhM
Sx44w4ifxRY
hhC9yzqGZ9U
XFpxWF3I27g
es0iDEjNH5s
IO3OKwIqfbg
Uy3S5mvNgtk
FgWg85IgSUU
Txim5iOLm4k
47m1uVWp5KE
sJyw55cuGbY
H0N1JL3dbsY
ceCeLOK9naA
DCvQcFEIkvw
omhKwYWmAUs
X-ebiJZfVeI
F8iT6mktjxw
zF9oBF3t5Ss
gb2-MxXFeCs
bDaTh-ZtAuU
NSSHi9Rr7KY
8J4nrVbV12k
M-VpDP19UvQ
Fum57IKx-Lw
3pt08ctDDCM
wC756nEakWY
jPQmJxFK31E
wjr36QmZP2w
eT8xd3ap5oU
sufXJvfHu3w
EmmRSpJu-jg
YrGbJe4liNY
r7Zb_mT3MQg
kNm9l_TJrYU
V64Td4RaqIc
uqQmtCL7jc8
Zalkuw0rvSk
s97xIWkTzFA
ivo5-TCkhOg
4Pqp_lzTNM0
4QT3j_5Uoeg
oTL3DSnpZr0
-HNTJcvj3zo
HRk03Rg7E7w
L5DTSQql98A
Y4bzi0vgZkI
5AX9ggE0U_8
UAZmT0lkFkk
sJbLjfYYu2E
HChvKX_D4Tw
17KQWdTvPWE
4UsSPWi5y1g
teMst1H9yn8
-z-UOCgnFfQ
f3zL0n_Hk3E
JRYJtlH1OfI
Wkrky8zrFtk
Lr-JwK4J1Uw
dRfPXj4wZcg
FsMFWiAwhho
_COeHpFEVfA
b7tRyQ36S8Q
KFX7xlqKeu4
a6olTZaiKHs
1N5mrqOsGoI
PH4A7_Q-TUo
DWtahGCKjK0
OWb9MeElJhc
GcbrZXO7Bbw
jqHWy0Sbcyc
19ld4QjJduE
bFq5tvCUOH8
eSTC5UaruFI
h-hI_1HDqnI
alDGvrg7dKA
_125EGAGx6Q
4WmDYWv8rFk
shvxCcbep7Y
Qa9YXSj34h4
rdnx2dlWiS8
4kk4bpC2Dzw
rIB9jlj5t14
Z3LQWj99rJI
iyforucadFM
l20FaAFtb4M
sCuatSJRkAo
ZdQ7yf37-UQ
qR-lmj9PhYQ
BHZTZcHN-TA
UqDRX9ul7ec
_yeA4o6JSLo
dtkymloqOIY
zorenF5M6pQ
ti0j2QqQoPY
hkqmCzHZNLo
KchJy9kAY_w
vUbJF8Zqxcs
0k1MAc5hN6w
SU_VlaJSQ7g
R2ZFoERvTqU
402yBUAGLRg
xvkmEV4bpUw
xlH1Yf6rRlU
gS00eQhjkxs
pQz-oswKdRE
zYrfoexE0Rs
ZoLJLHv5P3o
fmRMB00b9Ek
0Xo9ZlLb12o
oQAJxc462Ws
RctollXTnpE
c320qSwrStc
dKS12-2WQ3Q
fniICGM9KoY
BMD4CqKX-vg
IFjDXXNECuQ
TEYhHKRpYkg
hVoDimdg2Lg
0TWwbZ1FZNk
mVVu1wo1z80
P0_P3pjbOsE
KwhopDVUJAk
7SsEEX01ugk
qIkCZu5pkY4
bAfCV0nax5A
2DwCpSGd18E
EOXd7_HCVrc
FHjUI10GhLM
JpS6fgvEksc
ra8pw3xOXsU
yZgajM8k3sQ
FGu-kh5Lh4Q
rpHQ-zFjakk
biMyn2-HHCQ

152
download/DownloadUtil.py

@ -11,6 +11,8 @@ import os
from func_timeout import func_set_timeout
import operator
import pysrt
from pytubefix import YouTube
from pytubefix.cli import on_progress
class DownLoadUtil:
@ -18,8 +20,6 @@ class DownLoadUtil:
formatter = SRTFormatter()
proxies = {"http": "http://127.0.0.1:7890",
"https": "https://127.0.0.1:7890"}
def iterateSrt(srtFilePath, videoId, channelId):
# 查询是否存在
@ -35,6 +35,26 @@ class DownLoadUtil:
srtStartTime, srtEndTime, sub.text)
ordinal = ordinal + 1
def downLoadMP3(videoId):
video = VideoService.getOneByVideoId(videoId)
languages = str(video.videoLanguage)
channel = ChannelService.getOneByChannelId(str(video.channelId))
videoUrl = "https://www.youtube.com/watch?v={}".format(videoId)
yt = YouTube(videoUrl, on_progress_callback=on_progress)
ys = yt.streams.get_audio_only()
mp3OutPutPath = "/mnt/srt_file"
# TODO test
mp3OutPutPath = "D:/Work/Code/youtube_dev"
mp3OutPutPath = "{}/{}/{}-{}".format(
mp3OutPutPath, languages, channel.channelId, channel.channelTitle)
if not os.path.exists(mp3OutPutPath):
Logger.info("开始创建文件夹:" + mp3OutPutPath)
os.makedirs(mp3OutPutPath)
fileName = "{}.mp3".format(videoId)
ys.download(output_path=mp3OutPutPath, filename=fileName, mp3=True)
@func_set_timeout(60)
def downloadOne(videoId):
# 获取数据
@ -55,8 +75,8 @@ class DownLoadUtil:
# 开始下载
Logger.info("开始下载...{}".format(videoId))
try:
mainPath = "E:/Work/youtubedownload/main"
tmpPath = "E:/Work/youtubedownload/tmp"
mainPath = "D:/Work/Code/youtube_dev/main"
tmpPath = "D:/Work/Code/youtube_dev/tmp"
# 获取字幕
languages = str(video.videoLanguage)
storePath = "/mnt/srt_file"
@ -80,6 +100,10 @@ class DownLoadUtil:
storePath = "{}/{}.srt".format(storePath, videoId)
cpPath = "{}/{}.srt".format(cpPath, videoId)
# 判断文件是否存在
if os.path.exists(storePath):
Logger.info("{}已存在",storePath)
return
if len(cpPath) > 120:
storePath = storePath[:-20] + ".srt"
@ -104,102 +128,24 @@ class DownLoadUtil:
except Exception as e:
Logger.error("下载失败...{}".format(videoId))
logStr = "Exception...{}".format(e)
Logger.error(logStr)
downloadInfo = DownloadService.getOneByVideoId(videoId, 1)
if operator.contains(logStr, "No transcripts"):
Logger.error("VideoId:{},不存在字幕文件".format(videoId))
if downloadInfo is not None:
DownloadService.changeDownloadType(
videoId, 0, 0, 1, 2)
elif operator.contains(logStr, "File name too long"):
# 文件名过长
languages = str(video.videoLanguage)
videoSrt = YouTubeTranscriptApi.get_transcript(
videoId, languages=[languages])
srt_formatted = DownLoadUtil.formatter.format_transcript(
videoSrt)
storePath = "/mnt/srt_file/" + str(channel.channelTitle) + "/" + \
videoPublishTime + "-" + languages + "-" + videoId + ".srt"
cpPath = "/mnt/tmp_srt_file/" + str(channel.channelTitle) + "/" + \
videoPublishTime + "-" + languages + "-" + videoId + ".srt"
if len(cpPath) > 120:
storePath = storePath[:-20] + ".srt"
cpPath = cpPath[:-20] + ".srt"
Logger.info("文件名过长,文件地址...{}".format(storePath))
with open(storePath, 'w', encoding='utf-8') as srt_file:
srt_file.write(srt_formatted)
Logger.info("下载完成...{}".format(videoId))
copyfile(storePath, cpPath)
# 修改video数据
VideoService.updateIsDownloadByVideoId(videoId, 1)
# 修改downloadInfo
downloadInfo = DownloadService.getOneByVideoId(videoId, 1)
if downloadInfo is not None:
DownloadService.updateInfoByVideoId(
videoId, downloadInfo.tryTime + 1, 1, 1)
else:
if downloadInfo is not None:
Logger.info("VideoId:{}开始重试第{}".format(
videoId, downloadInfo.tryTime + 1))
DownloadService.updateInfoByVideoId(
videoId, downloadInfo.tryTime + 1, 0, 1)
@func_set_timeout(60)
def downloadTwo(videoId):
# 获取数据
video = VideoService.getOneByVideoId(videoId, 2)
channel = ChannelService.getOneByChannelId(str(video.channelId))
# 格式化title
videoTitle = str(video.videoTitle)
videoTitle = str(videoTitle).replace("/", u"\u2215")
videoTitle = str(videoTitle).replace("?", "")
videoTitle = str(videoTitle).replace("\\", "")
videoTitle = str(videoTitle).replace("|", "")
videoTitle = str(videoTitle).replace("<", "")
videoTitle = str(videoTitle).replace(">", "")
videoTitle = str(videoTitle).replace(":", "")
# 获取发布时间
videoPublishTime = str(video.videoPublishTime)
videoPublishTime = str(videoPublishTime).split("T")[0]
# 开始下载
Logger.info("开始下载...{}".format(videoId))
try:
# 获取字幕
languages = str(video.videoLanguage)
storePath = "./download/" + str(channel.channelTitle)
if not os.path.exists(storePath):
Logger.info("开始创建文件夹:" + storePath)
os.makedirs(storePath)
storePath = storePath + "\\" + videoPublishTime + \
"-" + languages + "-" + videoTitle + ".srt"
videoSrt = YouTubeTranscriptApi.get_transcript(
videoId, languages=[languages])
srt_formatted = DownLoadUtil.formatter.format_transcript(videoSrt)
Logger.info("文件地址...{}".format(storePath))
with open(storePath, 'w', encoding='utf-8') as srt_file:
srt_file.write(srt_formatted)
Logger.info("下载完成...{}".format(videoId))
# 修改video数据
VideoService.updateIsDownloadByVideoId(videoId, 1)
# 修改downloadInfo
downloadInfo = DownloadService.getOneByVideoId(videoId, 2)
if downloadInfo is not None:
DownloadService.updateInfoByVideoId(
videoId, downloadInfo.tryTime + 1, 1, 2)
except Exception as e:
Logger.error("下载失败...{}".format(videoId))
logStr = "Exception...{}".format(e)
Logger.error(logStr)
downloadInfo = DownloadService.getOneByVideoId(videoId, 2)
if operator.contains(logStr, "No transcripts"):
Logger.error("VideoId:{},不存在字幕文件".format(videoId))
if downloadInfo is not None:
DownloadService.changeDownloadType(
videoId, 6, 0, 2, 3)
else:
if downloadInfo is not None:
Logger.info("VideoId:{}开始重试第{}".format(
videoId, downloadInfo.tryTime + 1))
DownloadService.updateInfoByVideoId(
videoId, downloadInfo.tryTime + 1, 0, 2)
# logStr = "Exception...{}".format(e)
# Logger.error(logStr)
# downloadInfo = DownloadService.getOneByVideoId(videoId, 1)
# if operator.contains(logStr, "No transcripts"):
# Logger.error("VideoId:{},不存在字幕文件".format(videoId))
# 下载音频文件
# DownLoadUtil.downLoadMP3(videoId)
# DownloadService.updateInfoByVideoId(
# videoId, downloadInfo.tryTime, 1, 1)
# else:
# if downloadInfo is not None:
# if downloadInfo.tryTime >= 5:
# 下载音频文件
# DownLoadUtil.downLoadMP3(videoId)
# DownloadService.updateInfoByVideoId(
# videoId, downloadInfo.tryTime, 1, 1)
# else:
# Logger.info("VideoId:{}开始重试第{}次".format(
# videoId, downloadInfo.tryTime + 1))
# DownloadService.updateInfoByVideoId(
# videoId, downloadInfo.tryTime + 1, 0, 1)

BIN
download/download.zip

Binary file not shown.

60
download/main_download.py

@ -4,6 +4,7 @@ import time
import Contant
from LoggerUtils import Logger, initLogger
import Orm
from Orm import Video,DownloadInfo
from VideoService import VideoService
from ChannelService import ChannelService
from DownloadInfoService import DownloadService
@ -22,8 +23,61 @@ if __name__ == "__main__":
Contant.logDir = args.logDir
initLogger()
Orm.ormInit()
testVideoId="oZhBWA3HNhA"
DownLoadUtil.downloadOne(testVideoId)
# channelIds = ["UCUopc5tlSTMgBsZaP4PItRA",
# "UC25CsqDNQv6CdzDq_hsazIw",
# "UC4douYiP0O4ABtxoMuo9yNA",
# "UCaT01FqK7SuPyqR8d2gvuiQ",
# "UCA_hK5eRICBdSOLlXKESvEg",
# "UCrZzlE9f9aR6yjvIy6-hggg",
# "UCrm095p7ZHRS1njmQ1wkgCg",
# "UCDDneQi63kJAdr3i5VCPzHg",
# "UCwWXGnvVmi-6Sfx2wf8S8tQ",
# "UCuzqko_GKcj9922M1gUo__w",
# "UCwIdAI4fCV4lisP3TZzOGuw",
# "UCYDaGPmMfSXViITpPYDKIcw",
# "UCqULpqYsoBDTc_QswJOwMdQ",
# "UC3GeULpLgXi1TNDAv0nyN5Q",
# "UCYIVkruUoN04UjV9pkBTswg",
# "UCya5E2GyEep6HuEsmLUcyWA",
# "UC26mgnC13yyRANhG8bEf26g",
# "UCJcPWs0gpYMx_CghPdELUhw",
# "UCyF2mDq-XtPbhgTXwz1p93A"]
# channelIds_hk = ["UC7v5yfvZhs-d5opF575AEhA",
# "UCCHUPcdmSP-jqAkh4eh96yg",
# "UC4G8Si5IBGy9k_1Oo04DMVg",
# "UCAwfc603xR0xXQN58x4uWeA",
# "UCHOLdIRhuGvY6EcpmDno3Iw",
# "UChQ2W327SnjTlYZwCijCFYw",
# "UCOjQAwkxNOY76-_zPqOWziA",
# "UCkx8tfePUl__VGvNDNOKqRw",
# "UCGAbl3E1aqqgrjwIaiDDdqQ",
# "UC15Qrw0HKAMf2RG9PMNRPLg",
# "UCilwQlk62k1z7aUEZPOB6yw",
# "UCNRdj1WX-bxm5GPJtR2cM5Q",
# "UCdWNwPuaS1o2dIzugNMXWtw"]
# query = (Video.select().where(Video.channelId.in_(channelIds_hk)))
# videos = query.execute()
# Logger.info(len(videos))
# count = 0
# for video in videos:
# videoId = video.videoId
# downLoadInfo = DownloadInfo.get(DownloadInfo.videoId == videoId)
# if downLoadInfo.isFinished == 1:
# Logger.info(videoId)
# count = count + 1
# DownLoadUtil.downloadOne(videoId)
# time.sleep(2)
# Logger.info("间隔两秒")
# Logger.info(count)
for line in open("2.txt"):
line = line.strip('\n')
Logger.info(line)
DownLoadUtil.downloadOne(line)
# testVideoId = "5RbZgn3Ql5c"
# DownLoadUtil.downloadOne(testVideoId)
# list = DownloadService.findNotFinishList()
# Logger.info("list size:{}".format(len(list)))
# while (len(list) > 0):
@ -48,4 +102,4 @@ if __name__ == "__main__":
# }
# }
# requests.post(webhook, json=jsonData)
# Logger.info("download发送钉钉消息成功...")
# Logger.info("download发送钉钉消息成功...")

16
src/Orm.py

@ -21,6 +21,7 @@ def ormInit():
DownloadInfo.create_table()
SrtFile.create_table()
KeyWord.create_table()
WordResutlSet.create_table()
class BaseModel(Model):
@ -85,4 +86,17 @@ class SrtFile(BaseModel):
class KeyWord(BaseModel):
id = PrimaryKeyField()
region = CharField()
word = CharField()
word = CharField()
# 关键字和字幕对应
class WordResutlSet(BaseModel):
id = PrimaryKeyField()
keyWordId = IntegerField()
wordText = CharField()
srtId = IntegerField()
srtOrdinal = IntegerField()
srtText = CharField()
videoId = CharField()
class Meta:
db_table = 'World_Result_Set'

10
src/insert_keyword.py

@ -24,8 +24,8 @@ if __name__ == "__main__":
Logger.info("SqlLite存放地址:"+Contant.db)
Logger.info("日志文件存放地址:"+Contant.logDir)
Logger.info("开始初始化...")
df = pd.read_csv(csvFile, encoding="utf-8")
length = df.shape[0]
for i in range(0, length):
KeyWordService.createOne(df.iloc[i]["market"], str(df.iloc[i]["lname"]).strip())
KeyWordService.createOne(df.iloc[i]["market"], str(df.iloc[i]["sname"]).strip())
# df = pd.read_csv(csvFile, encoding="utf-8")
# length = df.shape[0]
# for i in range(0, length):
# KeyWordService.createOne(df.iloc[i]["market"], str(df.iloc[i]["lname"]).strip())
# KeyWordService.createOne(df.iloc[i]["market"], str(df.iloc[i]["sname"]).strip())

82
src/main.py

@ -2,6 +2,7 @@ import argparse
import Contant
import LoggerUtils
import Orm
from Orm import Video
from VideoService import VideoService
from YouTubeUtils import YouTubeUtil
from ChannelService import ChannelService
@ -23,27 +24,64 @@ if __name__ == "__main__":
Contant.endTime = args.end
LoggerUtils.initLogger()
Orm.ormInit()
LoggerUtils.Logger.info("db:{},logDir:{}".format(Contant.db, Contant.logDir))
LoggerUtils.Logger.info("starTime:{},endTime:{}".format(Contant.startTime, Contant.endTime))
LoggerUtils.Logger.info(
"db:{},logDir:{}".format(Contant.db, Contant.logDir))
LoggerUtils.Logger.info("starTime:{},endTime:{}".format(
Contant.startTime, Contant.endTime))
channelIds = ["UCUopc5tlSTMgBsZaP4PItRA",
"UC25CsqDNQv6CdzDq_hsazIw",
"UC4douYiP0O4ABtxoMuo9yNA",
"UCaT01FqK7SuPyqR8d2gvuiQ",
"UCA_hK5eRICBdSOLlXKESvEg",
"UCrZzlE9f9aR6yjvIy6-hggg",
"UCrm095p7ZHRS1njmQ1wkgCg",
"UCDDneQi63kJAdr3i5VCPzHg",
"UCwWXGnvVmi-6Sfx2wf8S8tQ",
"UCuzqko_GKcj9922M1gUo__w",
"UCwIdAI4fCV4lisP3TZzOGuw",
"UCYDaGPmMfSXViITpPYDKIcw",
"UCqULpqYsoBDTc_QswJOwMdQ",
"UC3GeULpLgXi1TNDAv0nyN5Q",
"UCYIVkruUoN04UjV9pkBTswg",
"UCya5E2GyEep6HuEsmLUcyWA",
"UC26mgnC13yyRANhG8bEf26g",
"UCJcPWs0gpYMx_CghPdELUhw",
"UCyF2mDq-XtPbhgTXwz1p93A",
"UC7v5yfvZhs-d5opF575AEhA",
"UCCHUPcdmSP-jqAkh4eh96yg",
"UC4G8Si5IBGy9k_1Oo04DMVg",
"UCAwfc603xR0xXQN58x4uWeA",
"UCHOLdIRhuGvY6EcpmDno3Iw",
"UChQ2W327SnjTlYZwCijCFYw",
"UCOjQAwkxNOY76-_zPqOWziA",
"UCkx8tfePUl__VGvNDNOKqRw",
"UCGAbl3E1aqqgrjwIaiDDdqQ",
"UC15Qrw0HKAMf2RG9PMNRPLg",
"UCilwQlk62k1z7aUEZPOB6yw",
"UCNRdj1WX-bxm5GPJtR2cM5Q",
"UCdWNwPuaS1o2dIzugNMXWtw"]
query=(Video.select().where(Video.channelId.in_(channelIds)))
videos = query.execute()
LoggerUtils.Logger.info(len(videos))
# 执行查询
channelList = ChannelService.getChannelList()
LoggerUtils.Logger.info("list size:{}".format(len(channelList)))
for channel in channelList:
channelId = channel.channelId
LoggerUtils.Logger.info(
"channelId:{},startTime:{},endTime:{}".format(
channelId, Contant.startTime, Contant.endTime
)
)
YouTubeUtil.getByChannelId(channelId, Contant.startTime, Contant.endTime)
# 发送钉钉消息
webhook = "https://oapi.dingtalk.com/robot/send?access_token=c8c8d7d42c4eecd449dd303025ef968f647d1d8e8694e3fabc0ab5770d646dcb"
jsonData = {
"msgtype": "text",
"text": {
"content": "[Youtube]src finished"
}
}
requests.post(webhook, json=jsonData)
LoggerUtils.Logger.info("src发送钉钉消息成功...")
# channelList = ChannelService.getChannelList()
# LoggerUtils.Logger.info("list size:{}".format(len(channelList)))
# for channel in channelList:
# channelId = channel.channelId
# LoggerUtils.Logger.info(
# "channelId:{},startTime:{},endTime:{}".format(
# channelId, Contant.startTime, Contant.endTime
# )
# )
# YouTubeUtil.getByChannelId(channelId, Contant.startTime, Contant.endTime)
# # 发送钉钉消息
# webhook = "https://oapi.dingtalk.com/robot/send?access_token=c8c8d7d42c4eecd449dd303025ef968f647d1d8e8694e3fabc0ab5770d646dcb"
# jsonData = {
# "msgtype": "text",
# "text": {
# "content": "[Youtube]src finished"
# }
# }
# requests.post(webhook, json=jsonData)
# LoggerUtils.Logger.info("src发送钉钉消息成功...")

11
test/test3.py

@ -0,0 +1,11 @@
from pytubefix import YouTube
from pytubefix.cli import on_progress
url = "https://www.youtube.com/watch?v=PKHQuQF1S8k"
yt = YouTube(url, on_progress_callback=on_progress)
print(yt.title)
ys = yt.streams.get_audio_only()
ys.download(mp3=True) # pass the parameter mp3=True to save in .mp3
Loading…
Cancel
Save