blog/_posts/2023-02-22-cron.md

51 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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。