前言
雲函數運行會莫名其妙的報錯(我也不知道為什么,我這邊測試有時候報錯,有時候不會),並非代碼有錯,建議在本地運行。
由於之前寫的代碼有些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()
雲函數使用