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. 58
      download/main_download.py
  7. 14
      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 symbols
cython_debug/ 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 from func_timeout import func_set_timeout
import operator import operator
import pysrt import pysrt
from pytubefix import YouTube
from pytubefix.cli import on_progress
class DownLoadUtil: class DownLoadUtil:
@ -19,8 +21,6 @@ class DownLoadUtil:
proxies = {"http": "http://127.0.0.1:7890", proxies = {"http": "http://127.0.0.1:7890",
"https": "https://127.0.0.1:7890"} "https": "https://127.0.0.1:7890"}
def iterateSrt(srtFilePath, videoId, channelId): def iterateSrt(srtFilePath, videoId, channelId):
# 查询是否存在 # 查询是否存在
if SrtService.checkByVideoId(videoId): if SrtService.checkByVideoId(videoId):
@ -35,6 +35,26 @@ class DownLoadUtil:
srtStartTime, srtEndTime, sub.text) srtStartTime, srtEndTime, sub.text)
ordinal = ordinal + 1 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) @func_set_timeout(60)
def downloadOne(videoId): def downloadOne(videoId):
# 获取数据 # 获取数据
@ -55,8 +75,8 @@ class DownLoadUtil:
# 开始下载 # 开始下载
Logger.info("开始下载...{}".format(videoId)) Logger.info("开始下载...{}".format(videoId))
try: try:
mainPath = "E:/Work/youtubedownload/main" mainPath = "D:/Work/Code/youtube_dev/main"
tmpPath = "E:/Work/youtubedownload/tmp" tmpPath = "D:/Work/Code/youtube_dev/tmp"
# 获取字幕 # 获取字幕
languages = str(video.videoLanguage) languages = str(video.videoLanguage)
storePath = "/mnt/srt_file" storePath = "/mnt/srt_file"
@ -80,6 +100,10 @@ class DownLoadUtil:
storePath = "{}/{}.srt".format(storePath, videoId) storePath = "{}/{}.srt".format(storePath, videoId)
cpPath = "{}/{}.srt".format(cpPath, videoId) cpPath = "{}/{}.srt".format(cpPath, videoId)
# 判断文件是否存在
if os.path.exists(storePath):
Logger.info("{}已存在",storePath)
return
if len(cpPath) > 120: if len(cpPath) > 120:
storePath = storePath[:-20] + ".srt" storePath = storePath[:-20] + ".srt"
@ -104,102 +128,24 @@ class DownLoadUtil:
except Exception as e: except Exception as e:
Logger.error("下载失败...{}".format(videoId)) Logger.error("下载失败...{}".format(videoId))
logStr = "Exception...{}".format(e) # logStr = "Exception...{}".format(e)
Logger.error(logStr) # Logger.error(logStr)
downloadInfo = DownloadService.getOneByVideoId(videoId, 1) # downloadInfo = DownloadService.getOneByVideoId(videoId, 1)
if operator.contains(logStr, "No transcripts"): # if operator.contains(logStr, "No transcripts"):
Logger.error("VideoId:{},不存在字幕文件".format(videoId)) # Logger.error("VideoId:{},不存在字幕文件".format(videoId))
if downloadInfo is not None: # 下载音频文件
DownloadService.changeDownloadType( # DownLoadUtil.downLoadMP3(videoId)
videoId, 0, 0, 1, 2) # DownloadService.updateInfoByVideoId(
elif operator.contains(logStr, "File name too long"): # videoId, downloadInfo.tryTime, 1, 1)
# 文件名过长 # else:
languages = str(video.videoLanguage) # if downloadInfo is not None:
videoSrt = YouTubeTranscriptApi.get_transcript( # if downloadInfo.tryTime >= 5:
videoId, languages=[languages]) # 下载音频文件
srt_formatted = DownLoadUtil.formatter.format_transcript( # DownLoadUtil.downLoadMP3(videoId)
videoSrt) # DownloadService.updateInfoByVideoId(
storePath = "/mnt/srt_file/" + str(channel.channelTitle) + "/" + \ # videoId, downloadInfo.tryTime, 1, 1)
videoPublishTime + "-" + languages + "-" + videoId + ".srt" # else:
cpPath = "/mnt/tmp_srt_file/" + str(channel.channelTitle) + "/" + \ # Logger.info("VideoId:{}开始重试第{}次".format(
videoPublishTime + "-" + languages + "-" + videoId + ".srt" # videoId, downloadInfo.tryTime + 1))
if len(cpPath) > 120: # DownloadService.updateInfoByVideoId(
storePath = storePath[:-20] + ".srt" # videoId, downloadInfo.tryTime + 1, 0, 1)
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)

