LoveLulu 一个哔哩哔哩直播间自动签到的小函数模块
起因 作为蓝蓝 的真粉,陆陆的牌子那可是势在必得啊,但是随着等级的上涨,积分间隔也越来越大,而蓝蓝又是一个三月一视频,视频看仨月的大鸽子,没办法只能从直播间留言下手了,众所周知直播间每日首条留言都是+100 好感度的,这比投币收藏加的都多我岂能不心动?奈何记性不好不能天天去搞,所以,这个小东西就诞生了
实现 先放源码
import requestsimport timeimport randomsend_msg = time.strftime("%m月%d日 今日签到" , time.localtime()) ti = int (time.time()) url = "https://api.live.bilibili.com/msg/send" data = { "color" : "5566168" , "fontsize" : "25" , "mode" : "1" , "msg" : send_msg, "rnd" : "{}" .format (ti), "roomid" : "1479861" , "bubble" : "0" , "csrf_token" : "复制自己的" , "csrf" : "复制自己的" } cookie = "还是复制自己的" headers = { "cookie" : cookie, "origin" : "https://live.bilibili.com" , "referer" : "https://live.bilibili.com/blanc/1479861?liteVersion=true" , "user-agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36" , } response = requests.post(url=url, data=data, headers=headers)
用 F12 搞到了直播弹幕的 POST 字符串 data 的基本格式和数据类型,照着葫芦画瓢画出来一个小东西,值得注意的是多了一个时间戳,让我寻思了半天这个东西是啥 23333,然后再照着头文件照抄一份 headers 出来,再用 resquests post 出去就好了!
Windows 定期执行 既然有了这个小东西,还得让他定期执行起来才行啊,这里用的是一台 WindowsServer 的服务器,直接使用“任务计划程序”——新建任务——新建定时任务——每天十点使用 Python 执行这个文件就 OK 了,也懒得写是否执行成功发送信息什么的嘻嘻嘻,不成功就再说啦,可以参考这一篇
后记 Windows 的定时运行果然不靠谱,根本就不会运行 23333,再说定时容易被 B 站查封,还是写一个死循环来伪随机时间刻好了,代码逻辑如下
import requestsimport timeimport randomdef DataPost (): send_msg = time.strftime("%m月%d日%H时%M分 签到" , time.localtime()) ti = int (time.time()) url = "https://api.live.bilibili.com/msg/send" data = { "color" : "5566168" , "fontsize" : "25" , "mode" : "1" , "msg" : send_msg, "rnd" : "{}" .format (ti), "roomid" : "1479861" , "bubble" : "0" , "csrf_token" : "***" , "csrf" : "***" } cookie = "***" headers = { "cookie" : cookie, "origin" : "https://live.bilibili.com" , "referer" : "https://live.bilibili.com/blanc/1479861?liteVersion=true" , "user-agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36" , } response = requests.post(url=url, data=data, headers=headers) while True : ls = random.randint(1 ,10 ) if ls == 5 : DataPost() print (time.strftime("%m月%d日%H时%M分已执行" , time.localtime())) time.sleep(43200 ) else : t = ls * 600 time.sleep(t)
在GitHub 上开源 233333