From 366147721b80a66c63ec673ea845b5279b70b1bc Mon Sep 17 00:00:00 2001
From: Hsury
Date: Thu, 30 Aug 2018 14:00:39 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E8=A7=82=E7=9C=8B=E7=BB=84?=
=?UTF-8?q?=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 6 ++---
bilibili.py | 72 +++++++++++++++++++++++++++++++++++----------------
bilibili.toml | 4 +--
3 files changed, 54 insertions(+), 28 deletions(-)
diff --git a/README.md b/README.md
index 57e6227..86aacd3 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
Bilibili-Toolkit
-
+
@@ -19,7 +19,7 @@
|query |2018/8/28 |获取用户信息 |
|setPrivacy |2018/7/24 |修改隐私设置 |
|silver2Coins |2018/8/8 |银瓜子兑换硬币 |
-|watch |2018/6/20 |观看 |
+|watch |2018/8/30 |观看 |
|like |2018/7/8 |好评 |
|reward |2018/6/20 |投币 |
|favour |2018/6/20 |收藏 |
@@ -35,7 +35,7 @@
|mallLottery |2018/6/23 |会员购周年庆活动抽奖 |
|mallPrize |2018/6/23 |会员购周年庆活动中奖查询 |
|mi6XLottery |2018/6/30 |小米6X抢F码活动抽奖 |
-|liveTool |2018/8/25 |直播助手 |
+|liveTool |2018/8/30 |直播助手 |
*注:liveTool直播助手组件编译自[yjqiang/bili2.0](https://github.com/yjqiang/bili2.0)*
diff --git a/bilibili.py b/bilibili.py
index f5d724e..18dabc9 100644
--- a/bilibili.py
+++ b/bilibili.py
@@ -29,6 +29,7 @@ def __init__(self, https=True):
self.cookie = ""
self.csrf = ""
self.uid = ""
+ self.sid = ""
self.accessToken = ""
self.refreshToken = ""
self.username = ""
@@ -48,7 +49,7 @@ def __init__(self, https=True):
def log(self, message):
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))}][{self.uid}] {message}", flush=True)
- def get(self, url, headers=None, decodeLevel=2, timeout=10, retry=5):
+ def get(self, url, headers=None, decodeLevel=2, timeout=15, retry=10):
for i in range(retry + 1):
try:
response = requests.get(url, headers=headers, timeout=timeout, proxies=self.proxy)
@@ -58,7 +59,7 @@ def get(self, url, headers=None, decodeLevel=2, timeout=10, retry=5):
self.setProxy()
return None
- def post(self, url, data=None, headers=None, decodeLevel=2, timeout=10, retry=5):
+ def post(self, url, data=None, headers=None, decodeLevel=2, timeout=15, retry=10):
for i in range(retry + 1):
try:
response = requests.post(url, data=data, headers=headers, timeout=timeout, proxies=self.proxy)
@@ -92,6 +93,8 @@ def importCredential(self, pairs):
self.csrf = value
elif key == "DedeUserID":
self.uid = value
+ elif key == "sid":
+ self.sid = value
self.cookie = f"{self.cookie}{key}={value};"
elif key == "accessToken":
self.accessToken = value
@@ -104,7 +107,7 @@ def importCredential(self, pairs):
# 登录
def login(self):
- def useCookie():
+ def byCookie():
url = f"{self.protocol}://api.bilibili.com/x/space/myinfo"
headers = {'Cookie': self.cookie,
'Host': "api.bilibili.com",
@@ -118,7 +121,7 @@ def useCookie():
self.log("Cookie已失效")
return False
- def useToken():
+ def byToken():
param = f"access_key={self.accessToken}&appkey={Bilibili.appKey}&ts={int(time.time())}"
url = f"{self.protocol}://passport.bilibili.com/api/v2/oauth2/info?{param}&sign={self.getSign(param)}"
response = self.get(url)
@@ -143,9 +146,10 @@ def useToken():
self.cookie = "".join(f"{i['name']}={i['value']};" for i in response['data']['cookie_info']['cookies'])
self.csrf = response['data']['cookie_info']['cookies'][0]['value']
self.uid = response['data']['cookie_info']['cookies'][1]['value']
+ self.sid = response['data']['cookie_info']['cookies'][3]['value']
self.accessToken = response['data']['token_info']['access_token']
self.refreshToken = response['data']['token_info']['refresh_token']
- self.log(f"Token刷新成功, 有效期至{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time() + int(response['data']['expires_in'])))}")
+ self.log(f"Token刷新成功, 有效期至{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time() + int(response['data']['token_info']['expires_in'])))}")
return True
else:
self.accessToken = ""
@@ -153,7 +157,7 @@ def useToken():
self.log("Token刷新失败")
return False
- def usePassword():
+ def byPassword():
url = f"{self.protocol}://passport.bilibili.com/api/oauth2/getKey"
data = {'appkey': Bilibili.appKey,
'sign': self.getSign(f"appkey={Bilibili.appKey}")}
@@ -202,6 +206,7 @@ def usePassword():
self.cookie = "".join(f"{i['name']}={i['value']};" for i in response['data']['cookie_info']['cookies'])
self.csrf = response['data']['cookie_info']['cookies'][0]['value']
self.uid = response['data']['cookie_info']['cookies'][1]['value']
+ self.sid = response['data']['cookie_info']['cookies'][3]['value']
self.accessToken = response['data']['token_info']['access_token']
self.refreshToken = response['data']['token_info']['refresh_token']
self.log(f"{self.username}登录成功")
@@ -216,11 +221,11 @@ def usePassword():
else:
time.sleep(30)
- if self.cookie and useCookie():
+ if self.cookie and byCookie():
return True
- elif self.accessToken and self.refreshToken and useToken():
+ elif self.accessToken and self.refreshToken and byToken():
return True
- elif self.username and self.password and usePassword():
+ elif self.username and self.password and byPassword():
return True
else:
return False
@@ -331,31 +336,52 @@ def watch(self, aid):
response = self.get(url)
if response:
cid = response['data']['cid']
+ duration = response['data']['duration']
else:
self.log(f"av{aid}信息解析失败")
return False
- url = f"{self.protocol}://api.bilibili.com/x/report/web/heartbeat"
+ url = f"{self.protocol}://api.bilibili.com/x/report/click/h5"
data = {'aid': aid,
'cid': cid,
+ 'part': 1,
+ 'did': self.sid,
+ 'ftime': int(time.time()),
+ 'jsonp': "jsonp",
+ 'lv': None,
'mid': self.uid,
'csrf': self.csrf,
- 'played_time': 0,
- 'realtime': 0,
- 'start_ts': int(time.time()),
- 'type': 3,
- 'dt': 2,
- 'play_type': 1}
+ 'stime': int(time.time())}
headers = {'Cookie': self.cookie,
'Host': "api.bilibili.com",
+ 'Origin': "https://www.bilibili.com",
'Referer': f"https://www.bilibili.com/video/av{aid}",
'User-Agent': Bilibili.ua}
response = self.post(url, data=data, headers=headers)
- if response and response['code'] == 0 or response is None:
- self.log(f"av{aid}观看成功")
- return True
- else:
- self.log(f"av{aid}观看失败 {response}")
- return False
+ if response and response.get("code") == 0:
+ url = f"{self.protocol}://api.bilibili.com/x/report/web/heartbeat"
+ data = {'aid': aid,
+ 'cid': cid,
+ 'jsonp': "jsonp",
+ 'mid': self.uid,
+ 'csrf': self.csrf,
+ 'played_time': 0,
+ 'pause': False,
+ 'realtime': duration,
+ 'dt': 7,
+ 'play_type': 1,
+ 'start_ts': int(time.time())}
+ response = self.post(url, data=data, headers=headers)
+ if response and response.get("code") == 0:
+ time.sleep(5)
+ data['played_time'] = duration - 1
+ data['play_type'] = 0
+ data['start_ts'] = int(time.time())
+ response = self.post(url, data=data, headers=headers)
+ if response and response.get("code") == 0:
+ self.log(f"av{aid}观看成功")
+ return True
+ self.log(f"av{aid}观看失败 {response}")
+ return False
# 好评
def like(self, aid):
@@ -1059,7 +1085,7 @@ def main():
LiveToolCurrentCommit = f.read()
except:
LiveToolCurrentCommit = None
- liveToolLatestCommit = LiveToolCurrentCommit if LiveToolCurrentCommit else "77c4c85"
+ liveToolLatestCommit = LiveToolCurrentCommit if LiveToolCurrentCommit else "058fac1"
if config['liveTool']['autoUpdate']:
try:
liveToolLatestCommit = requests.get("https://api.github.com/repos/Hsury/Bilibili-Live-Tool/releases/latest").json()['tag_name']
diff --git a/bilibili.toml b/bilibili.toml
index e3393f4..19a085c 100644
--- a/bilibili.toml
+++ b/bilibili.toml
@@ -14,7 +14,7 @@ account = """
[proxy]
enable = true # 开关
https = true # 使用HTTPS协议
-pool = ["140.143.96.216:80", "118.24.61.22:3128", "113.200.56.13:8010", "221.7.255.168:8080", "223.93.172.248:3128", "221.7.255.168:80", "125.62.26.197:3128", "39.135.35.19:80", "39.106.160.36:3128", "119.63.99.205:3128", "39.135.35.18:80", "118.31.223.194:3128", "218.60.8.99:3129", "47.94.241.237:3128", "202.116.64.201:80","116.62.194.248:3128", "58.49.72.141:8888", "183.62.196.10:3128", "120.78.215.151:808", "218.207.212.86:80", "114.215.95.188:3128", "52.230.0.119:3128", "39.135.35.16:80", "218.66.253.146:8800", "35.185.179.37:3128", "154.8.182.226:3128", "119.196.18.50:8080", "112.126.65.236:80", "119.27.177.169:80", "221.219.147.182:3128", "121.152.17.96:3128", "101.37.27.173:3128", "185.22.174.69:10010", "119.36.221.13:8888", "185.22.174.69:1448", "118.27.29.54:3128", "159.138.21.53:3128", "94.242.58.108:10010", "173.212.192.72:3128", "159.89.22.167:8080", "178.128.46.132:8080", "194.67.201.106:3128", "94.242.58.14:10010", "111.47.192.141:8888","178.128.37.162:8080", "178.128.208.145:8080", "113.57.178.141:8888", "209.97.167.247:8080", "206.189.144.21:8080", "178.62.51.192:8080", "178.128.47.113:8080", "207.154.208.76:8080", "178.128.39.212:8080", "188.165.164.9:3128", "109.205.201.3:3128", "103.15.51.160:8080", "178.128.91.23:8080", "121.156.109.92:8080", "95.87.255.120:8080", "203.86.26.9:3128", "167.99.197.73:8080", "94.242.58.108:1448", "185.22.174.65:1448", "5.196.224.39:8080", "46.101.188.94:8080", "178.128.87.158:8080", "91.185.191.163:3128", "95.87.220.19:15600", "217.182.103.42:3128","94.242.58.142:10010", "43.239.178.90:8888", "94.242.57.136:10010", "91.121.208.196:3128", "185.216.35.170:3128", "159.89.118.85:8080", "185.22.174.65:10010", "203.150.192.86:46200", "159.89.126.130:8080", "206.81.13.127:8080", "178.128.247.187:8080", "188.120.238.38:5555", "217.182.119.131:3128", "51.15.229.200:3128", "157.65.28.91:3128", "64.33.247.157:3128", "112.140.186.70:8118", "91.121.108.164:3128", "5.189.162.175:3128", "167.99.156.71:8080", "178.176.28.164:8080", "188.166.69.172:8080", "188.166.43.167:8080", "142.93.199.214:8080", "101.37.79.125:3128", "199.119.1.133:80", "122.50.6.226:8080", "94.242.57.136:1448", "178.128.87.55:8080", "64.33.247.157:8080", "5.135.164.72:3128"] # 代理池
+pool = ["118.24.61.22:3128", "140.143.96.216:80", "221.7.255.168:8080", "183.220.43.89:8080", "221.7.255.168:80", "47.94.241.237:3128", "119.27.177.169:80", "39.135.35.19:80", "125.62.26.197:3128", "39.135.35.18:80", "113.200.56.13:8010", "223.93.172.248:3128", "218.60.8.83:3129", "218.60.8.98:3129", "223.167.8.211:3128", "47.96.239.158:3128", "116.62.194.248:3128", "118.31.223.194:3128", "218.60.58.66:80", "183.62.196.10:3128", "114.215.95.188:3128", "52.230.0.119:3128", "35.185.179.37:3128", "218.207.212.86:80", "120.78.215.151:808", "47.93.18.195:80", "39.135.35.16:80", "221.229.18.220:3128", "203.174.90.201:8080", "118.24.121.231:3128", "111.248.194.64:8080", "154.8.182.226:3128", "112.95.89.38:53281", "112.126.65.236:80", "39.104.175.142:3128", "13.228.173.226:8080", "94.242.58.108:10010", "35.185.201.225:8080", "185.22.174.69:10010", "118.27.29.54:3128", "94.242.58.142:1448", "94.242.57.136:1448", "94.242.57.136:10010", "37.17.229.158:3128", "88.191.33.53:3128", "103.246.2.244:8080", "207.154.208.76:8080", "119.196.18.50:8080", "46.101.188.94:8080", "221.219.147.182:3128", "185.22.174.69:1448", "157.65.28.91:3128", "94.242.58.14:10010", "173.212.192.72:3128", "159.89.22.167:8080", "112.140.186.70:8118", "94.242.55.108:10010", "206.189.84.37:8000", "37.46.71.202:3128", "74.82.50.155:3128", "178.128.104.237:8080", "178.128.93.209:8080", "178.128.83.149:8080", "183.2.212.2:3128", "178.128.111.250:8080", "178.128.83.145:8080", "178.128.87.244:8080", "183.151.41.104:3128", "178.128.208.145:8080", "178.128.83.197:8080", "47.91.225.36:3128", "209.97.164.154:8080", "185.216.35.170:3128", "178.128.83.193:8080", "178.128.104.169:8080", "203.154.82.167:8080", "95.87.255.120:8080", "178.128.60.172:8080", "178.128.91.238:8080", "157.65.25.141:3129", "178.128.247.187:8080", "159.89.118.85:8080", "159.203.45.186:8080", "188.166.43.167:8080", "206.81.13.127:8080", "159.89.126.130:8080", "178.128.248.112:8080", "128.199.54.182:8080", "188.166.69.172:8080", "188.166.33.184:8080", "82.151.220.118:3128", "118.31.0.140:3128", "5.135.164.72:3128", "167.99.197.73:8080", "142.93.51.106:8080", "178.128.39.212:8080", "222.221.11.119:3128", "178.62.95.149:8080", "202.116.64.201:80", "142.93.199.216:8080"] # 代理池
# 获取用户信息
[query]
@@ -36,7 +36,7 @@ enable = true # 开关
# 观看
[watch]
-enable = false # 开关
+enable = true # 开关
aid = [29278585, 20032006, 14594803] # 稿件av号
# 好评