BIN
download/download.zip

Binary file not shown.

58
download/main_download.py

@ -4,6 +4,7 @@ import time
import Contant import Contant
from LoggerUtils import Logger, initLogger from LoggerUtils import Logger, initLogger
import Orm import Orm
from Orm import Video,DownloadInfo
from VideoService import VideoService from VideoService import VideoService
from ChannelService import ChannelService from ChannelService import ChannelService
from DownloadInfoService import DownloadService from DownloadInfoService import DownloadService
@ -22,8 +23,61 @@ if __name__ == "__main__":
Contant.logDir = args.logDir Contant.logDir = args.logDir
initLogger() initLogger()
Orm.ormInit() 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() # list = DownloadService.findNotFinishList()
# Logger.info("list size:{}".format(len(list))) # Logger.info("list size:{}".format(len(list)))
# while (len(list) > 0): # while (len(list) > 0):

14
src/Orm.py

@ -21,6 +21,7 @@ def ormInit():
DownloadInfo.create_table() DownloadInfo.create_table()
SrtFile.create_table() SrtFile.create_table()
KeyWord.create_table() KeyWord.create_table()
WordResutlSet.create_table()
class BaseModel(Model): class BaseModel(Model):
@ -86,3 +87,16 @@ class KeyWord(BaseModel):
id = PrimaryKeyField() id = PrimaryKeyField()
region = CharField() 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("SqlLite存放地址:"+Contant.db)
Logger.info("日志文件存放地址:"+Contant.logDir) Logger.info("日志文件存放地址:"+Contant.logDir)
Logger.info("开始初始化...") Logger.info("开始初始化...")
df = pd.read_csv(csvFile, encoding="utf-8") # df = pd.read_csv(csvFile, encoding="utf-8")
length = df.shape[0] # length = df.shape[0]
for i in range(0, length): # 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]["lname"]).strip())
KeyWordService.createOne(df.iloc[i]["market"], str(df.iloc[i]["sname"]).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 Contant
import LoggerUtils import LoggerUtils
import Orm import Orm
from Orm import Video
from VideoService import VideoService from VideoService import VideoService
from YouTubeUtils import YouTubeUtil from YouTubeUtils import YouTubeUtil
from ChannelService import ChannelService from ChannelService import ChannelService
@ -23,27 +24,64 @@ if __name__ == "__main__":
Contant.endTime = args.end Contant.endTime = args.end
LoggerUtils.initLogger() LoggerUtils.initLogger()
Orm.ormInit() Orm.ormInit()
LoggerUtils.Logger.info("db:{},logDir:{}".format(Contant.db, Contant.logDir)) LoggerUtils.Logger.info(
LoggerUtils.Logger.info("starTime:{},endTime:{}".format(Contant.startTime, Contant.endTime)) "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() # channelList = ChannelService.getChannelList()
LoggerUtils.Logger.info("list size:{}".format(len(channelList))) # LoggerUtils.Logger.info("list size:{}".format(len(channelList)))
for channel in channelList: # for channel in channelList:
channelId = channel.channelId # channelId = channel.channelId
LoggerUtils.Logger.info( # LoggerUtils.Logger.info(
"channelId:{},startTime:{},endTime:{}".format( # "channelId:{},startTime:{},endTime:{}".format(
channelId, Contant.startTime, Contant.endTime # channelId, Contant.startTime, Contant.endTime
) # )
) # )
YouTubeUtil.getByChannelId(channelId, Contant.startTime, Contant.endTime) # YouTubeUtil.getByChannelId(channelId, Contant.startTime, Contant.endTime)
# 发送钉钉消息 # # 发送钉钉消息
webhook = "https://oapi.dingtalk.com/robot/send?access_token=c8c8d7d42c4eecd449dd303025ef968f647d1d8e8694e3fabc0ab5770d646dcb" # webhook = "https://oapi.dingtalk.com/robot/send?access_token=c8c8d7d42c4eecd449dd303025ef968f647d1d8e8694e3fabc0ab5770d646dcb"
jsonData = { # jsonData = {
"msgtype": "text", # "msgtype": "text",
"text": { # "text": {
"content": "[Youtube]src finished" # "content": "[Youtube]src finished"
} # }
} # }
requests.post(webhook, json=jsonData) # requests.post(webhook, json=jsonData)
LoggerUtils.Logger.info("src发送钉钉消息成功...") # 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