Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
BiliDriveEx
提交
e8368f66
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 搜索 >>
提交
e8368f66
编写于
3月 06, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化 cookie 机制
上级
f0fda014
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
23 addition
and
19 deletion
+23
-19
BiliDriveEx/__main__.py
BiliDriveEx/__main__.py
+1
-1
BiliDriveEx/bilibili.py
BiliDriveEx/bilibili.py
+22
-18
未找到文件。
BiliDriveEx/__main__.py
浏览文件 @
e8368f66
...
...
@@ -46,7 +46,7 @@ def login_handle(args):
if
api
.
login
(
username
=
args
.
username
,
password
=
args
.
password
):
api
.
get_user_info
()
with
open
(
os
.
path
.
join
(
bundle_dir
,
"cookies.json"
),
"w"
,
encoding
=
"utf-8"
)
as
f
:
f
.
write
(
json
.
dumps
(
bilibil
i
.
get_cookies
(),
ensure_ascii
=
False
,
indent
=
2
))
f
.
write
(
json
.
dumps
(
ap
i
.
get_cookies
(),
ensure_ascii
=
False
,
indent
=
2
))
def
upload_handle
(
args
):
def
core
(
index
,
block
):
...
...
BiliDriveEx/bilibili.py
浏览文件 @
e8368f66
...
...
@@ -18,11 +18,12 @@ class Bilibili:
default_url
=
lambda
self
,
sha1
:
f
"http://i0.hdslb.com/bfs/album/
{
sha1
}
.png"
meta_string
=
lambda
self
,
url
:
(
"bdex://"
+
re
.
findall
(
r
"[a-fA-F0-9]{40}"
,
url
)[
0
])
if
re
.
match
(
r
"^http(s?)://i0.hdslb.com/bfs/album/[a-fA-F0-9]{40}.png$"
,
url
)
else
url
get_cookies
=
lambda
self
:
self
.
_session
.
cookies
.
get_dict
(
domain
=
".bilibili.com"
)
get_uid
=
lambda
self
:
self
.
get_cookies
().
get
(
"DedeUserID"
,
""
)
def
__init__
(
self
):
self
.
_session
=
requests
.
Session
()
self
.
_session
.
headers
.
update
({
'User-Agent'
:
"Mozilla/5.0 BiliDroid/5.51.1 (bbcallen@gmail.com)"
})
self
.
get_cookies
=
lambda
:
self
.
_session
.
cookies
.
get_dict
(
domain
=
".bilibili.com"
)
self
.
get_uid
=
lambda
:
self
.
get_cookies
().
get
(
"DedeUserID"
,
""
)
self
.
username
=
""
self
.
password
=
""
self
.
info
=
{
...
...
@@ -62,29 +63,32 @@ class Bilibili:
sign_hash
.
update
(
f
"
{
param
}{
salt
}
"
.
encode
())
return
sign_hash
.
hexdigest
()
def
get_key
(
self
):
url
=
f
"https://passport.bilibili.com/api/oauth2/getKey"
payload
=
{
'appkey'
:
Bilibili
.
app_key
,
'sign'
:
self
.
calc_sign
(
f
"appkey=
{
Bilibili
.
app_key
}
"
),
}
while
True
:
res
=
request_retry
(
"post"
,
url
,
data
=
payload
).
json
()
if
res
and
res
[
'code'
]
==
0
:
return
{
'key_hash'
:
res
[
'data'
][
'hash'
],
'pub_key'
:
rsa
.
PublicKey
.
load_pkcs1_openssl_pem
(
res
[
'data'
][
'key'
].
encode
()),
}
else
:
time
.
sleep
(
1
)
# 登录
def
login
(
self
,
username
,
password
):
def
get_key
():
url
=
f
"https://passport.bilibili.com/api/oauth2/getKey"
payload
=
{
'appkey'
:
Bilibili
.
app_key
,
'sign'
:
self
.
calc_sign
(
f
"appkey=
{
Bilibili
.
app_key
}
"
),
}
while
True
:
response
=
self
.
_requests
(
"post"
,
url
,
data
=
payload
)
if
response
and
response
.
get
(
"code"
)
==
0
:
return
{
'key_hash'
:
response
[
'data'
][
'hash'
],
'pub_key'
:
rsa
.
PublicKey
.
load_pkcs1_openssl_pem
(
response
[
'data'
][
'key'
].
encode
()),
}
else
:
time
.
sleep
(
1
)
self
.
username
=
username
self
.
password
=
password
while
True
:
key
=
get_key
()
key
=
self
.
get_key
()
key_hash
,
pub_key
=
key
[
'key_hash'
],
key
[
'pub_key'
]
url
=
f
"https://passport.bilibili.com/api/v2/oauth2/login"
param
=
f
"appkey=
{
Bilibili
.
app_key
}
&password=
{
parse
.
quote_plus
(
base64
.
b64encode
(
rsa
.
encrypt
(
f
'
{
key_hash
}{
self
.
password
}
'.encode(), pub_key)))
}
&username=
{
parse
.
quote_plus
(
self
.
username
)
}
"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录