mirror of https://gitlab.com/mayx/mayx.gitlab.io
51 lines
3.9 KiB
Markdown
51 lines
3.9 KiB
Markdown
---
|
||
layout: post
|
||
title: 使用CF Workers Cron触发器进行签到
|
||
tags: [Javascript, Cloudflare, cron, workers]
|
||
---
|
||
|
||
Github Actions(×),Cloudflare Workers(√)<!--more-->
|
||
|
||
# 起因
|
||
前几天,我的[云·原神签到脚本](https://github.com/Mabbs/MHYY-AutoCheckin)被Github Ban掉了,其实我非常能理解这种情况,实际上用Actions做签到确实太重了。毕竟启动一个Actions需要的资源还算比较多,相当于开一个Docker容器,然而实际上做的事情却是很简单的请求一个接口罢了。而专业的全自动签到者有更专业的选择,比如[QianDao](https://github.com/qiandao-today/qiandao),可以挂很多签到脚本,而且操作非常简单,只是需要服务器……而我为了能保证优质的签到水平,用这种东西显然还是不够稳当,服务器还会到期呢,所以像这种简单的事情我觉得还是应该用Cloudflare Workers来做更好。
|
||
|
||
# 使用Cloudflare Workers Cron触发器
|
||
其实有一说一,我的Javascript并不怎么样,不过至少文档我还是能看懂的,Workers进行网络请求不需要用XHR这样奇怪的东西,我感觉它应该是基于Node.js的,看了一眼是用fetch函数去进行网络请求的 ~~(……又不是没用过,以前不还拿[Workers写反代](/2021/03/02/workers.html)嘛……)~~ 另外又看了看Cron触发器的文档,然后根据之前那个Python版,因为懒得分析哪些请求有用没用了,反正就三个都弄上吧……最终总算是知道怎么写了。于是代码如下:
|
||
```javascript
|
||
addEventListener('scheduled', event => {
|
||
event.waitUntil(
|
||
handleSchedule(event.scheduledTime)
|
||
)
|
||
})
|
||
|
||
async function handleSchedule(scheduledDate) {
|
||
const init = {
|
||
headers: {
|
||
'x-rpc-combo_token': '填入Token',
|
||
'x-rpc-client_type': '2',
|
||
'x-rpc-app_version': '3.4.0',
|
||
'x-rpc-sys_version': '11',
|
||
'x-rpc-channel': 'mihoyo',
|
||
'x-rpc-device_id': '填入设备ID',
|
||
'x-rpc-device_name': '填入手机名称',
|
||
'x-rpc-device_model': '填入手机型号',
|
||
'x-rpc-app_id': '1953439974',
|
||
'Referer': 'https://app.mihoyo.com',
|
||
'Host': 'api-cloudgame.mihoyo.com',
|
||
'Connection': 'Keep-Alive',
|
||
'Accept-Encoding': 'gzip',
|
||
'User-Agent': 'okhttp/4.9.0'
|
||
},
|
||
};
|
||
console.log(scheduledDate);
|
||
console.log(await fetch("https://api-cloudgame.mihoyo.com/hk4e_cg_cn/wallet/wallet/get", init));
|
||
console.log(await fetch("https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/getAnnouncementInfo", init));
|
||
console.log(await fetch("https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/listNotifications?status=NotificationStatusUnread&type=NotificationTypePopup&is_sort=true", init));
|
||
}
|
||
```
|
||
至于怎么获取Token之类的参数,用HttpCanary之类的抓包就好了,不过要先启动云·原神之后再抓包,不然程序貌似会检验SSL证书是不是合法的,然后就退出登录了……抓到之后随便点开一个请求里面就有上面的值了,根据情况填到上面就行了。
|
||
还有Workers的配置就很简单了,把代码粘到Workers里面之后在触发器里面的“Cron 触发器”中设定时间就行了,一般就一天一次,反正它能自动生成Cron表达式,也不用自己写,要不写“0 0 * * *”也行,然后就什么都不用做了。
|
||
|
||
# 感想
|
||
写完这个签到脚本之后,我觉得应该鼓励大家都去使用Workers这种方法去进行签到,Cloudflare可不会因为这种东西去Ban你的东西,至于Actions应该更多用于更需要计算资源的事情,比如编译代码啊,或者生成静态HTML还是日报之类的,签到啥的确实是太浪费了(而且还会Ban)。
|
||
还有就是云函数啥的……不过那个貌似本质来说还是Docker,它运行时是一个完整的环境,不像Workers那样应该是运行在一个更加轻量的沙箱里的,也许还更环保呢XD。 |