Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
BiliDriveEx
提交
63879254
B
BiliDriveEx
项目概览
OpenDocCN
/
BiliDriveEx
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
BiliDriveEx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
63879254
编写于
11月 03, 2019
作者:
H
Hsury
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复线程回收无效的问题
上级
5399f695
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
19 addition
and
12 deletion
+19
-12
README.md
README.md
+1
-1
drive.py
drive.py
+18
-11
未找到文件。
README.md
浏览文件 @
63879254
...
...
@@ -5,7 +5,7 @@
<h1
align=
"center"
>
- BiliDrive -
</h1>
<p
align=
"center"
>
<img
src=
"https://img.shields.io/badge/version-2019.11.
2
-green.svg?longCache=true&style=for-the-badge"
>
<img
src=
"https://img.shields.io/badge/version-2019.11.
3
-green.svg?longCache=true&style=for-the-badge"
>
<img
src=
"https://img.shields.io/badge/license-SATA-blue.svg?longCache=true&style=for-the-badge"
>
</p>
...
...
drive.py
浏览文件 @
63879254
...
...
@@ -77,7 +77,7 @@ def image_upload(data, cookies):
'category'
:
"daily"
,
}
try
:
response
=
requests
.
post
(
url
,
headers
=
headers
,
cookies
=
cookies
,
files
=
files
,
timeout
=
5
).
json
()
response
=
requests
.
post
(
url
,
headers
=
headers
,
cookies
=
cookies
,
files
=
files
,
timeout
=
10
).
json
()
except
:
response
=
None
return
response
...
...
@@ -90,7 +90,7 @@ def image_download(url):
content
=
[]
last_chunk_time
=
None
try
:
for
chunk
in
requests
.
get
(
url
,
headers
=
headers
,
timeout
=
5
,
stream
=
True
).
iter_content
(
64
*
1024
):
for
chunk
in
requests
.
get
(
url
,
headers
=
headers
,
timeout
=
10
,
stream
=
True
).
iter_content
(
64
*
1024
):
if
last_chunk_time
is
not
None
and
time
.
time
()
-
last_chunk_time
>
5
:
return
None
content
.
append
(
chunk
)
...
...
@@ -165,10 +165,11 @@ def upload_handle(args):
'size'
:
len
(
block
),
'sha1'
:
block_sha1
,
}
done_flag
.
release
()
else
:
# log(f"分块{index} ({len(block) / 1024 / 1024:.2f} MB) 开始上传")
for
_
in
range
(
10
):
if
terminate_flag
.
is_set
():
return
response
=
image_upload
(
full_block
,
cookies
)
if
response
:
if
response
[
'code'
]
==
0
:
...
...
@@ -179,18 +180,19 @@ def upload_handle(args):
'size'
:
len
(
block
),
'sha1'
:
block_sha1
,
}
done_flag
.
release
()
break
return
elif
response
[
'code'
]
==
-
4
:
terminate_flag
.
set
()
log
(
f
"分块
{
index
}
(
{
len
(
block
)
/
1024
/
1024
:.
2
f
}
MB) 第
{
_
+
1
}
次上传失败, 请重新登录"
)
break
return
log
(
f
"分块
{
index
}
(
{
len
(
block
)
/
1024
/
1024
:.
2
f
}
MB) 第
{
_
+
1
}
次上传失败"
)
else
:
terminate_flag
.
set
()
except
:
terminate_flag
.
set
()
traceback
.
print_exc
()
finally
:
done_flag
.
release
()
def
skippable
(
sha1
):
url
=
default_url
(
sha1
)
...
...
@@ -198,9 +200,9 @@ def upload_handle(args):
'Referer'
:
"http://t.bilibili.com/"
,
'User-Agent'
:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"
,
}
for
_
in
range
(
3
):
for
_
in
range
(
5
):
try
:
response
=
requests
.
head
(
url
,
headers
=
headers
,
timeout
=
5
)
response
=
requests
.
head
(
url
,
headers
=
headers
,
timeout
=
10
)
return
url
if
response
.
status_code
==
200
else
None
except
:
pass
...
...
@@ -245,6 +247,7 @@ def upload_handle(args):
thread_pool
[
-
1
].
start
()
else
:
log
(
"已终止上传, 等待线程回收"
)
break
for
thread
in
thread_pool
:
thread
.
join
()
if
terminate_flag
.
is_set
():
...
...
@@ -277,6 +280,8 @@ def download_handle(args):
try
:
# log(f"分块{index} ({block_dict['size'] / 1024 / 1024:.2f} MB) 开始下载")
for
_
in
range
(
10
):
if
terminate_flag
.
is_set
():
return
block
=
image_download
(
block_dict
[
'url'
])
if
block
:
block
=
block
[
62
:]
...
...
@@ -286,8 +291,7 @@ def download_handle(args):
f
.
write
(
block
)
file_lock
.
release
()
log
(
f
"分块
{
index
}
(
{
block_dict
[
'size'
]
/
1024
/
1024
:.
2
f
}
MB) 下载完毕"
)
done_flag
.
release
()
break
return
else
:
log
(
f
"分块
{
index
}
(
{
block_dict
[
'size'
]
/
1024
/
1024
:.
2
f
}
MB) 校验未通过"
)
else
:
...
...
@@ -297,6 +301,8 @@ def download_handle(args):
except
:
terminate_flag
.
set
()
traceback
.
print_exc
()
finally
:
done_flag
.
release
()
def
block_offset
(
index
):
return
sum
(
meta_dict
[
'block'
][
i
][
'size'
]
for
i
in
range
(
index
))
...
...
@@ -349,6 +355,7 @@ def download_handle(args):
thread_pool
[
-
1
].
start
()
else
:
log
(
"已终止下载, 等待线程回收"
)
break
for
thread
in
thread_pool
:
thread
.
join
()
if
terminate_flag
.
is_set
():
...
...
@@ -365,7 +372,7 @@ def download_handle(args):
if
__name__
==
"__main__"
:
signal
.
signal
(
signal
.
SIGINT
,
lambda
signum
,
frame
:
os
.
kill
(
os
.
getpid
(),
9
))
parser
=
argparse
.
ArgumentParser
(
description
=
"BiliDrive"
,
epilog
=
"By Hsury, 2019/11/
2
"
)
parser
=
argparse
.
ArgumentParser
(
description
=
"BiliDrive"
,
epilog
=
"By Hsury, 2019/11/
3
"
)
subparsers
=
parser
.
add_subparsers
()
history_parser
=
subparsers
.
add_parser
(
"history"
,
help
=
"view upload history"
)
history_parser
.
set_defaults
(
func
=
history_handle
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录