自学链接👉DeathNote
📣仅用于交流学习,请下载后 24h
之内自行删除。本篇只是记录一下学习途中遇到的一些问题,和自己的解决方法。
本机环境:
- Node.js: v20.11.1
- OS: Ubuntu
# didi
# 安装依赖
直接运行 didi.js
,会提示缺少 Error: Cannot find module 'got'
依赖,这里不能直接安装 got
依赖,如果直接安装再次运行会报以下错误:
Error [ERR_REQUIRE_ESM]: require() of ES Module /*****/node_modules/got/dist/source/index.js from /*****/DeathNote/didi.js not supported. | |
Instead change the require of index.js in /*****/DeathNote/didi.js to a dynamic import() | |
which is available in all CommonJS modules. | |
at Object. (/*****/DeathNote/didi.js:19:951) { | |
code: 'ERR_REQUIRE_ESM' | |
} | |
Node.js v20.11.1 |
大概意思是脚本中使用 require()
函数来加载一个设计为 ES 模块(ESM)的 JavaScript 模块,但是 require()
是 CommonJS(CJS)模块系统的加载机制。从 Node.js
的某些版本开始,ES 模块和 CommonJS 模块具有不同的加载机制。这是因为 ESM 使用 import/export
语法,而 CommonJS 使用 require/module.exports
。错误消息中建议的解决方案是将 require()
调用更改为 import()
,这是一个动态导入的语法,它可以在 CommonJS 模块中使用,并且允许加载 ES 模块。
官方给的建议只能是参考
,当我们看代码文件时,会发现好多地方用了 CJS 模块系统的加载机制。能改,但会很痛苦😣。我们从另一个角度出发,既然加载机制不同,可能跟这个依赖有关系。问了一下 GPT 查阅资料,得出以下结论:
got
库是一个支持 Promise 的 HTTP 请求库,并且自版本 11 起,它被设计为只支持 ESM(ES 模块)。因此,如果您希望使用got
并且坚持使用 CommonJS 模块系统,您将需要使用got
的一个早期版本,该版本仍然支持 CommonJS。要安装一个支持 CommonJS 的版本的
got
,您可以使用npm
或yarn
来安装 10.x 版本或更早的版本。例如,您可以使用以下命令来安装got
的 10.x 版本:
npm install got@11或者,如果您使用
yarn
:
yarn add got@11
后面缺啥安装啥就行了,只有 got
依赖特殊。
npm install crypto-js | |
npm install ws |
# 获取 TOKEN
依赖安装完毕之后,第一次运行脚本后会自动创建 didiCookie.txt
,我们只需将 token 填入里面就可以。这里给出两种获取方法 (第二种方便一点,但不清楚后端逻辑):
第一种[1]:
- 打开 https://v.didi.cn/8AqmLa1?source_id=0hF8j5Cy9
- 点击立即领取,登录
- 调出
F12
,在控制台输入localStorage.getItem('didih5_trinity_login_ticket_role_121230').replace(/"/g, '')
第二种:
- 打开 https://service.leafxxx.win/didi/login.html
- 输入手机号,验证码,登录
- 提取
ticket
里面的内容
比如我们的 token 是 PVI6AC4EHujPYX******
,填入到 txt 中的内容应该为 #PVI6AC4EHujPYX******
基本上到这就结束了,其他细节修改可参考源代码更改。
# 定时启动
创建一个脚本,用来管理 didi 的运行。先通过 which node
获取 node 的安装位置。
vim didi.sh |
# didi.sh | |
cd /=YOUR_PATH=/DeathNote | |
/=YOUR_NODE_PATH=/node ./didi.js |
# 退出给脚本添加执行权限 | |
chmod +x didi.sh |
结合 crontab 定时启动, crontab -e
进入编辑
# 每隔 4 个小时执行 didi 脚本获取福利 | |
5 0-23/4 * * * /=YOUR_PATH=/DeathNote/didi.sh > /=YOUR_PATH=/DeathNote/didi.log 2>&1 |
# meituan
环境依赖参考 didi 环境依赖,如果已经安装过可以略过。
# 获取 TOKEN
参考这篇博客[2]
- 访问网址:
https://passport.meituan.com/useraccount/ilogin?backurl=https://i.meituan.com&risk_app=-1&risk_partner=-1&risk_platform=-1
。我们通过验证码进行登录美团,最好用电脑,因为我们要 F12 抓取 cookie - 登录美团后,我们按下键盘的 F12,打开浏览器开发者工具,选择 network,找到
www.meituan.com
headers,找到里面的 token 字段。我们将它的值赋值到 meituanCookie 即可。注意一定是 Ag 开头的 token 字段。 - 当 token 过期时,可以重新直接访问 https://www.meituan.com/ 抓取 toekn。
# 定时启动
创建一个脚本,用来管理 meituan 的运行。
vim meituan.sh |
# meituan.sh | |
export meituanCookie="Ag**********" | |
/=YOUR_NODE_PATH=/node /=YOUR_PATH=/DeathNote/meituanV3.js |
# 退出给脚本添加执行权限 | |
chmod +x meituan.sh |
结合 crontab 定时启动, crontab -e
进入编辑
# 每天 10 点 15 点 17 点有券可以抽 | |
2 0,10,15,17,21 * * * /=YOUR_PATH=/DeathNote/meituan.sh > /=YOUR_PATH=/DeathNote/meituan.log 2>&1 |
# 设置 QQ 提醒
# 部署 QQ 机器人
参考 https://lagrangedev.github.io/Lagrange.Doc/Lagrange.OneBot/Config/ 快速部署自己的 QQ 机器人
# 可执行权限(可选) | |
chmod +x ./Lagrange.OneBot | |
# 运行 | |
./Lagrange.OneBot |
扫码登录 QQ 机器人,然后在生成的配置文件中添加正向 HTTP 配置,重新运行 ./Lagrange.OneBot
。关于 HTTP POST 配置本人没有配置成功,就先搁置了。
# 测试 QQ 机器人服务
测试服务是否启动:
import requests | |
params = {'user_id': ADMIN_QQ, 'message': '测试', 'access_token': ''} | |
r = requests.get(url="http://127.0.0.1:8083/send_private_msg", params=params) | |
print(r.text) |
# 修改提醒文件
DeathNote 的提醒文件是 sendNotify.js
,要开启 QQ 提醒,首先要完善相关变量。
我们开启了 get 请求,所以把源码中的 post 请求改为 get 请求,改动了三处代码,具体更改如下:
新增的代码截取不全,具体如下:
const queryString = Object.entries({ | |
message: `${text}\n${desp}`, | |
user_id: GOBOT_QQ, | |
access_token: GOBOT_TOKEN | |
}).map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join('&'); |