欢迎 ⭐,添加更多平台欢迎 issue 或者 PR。
每天自动完成平台任务,完成以后会通过 telegram 机器人通知,如果失败则会直接通过 CircleCI 发送邮件通知。
- Nodeseek
- 自动签到
- V2EX
- 自动签到
- 一亩三分地
- 自动签到
- 自动答题
sequenceDiagram
participant User as User
participant CF as Cloudflare Worker<br/>(Scheduler)
participant CCI as CircleCI<br/>(CI/CD Pipeline)
participant SP as Platforms
participant TC as 2captcha
Note over User: Configure Github secrets only once
User-->>CF: Auto deploy cloudlflare workers
User-->>CCI: Auto sync the secrets to CircleCI
rect rgb(240, 248, 255)
Note over CF: Cron runs every day
CF->>+CCI: Trigger Webhook
Note over CCI: Start jobs
loop Loop platforms
CCI->>+SP: Send Request checkin/QA<br/>(with Cookie)
alt Request captcha
SP->>+TC: request 2captcha
TC->>-SP: bypass captcha
end
SP->>-CCI: Return Response
end
alt Request success
CCI->>+User: Send notification<br/>(TELEGRAM_BOT)
else Request fail
CCI->>+User: Send email<br/>(CircleCI)
end
CCI-->>-CF: Completed
Note over CF: Wait for next turn
end
Fork 本仓库到你自己的仓库,然后添加对应的配置项到仓库的 secrets 中(在 settings -> secrets and variables -> actions -> new repository secret
)。
注册 CircleCI
CircleCI 是一个优秀的 CI/CD 平台,Free plan 的 30,000 credits/mo, that’s up to 6,000 build mins
完全可以支撑起本项目的所有需求。
详细的注册教程请见 CloudCheckin Wiki。
Important
注意 trigger 的 CIRCLECI_WEBHOOK_URL
拼接完成后填写在 Github Actions 的 secrets 中。
在 CircleCI 页面申请 Token 即可,并且添加到仓库的 secrets 中,命名为 CIRCLECI_TOKEN
。
请在你创建的 Organization Settings 里找到 Organization ID,并且添加到仓库的 secrets 中,命名为 CIRCLECI_ORG_ID
。
- 登录 Cloudflare 账号,在
Profile
页面 创建Create Token
(建议Edit Cloudflare Workers
模板保持默认就好)。 - 将该 Token 添加到仓库的 secrets 中,命名为
CLOUDFLARE_API_TOKEN
。
可以自行修改 wrangler.toml
设置任务定时 cron 字段,注意执行时间固定为 UTC 时区,北京时间为 UTC+8 时区,请自行转换时差。
Line 6 in 0b71925
如果不需要某个平台,可以直接编辑删除
.circleci/config.yml
目录下该平台对应的项即可,例如无需一亩三分地,可以考虑删除 57-58 行。
- 按照 telegram bot 的说明创建一个 telegram 机器人并获取
token
- 将机器人添加为您的联系人并发送一条消息。然后访问 https://api.telegram.org/bot{TELEGRAM_TOKEN}/getUpdates 获取
chat id
(将{TELEGRAM_TOKEN}
替换为步骤1中获得的 token) - 将
token
和chat id
添加到仓库密钥中,分别命名为TELEGRAM_TOKEN
和TELEGRAM_CHAT_ID
配置 Nodeseek 签到
- 从 Nodeseek 网站获取
cookie
(获取方法请参考 COOKIE 获取教程) - 将
cookie
添加到仓库密钥中,命名为NODESEEK_COOKIE
配置 V2EX 签到
- 从 V2EX 网站获取
cookie
(获取方法请参考 COOKIE 获取教程) - 注意,由于 V2EX 的 cookie 包含
"
以及$
特殊字符,可能会导致 sh 中传递 secrets 失败,因此需要转义这两个特殊字符,简单替换脚本为echo '你的V2EX cookie' | sed 's/["$]/\\&/g'
。 - 将转义后的
cookie
添加到仓库密钥中,命名为V2EX_COOKIE
配置 一亩三分地 签到及答题
- 从 一亩三分地 网站获取
cookie
(获取方法请参考 COOKIE 获取教程) - 将
cookie
添加到仓库密钥中,命名为ONEPOINT3ACRES_COOKIE
- 从 2captcha 充值获取
api key
,(由于一亩三分地的签到以及答题需要通过 Cloudflare Turnstile 的验证,因此这里通过 2captcha 的 api 来解决验证问题)- 注意: 2captcha 的 api 需要付费,3 美元起充,支持支付宝。每次成功通过验证约 0.00145 美元,3 美元能用 2068 次,约 2.83 年。
- 将
api key
添加到仓库密钥中,命名为TWOCAPTCHA_APIKEY
配置完成所有内容后,请手动执行一次 Setup CircleCI Context and Secrets
以及 Deploy Cloudflare Worker
workflow 确保配置 secrets 通过 CircleCI CLI 正确同步至 CircleCI contexts secrets,并将 Cloudflare Worker 正确部署。(Actions -> Setup CircleCI Context and Secrets
-> Run workflow
以及 Actions -> Deploy Cloudflare Worker
-> Run workflow
)
Important
有时 cookie 会过期导致签到失败,如果遇到失败情况,请考虑重新获取 cookie 填入 Secrets,再手动执行 Setup CircleCI Context and Secrets
workflow 同步 cookie 到 CircleCI。
-
为什么要采用 CircleCI,不直接用 Github Actions?
直接用 Github Actions 容易导致潜在的仓库被封风险,尽管本项目一天只触发一次请求不像 upptime 等开源项目有超高的并发请求量,但是本着本分的原则,还是不要给 Github 添加过多负担。CircleCI 同样是优秀的 CI/CD 平台,Free plan 的 30,000 credits/mo, that’s up to 6,000 build mins 完全可以支撑起本项目的所有需求,另外 CircleCI 的不同 Project 间的 contexts 设计思想相较于一般的 CI/CD 有很大程度上的创新,更多用户使用并且熟悉 CircleCI,对于用户以及平台来说都是双方受益的。
-
为什么不采用 Cloudflare Worker 等 Serverless 函数计算?
已经尝试过 Cloudflare Worker,本地 wrangler dev 有效,但是 deploy Cloudflare Worker 之后,由于 Cloudflare edge 请求会带有明显的 cf 标志,很多平台已经限制了 Cloudflare Worker 的请求。至于更多的函数计算平台还在尝试中,有进展会同步在 Repo 里。当然,如果你对 Cloudflare Worker 的方式有兴趣,欢迎继续尝试的工作,我本地调试的 demo 已经放置于
cloudflareworkers
目录下。 -
为什么要切换到 Cloudflare Worker 作为 Webhook 触发器,不用 CircleCI 的 Scheduled? 根据 CircleCI 的最新条款,Scheduled pipelines 将不对
GitHub App
下的个人仓库开放,因此需要切换到 Custom Webhook 的形式,通过 Cloudflare Worker 作为定时触发器,当然你也可以采用其他方式调用 Webhook,只需要定时调用 Webhook 的接口即可,这里我采用了 Cloudflare Worker 作为定时触发器。
欢迎提交你需要的平台,语言不限制。
如果你是 Python 用户,建议使用
curl_cffi
库而不是requests
等库,curl_cffi
能够更精确地模拟浏览器发送请求,极大程度上防止网站风控。