前言
雲函數運行會莫名其妙的報錯(我也不知道為什么,我這邊測試有時候報錯,有時候不會),並非代碼有錯,建議在本地運行。
由於之前寫的代碼有些bug,后面又又又又又又又更新了。
最后更新於2022-1-18
功能
- 登錄簽到
- 視頻觀看
- 5次投幣(需消耗5個幣)
- 分享視頻(不會發在個人空間動態里)
以上每天經驗共65點經驗。
使用
1、瀏覽器登入嗶哩網站
2、訪問 http://api.bilibili.com/x/space/myinfo
3、F12看到cookie的值粘貼即可

代碼
# -*- coding: utf-8 -*-
# date:2021/12/13
import requests
import json
import time
import random
# 填寫cookie即可運行
'''
1、瀏覽器登入嗶哩網站
2、訪問 http://api.bilibili.com/x/space/myinfo
3、F12看到cookie的值粘貼即可
'''
cookies = ""
coin_operated = 0 # (投幣開關,0不投幣,1投幣)
# cookie轉字典
def extract_cookies(cookies):
global csrf
cookies = dict([l.split("=", 1) for l in cookies.split("; ")])
csrf = cookies['bili_jct']
return cookies
# 銀幣數
def getCoin():
cookie = extract_cookies(cookies)
url = "http://account.bilibili.com/site/getCoin"
r = requests.get(url, cookies=cookie).text
j = json.loads(r)
money = j['data']['money']
return int(money)
# 個人信息
def getInfo():
global uid
url = "http://api.bilibili.com/x/space/myinfo"
cookie = extract_cookies(cookies)
j = requests.get(url, cookies=cookie).json()
username = j['data']['name']
uid = j['data']['mid']
level = j['data']['level']
current_exp = j['data']['level_exp']['current_exp']
next_exp = j['data']['level_exp']['next_exp']
sub_exp = int(next_exp) - int(current_exp)
if coin_operated:
days = int(int(sub_exp) / 65)
else:
days = int(int(sub_exp) / 15)
coin = getCoin()
msg = f"歡迎 {username}! 當前等級:" + str(level) + " ,當前經驗:" + \
str(current_exp) + ",升級還差 " + str(sub_exp) + \
"經驗,還需" + str(days) + "天," + "當前硬幣數量:" + str(coin)
return current_exp, msg
# 推薦動態
def getActiveInfo():
url = "http://api.bilibili.com/x/web-interface/archive/related?aid=" + \
str(7)
cookie = extract_cookies(cookies)
r = requests.get(url, cookies=cookie).text
j = json.loads(r)
return j
# 推薦動態第二種方式
def getVideo():
random_page = random.randint(0, 167)
url = "http://api.bilibili.cn/recommend?page=" + str(random_page)
cookie = extract_cookies(cookies)
r = requests.get(url, cookies=cookie).text
j = json.loads(r)
return j
# 投幣 分享5次
def Task():
coin_num = getCoin()
coin_count = 0
for i in range(0, 10):
j = getVideo()
list_len = len(j['list'])
random_list = random.randint(1, list_len - 1)
bvid = j['list'][random_list]['bvid']
aid = j['list'][random_list]['aid']
print(str(i + 1) + ' ---- ' + str(bvid) + ' ---- ' + str(aid))
toview(bvid)
time.sleep(3)
shareVideo(bvid)
time.sleep(3)
if coin_operated:
while coin_count < min(coin_num, 5):
coin_code = tocoin(bvid)
if coin_code == 1:
coin_count += 1
break
elif coin_code == -99:
break
else:
pass
print('----------------------')
# 觀看視頻【不會點贊投幣】
def toview(bvid):
playedTime = random.randint(10, 100)
url = "https://api.bilibili.com/x/click-interface/web/heartbeat"
data = {
'bvid': bvid,
'played_time': playedTime,
'csrf': csrf
}
cookie = extract_cookies(cookies)
j = requests.post(url, data=data, cookies=cookie).json()
code = j['code']
if code == 0:
print('看視頻成功!')
else:
print('看視頻失敗!')
# 分享視頻
def shareVideo(bvid):
url = "https://api.bilibili.com/x/web-interface/share/add"
data = {
'bvid': bvid,
'csrf': csrf
}
cookie = extract_cookies(cookies)
# 需要請求頭
header = {
"Content-Type": "application/x-www-form-urlencoded",
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38",
}
r = requests.post(url, data=data, cookies=cookie, headers=header).text
j = json.loads(r)
code = j['code']
if code == 0:
print('分享成功!')
else:
print('分享失敗!')
# 投幣函數
def tocoin(bvid):
coinNum = getCoin()
if coinNum == 0:
print('太窮了,硬幣不夠!')
return -99
url = "http://api.bilibili.com/x/web-interface/coin/add"
data = {
'bvid': bvid,
'multiply': 1,
'select_like': 1,
'csrf': csrf
}
cookie = extract_cookies(cookies)
r = requests.post(url, data=data, cookies=cookie).text
j = json.loads(r)
code = j['code']
if code == 0:
print(str(bvid) + ' 投幣成功!')
return 1
else:
print(str(bvid) + ' 投幣失敗!')
return 0
# 開啟任務運行
def run():
exp1, msg = getInfo()
print(msg)
Task()
exp2, c = getInfo()
print(f'任務完成,獲得經驗{int(exp2) - int(exp1)}')
# 雲函數使用
def main_handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
print("Received context: " + str(context))
run()
return "------ end ------"
if __name__ == '__main__':
run()
雲函數使用







