用RSSHub订阅你的爱豆并推送到QQ群
发布于 2018-10-16 2.56k 次阅读
一个活跃的应援群怎么能没有一个推送君呢,人力成本又太高,于是就诞生了这个机器人。定时抓取Twitter和Instagram并进行翻译后推送到QQ群
效果预览
使用
下载酷 Q,文中使用的是酷 Q Pro 版本。然后安装 HTTP API 插件
申请一个 有道翻译的 API
credentials.js 相关配置
在根目录新建一个 credentials.js 文件,内容为
module.exports = {
// 酷Q授权
accessToken: 'mikutoken',
secret: 'mikuqwq',
rsshub: 'http://rsshub.app',
// 有道翻译
youdao: {
appid: '',
key: ''
}
}
HTTP API 的相关配置
依次进入 酷Q Pro/data/app/io.github.richardchien.coolqhttpapi/config
目录,编辑对应的 json 文件(bot的QQ号.json)。用以下内容覆盖,access_token
和 secret
记得自己修改
{
"host": "0.0.0.0",
"port": 5700,
"use_http": true,
"ws_host": "0.0.0.0",
"ws_port": 6700,
"use_ws": false,
"post_url": "http://127.0.0.1:8989",
"access_token": "mikutoken",
"secret": "mikuqwq",
"post_message_format": "string",
"serve_data_files": true,
"update_source": "github",
"update_channel": "stable",
"auto_check_update": false,
"auto_perform_update": false,
"show_log_console": true,
"log_level": "info"
}
添加订阅信息
打开 db/rss.json
文件,添加需要订阅推送的内容
{
"Twitter-Ice_Hazymoon": { // 订阅名称
"url": "/twitter/user/Ice_Hazymoon", // rsshub 路由
"group": [ // 要推送的群组
117474650
],
"translate": false, // 是否启用翻译
"proxy": true // 是否启用代理(主机为国内服务器,推送地址为国外时可以用到,比如Twitter),使用 http://127.0.0.1:1080 作为代理
}
}
运行
$ yarn install # or npm install
$ node index
其他
- 使用了 RSSHub 来实现订阅功能
- 推荐使用 supervisor 模块,炸了可以自动重启
- 虽然 酷 Q Air 也能用,但不能发图,未测试过
- 推荐使用有道或者Google翻译,百度翻译效果不是很好,可以自行修改
src/translate.js
文件 - 可能有很多 bug,慢慢修复
- 我永远爱着___.jpg
赏
Comments | 33 条评论
有了机器人后,的确可以替代一些锁事处理
好漂亮的主题
哇,厉害了|´・ω・)ノ
看不懂日语
TypeError: Cannot read property ‘forEach’ of undefined代码报错了index.js中,求up主帮忙看看
@网站一起来 能否提供详细的截图,和 credentials.js 的文件内容
@Ice-Hazymoon PS C:\Users\Administrator> node index
19年1月24日10:57:05:首次请求Twitter-Ice_Hayzmoon
19年1月24日11:02:07:Twitter-Ice_Hayzmoon 没有更新 最后更新于:19年1月23日19:31:02
19年1月24日11:07:08:Twitter-Ice_Hayzmoon 没有更新 最后更新于:19年1月23日19:31:02
19年1月24日11:12:08:Twitter-Ice_Hayzmoon 没有更新 最后更新于:19年1月23日19:31:02
感谢提醒,我把 credentials.js改了就成功了,这样的提示说明成功了吗?
@网站一起来 如果有推送的话,应该是成功了
@Ice-Hazymoon 好的,感谢博主୧(๑•̀⌄•́๑)૭
作者你好,在抓取图片的时候出现:图片抓取失败RequestError: Error: connect ECONNREFUSED 127.0.0.1:1080,这是什么缘故?
@闲云遮月 默认需要SSR代理的支持,因为我是在国内机子上使用,如果不需要的话可以删掉第(101-105)行的内容,过几天重新更新一遍
@Ice-Hazymoon 呃,更新之后,反而没有任何反应了(除了首次得到有一个log),更新推特也没有成功或失败的反馈。而db.json里面是有抓取到东西的,tmp也有定时更新缓存。
@闲云遮月 推特更新后要等rsshub缓存刷新后才能生效,默认是十分钟,你可以去rsshub上看看页面有没有刷新,如果还有问题可以加我QQ:1733708055
@闲云遮月 抱歉,出了个bug,pull后再试试
翻译能用谷歌翻译就好了,百度这个翻译太生硬了。
请问配置中的access token 和secret是什么……
@王太虚 自己随便输点东西就行,鉴权用的
@Ice-Hazymoon 还有一个问题是抓取时报错 error: rss:请求RSSHUB失败 ==> Twitter-Ice_Hazymoon ==> RequestError: Error: Invalid URI “undefined/twitter/user/Ice_Hazymoon”
查看代码后发现undefined的部分是rss.js中${rsshub}这个东西,这个东西引用的是
const {
rsshub
} = require(‘../credentials’);
我已经在根目录下建立了同名文件并把上面的内容完整粘贴进去了
请问这是什么原因……
@王太虚 credentials.js 里需要有一个 rsshub 字段,且credentials.js所在的目录要和 index.js 同级,具体参数可以看 https://github.com/Ice-Hazymoon/rsshub2qq
@Ice-Hazymoon 将blog和github上的结合之后可以正常运行 但是出现下面这种情况……是因为我在本地运行但是却关闭了代理的原因么……
info: rss:开始执行任务
info: rss:开始抓取:Twitter-Ice_Hazymoon
info: rss:首次请求 ==> Twitter-Ice_Hazymoon
info: rss:开始执行任务
info: rss:开始抓取:Twitter-Ice_Hazymoon
info: rss:开始执行任务
info: rss:开始抓取:Twitter-Ice_Hazymoon
@王太虚 这种情况应该是正常运行了,如果出现更新log里会打印的,rsshub.app 的缓存在十分钟左右,所以更新推送会有延迟
@Ice-Hazymoon 似乎并没有正常运行..
我在30分钟和15分钟前分别用自己的twitter发了两条测试tweet,但是到目前为止仍然只显示
info: rss:开始执行任务
info: rss:开始抓取:Twitter-test
info: rss:开始执行任务
info: rss:开始抓取:Twitter-test
并没有更新的log打印……
直接访问rsshub.app的url可以发现有第一条tweet的记录
@王太虚 检查下 /db/db.json 里的文件有没有更新,还有就是Twitter的回复推文不会推送,微博的转发推文不会推送
@Ice-Hazymoon 查看了一下代码……
似乎是解析出错……?
原本对于rsshub.app的api返回内容做的解析对现在返回的内容不匹配?
一点小猜测。
@Ice-Hazymoon error: rss:发送失败 ==> https://twitter.com/xfause/status/1143888801028165632 ==> [object Object]
提示发送失败
错误原因是群组号错误
因为我想要自用 所以是把小号直接传到大号上 而不是发送到群里
需要更改哪里呢。
@王太虚 可以把index.js 里的
bot(‘send_group_msg’, {
group_id: group,
message: msg
}).then(resolve).catch(reject);
改为:
bot(‘send_private_msg’, {
user_id: QQ号,
message: msg
}).then(resolve).catch(reject);
@Ice-Hazymoon 另外在我通过创建群聊解决上面的问题后出现了403错误
Error: Request failed with status code 403
这又是什么导致的呢……
@王太虚 这应该是RSSHub的问题,可以手动打开rsshub的链接查看
@Ice-Hazymoon 时隔多日又来打扰博主
现在出现了多次复读的情况,比如一条tweet会在间隔一段时间后重新推送一遍…
这大概会是什么问题
是否有可能是我对转推屏蔽部分代码的修改导致的?
let url = o.guid;
let user_id = config.url.substring(config.url.lastIndexOf(‘/’)+1,config.url.length+1);
let flag = title.search(‘Re’) !== -1 || title.search(‘转发了’) !== -1 || url.search(user_id) == -1;
我添加了一段对于url中user id的查找来进行屏蔽
@王太虚 猜测可能是因为:默认只缓存5条发送过的推文,然后每次再抓取5条,进行diff,过滤与缓存里不同的,如果订阅的地址【删除过推文】的话那么就会diff出来旧的推文再推送一遍,我找时间解决一下这个问题,应该和你修改的代码没关系
博主可以看下qq私聊解答问题吗?
只选择一个推特时,显示发现更新和发送成功,但是没有看见发送到群里的消息。选择两个以上推特时出现错误,db/index有问题;开启翻译true时,也是出现错误,读rss有问题。求助解答!已经加了您ice 的Q号好友了,跪求解答,真的很感谢!
封面图片是亮点啊OωO