LoveLulu

一个哔哩哔哩直播间自动签到的小函数模块

起因

作为蓝蓝的真粉,陆陆的牌子那可是势在必得啊,但是随着等级的上涨,积分间隔也越来越大,而蓝蓝又是一个三月一视频,视频看仨月的大鸽子,没办法只能从直播间留言下手了,众所周知直播间每日首条留言都是+100 好感度的,这比投币收藏加的都多我岂能不心动?奈何记性不好不能天天去搞,所以,这个小东西就诞生了

实现

先放源码

import requests
import time
import random

send_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 requests
import time
import random

def 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