本系列教程计划将实现JunzhouLiu/BILIBILI-HELPER-PRE项目的大部分功能,通过这以整个项目来展示脚本猫的开发流程和特性,期间脚本猫还计划添加一些新的功能。
本节课来说bilibili的每日签到,在此之前已经有一个脚本了:bilibili自动签到,本节就详细说明这个脚本是怎么制作出来的。
签到
首先我们先确定签到的地方,有两个,一个是主站每天登录就能领取1个硬币和5点经验。
另外一个地方是直播,需要自己点击签到。
原理
原理很简单,简单来说就是模拟浏览器操作,往服务器发送接口请求,告诉服务器我们来签到了,请求签到的接口即可。我们需要通过抓包技术去找到这个接口,在浏览器上很简单,如果是APP的话,涉及到其它复杂的技术,以后再说。
在浏览器上,我们使用开发者工具(f12),切换到Network即可,我这里是Edge,显示的网络。
本系列教程使用到的接口也可从这个项目中去获取:SocialSisterYi/bilibili-API-collect
接口
接口抓包流程我在视频教程中录制
两个接口:https://api.bilibili.com/x/web-interface/nav 每日签到(其实就是获取用户信息的,每天第一次调用,能够自动签到)
https://api.live.bilibili.com/sign/doSign (直播签到)
代码
签到一般是一天签到一次,所以我们可以在脚本中定义如下cron表达式
//@crontab * 1-23 once * *
表示在每天的1-23小时检测运行一次,为什么是1-23呢?主要考虑到万一本地时间与服务器时间相差了几秒,在0点0分0秒签到的话可能会签到失败
接口调用我们直接使用:GM_xmlhttpRequest
做GET请求即可,使用方法与油猴的GM_xmlhttpRequest
一样,具体的使用方法可以去看:
[油猴脚本开发指南]脚本ajax的跨域请求
https://bbs.tampermonkey.net.cn/thread-136-1-1.html
另外我们需要脚本猫对脚本进行管理,可以监控运行中状态,我们需要用到Promise,像官方文档中说的一样,当签到成功,我们可以直接使用resolve()
返回成功,因为某些原因失败,使用reject()
返回失败和失败的原因
return new Promise((resolve, reject) => {
if (Math.round((Math.random() * 10) % 2)) {
resolve("ok");// 执行成功
} else {
reject("error");// 执行失败,并返回错误原因
}
});
最后的代码可以直接看:bilibili自动签到 这个脚本