EOP - 上帝之眼,又名 A-SOUL
功能齐全的社交媒体监视器,可从各种社交媒体中爬取数据并将更新推送到Telegram或其他平台
功能
- 同时监测多个服务
- 支持对失败的连接进行重试
- 支持使用代理以避免 API 的请求速率限制
- 内存占用量低(在多服务条件下,单个帐户约 50 MB,20 个帐户约 120 MB)
- 默认情况下,具有最小依赖的 ESM
支持的社交媒体平台(以及计划中的)
- [x] 哔哩哔哩
- [x] 哔哩哔哩直播
- [x] 抖音(需要cookies)
- [x] 抖音直播(需要cookies)
- [x] Twitch(需要cookies)
- [x] TikTok(需要cookies,不稳定)
- [ ] TikTok直播
- [x] Twitter(使用 rsshub-json)
- [x] 微博(仅关注者活动需要cookies)
- [x] YouTube(使用 rsshub-json)
- [ ] YouTube直播
- [x] RSS(支持 RSSHub 和 rsshub-json)
- [x] GitHub(使用 rsshub-json)
- [x] DDStats
- [x] Tape小纸条
- [x] 爱发电
- [x] QQ音乐(需要cookies,需要手动转换)
- [ ] 网易云音乐(使用 NeteaseCloudMusicApi)
支持的发送方式
- [x] Telegram
- [x] go-cqhttp(QQ频道和QQ群组)
需要的系统环境依赖
- Node.js >= 16
使用方法
使用 npx 运行:
# 显示帮助
npx @sparanoid/eop -h
# 使用特定的配置文件启动
npx @sparanoid/eop run -c config.js
使用 Docker 运行:
docker run --init \
-v $(pwd)/config.js:/app/config.js:ro \
-v $(pwd)/db:/app/db \
sparanoid/eop -c config.js --color
# ...or use ghcr.io registry
ghcr.io/sparanoid/eop -c config.js --color
配置文件
最小config.js
export default {
accounts: [
{
enabled: true,
slug: '嘉然',
biliId: '672328094',
},
]
}
完整配置可能如下所示: config.js
export default {
// 监测间隔(毫秒)
loopInterval: 60 * 1000,
// 在每个帐户运行监测之前等待一小段时间
loopPauseTimeBase: 1000,
// 使用 Math.random() 函数生成随机数作为“loopPauseTimeBase”的时间因素
loopPauseTimeRandomFactor: 2000,
// 24小时内,如果新发布的消息超过此数值,则不再发送通知
douyinBotThrottle: 36 * 3600 * 1000,
douyinLiveBotThrottle: 1200 * 1000, // 20 mins
// 65分钟,bilibili有时会达到60分钟的限速
bilibiliBotThrottle: 65 * 60 * 1000,
bilibiliLiveBotThrottle: 65 * 60 * 1000,
bilibiliFollowingBotThrottle: 3600 * 1000,
rssBotThrottle: 12 * 3600 * 1000,
weiboBotThrottle: 3600 * 1000,
ddstatsBotThrottle: 3600 * 1000,
tapechatBotThrottle: 3600 * 1000,
afdianBotThrottle: 3600 * 1000,
qqMusicBotThrottle: 3600 * 1000,
twitchBotThrottle: 65 * 60 * 1000,
// 使用代理绕过bilibili API速率限制
// 默认值: ''
rateLimitProxy: 'http://10.2.1.2:7890',
// 请求配置选项
// 默认值:
// {
// requestOptions: {
// timeout: {
// request: 4000
// }
// }
// }
pluginOptions: {
requestOptions: {
timeout: {
request: 3000
},
},
customCookies: {
// 2021年11月11日
// 抖音主站目前需要 `__ac_nonce` and `__ac_signature` 使得脚本正常运行
douyin: `__ac_nonce=XXX; __ac_signature=XXX;`,
// 从 https://www.bilibili.com/ 获取 `SESSDATA` cookie
bilibili: `SESSDATA=XXX`,
// 从 https://m.weibo.cn/ 获取 `SUB` cookie
weibo: `SUB=XXX`,
}
},
// Twitch API 凭证
// 创建你的 twitch app: https://dev.twitch.tv/console
twitch: {
clientId: `xxx`,
clientSecret: `yyy`,
},
// Telegram 全局配置
telegram: {
enabled: true,
apiBase: 'https://api.telegram.org/bot',
token: '',
// 如果bot属于premium用户,机器人的照片和视频大小限制为2048MB(普通账户为1024MB)
// 默认值: false
premium: true,
// 设置一个特殊的频道/聊天来发送调试信息。如果没有填写,将不会发送任何调试信息
// 默认值: undefined
debuggingChannelId: -10012345,
},
// QQ 推送全局配置
qGuild: {
enabled: true,
// go-cqhttp api地址
// 在 https://github.com/Mrs4s/go-cqhttp 中了解如何使用 go-cqhttp 并向 QQ 发送更新推送
apiBase: 'http://10.2.1.2:5700',
},
// Sentry 全局配置
sentry: {
enabled: true,
dsn: `https://[email protected]/9`,
environment: `production`,
tracesSampleRate: 1.0,
},
// 使用代理获取图像
// 了解更多: https://github.com/willnorris/imageproxy
// 默认值: ''
imageProxy: `https://experiments.sparanoid.net/imageprox/`,
accounts: [
{
// 使用 `false` 禁用此配置文件
// 默认值: true
enabled: true,
// 设置日志文件中的 `slug` 用户名
slug: '嘉然',
// 当配置为 `true` 时,向推送通知的开头添加 `slug` 用户名
// 例如: #嘉然. 便于在一个频道中推送多个账户的更新推送
// 默认值: false
showSlug: true,
// 当 `showSlug` 为 `true` 且定义了此选项时。将使用 `slugNotification` 代替 `slug`. 当你有多个账户,但仍然想要显示相同的通知slug用户名时,这将很有用。例如账户A和账户B必须是不同的slug用户名,但当你启用 `slugNotification` 时,他们在推送通知中可以是相同的。
slugNotification: '嘉然',
// 哔哩哔哩账号 UID
biliId: '672328094',
// 监测哔哩哔哩活动评论。此功能会触发另一个API来监测评论和回复。如果您有很多帐户要监测,那么不建议启用此功能,否则很快就会触发API请求速率限制。
// 默认值: false
bilibiliFetchComments: true,
// 除了 `bilibiliFetchComments` 之外,它还在粘性定位动态中获取评论和回复
// 默认值: false
bilibiliFetchCommentsSticky: true,
// 获取评论的页数。必须大于等于0。0表示只获取第1页(对应index 0)评论。
// 默认值: 5
bilibiliFetchCommentsLimit: 5,
// 除了 `bilibiliFetchComments` ,它还禁用获取每个评论的回复。
// 默认值: false
bilibiliFetchCommentsDisableReplies: true,
// 获取特定的用户评论和回复
// 默认值: undefined
bilibiliFetchCommentsWatchUsers: [
'2763',
],
// 从关注列表中监测评论和回复。它只在用户公开关注列表时工作。
// 默认值: false
bilibiliFetchCommentsFromFollowing: true,
// 监测来自公共VUP数据库的评论和回复
bilibiliFetchCommentsFromVupList: true,
// 查看哔哩哔哩账号关注。此功能会触发另一个API来监测评论和回复。如果您有很多帐户要监测,那么不建议启用此功能,否则很快就会触发API请求速率限制。
// 默认值: false
bilibiliFetchFollowing: true,
// 启用这个来获取隐藏关注列表的用户的关注列表
// 默认值: false
bilibiliFetchFollowingDeprecatedApi: true,
// 监测是否佩戴粉丝牌。由于此API不稳定,可能会获取到很多错误结果,所以默认是禁用的。
// 默认值: false
bilibiliFansMedalOnOff: true,
// 抖音账号 ID
douyinId: 'MS4wLjABAAAA5ZrIrbgva_HMeHuNn64goOD2XYnk4ItSypgRHlbSh1c',
// 抖音直播 ID 不同于抖音账号 ID ,需要从 `douyinId` 计算获得
douyinLiveId: '',
// 微博 account ID
weiboId: '7595006312',
// 监测微博活动评论。此功能会触发另一个API来监测评论和回复。如果您有很多帐户要监测,那么不建议启用此功能,否则很快就会触发API请求速率限制。
// 默认值: false
weiboFetchComments: true,
// 除了 `weiboFetchComments` 之外,它还在粘性定位状态中获取评论和回复
// 默认值: false
weiboFetchCommentsSticky: true,
// 获取特定的用户评论和回复
// 默认值: undefined
weiboFetchCommentsWatchUsers: [
'12345'
],
// QQ音乐 ID
qqMusicId: 'oKCPNKnPoinAoz**',
// QQ音乐频道 ID。只能从URL中获取。
// Share the single post from the app to get it.
qqMusicChannelId: '10036163',
// RSS 服务。一个帐户可以有多个RSS服务。它们将被逐个监测。
rss: [
{
// Name 将在通知输出中用作标记
name: 'Twitter',
// 储存的Slug用户名。必须唯一(不能是 `bilibili`,`weibo` 或其他预设服务名称)
slug: 'rss_twitter',
type: 'twitter',
// 时间戳使用的语言标记
lang: 'ja',
// 可以是 `rsshub-json` 或 `rsshub`
// 了解更多: https://github.com/sparanoid/rsshub-json
provider: 'rsshub-json',
// 使用 `imageProxy` 获取图像
useImageProxy: true,
// 使用正则表达式来匹配标题。只有匹配正则表达式的项目才会被发送
titleRegex: /posted a comment/,
// 和 `titleRegex` 一样,但用于内容。请注意,当同时启用两个选项时,只有当它们都匹配时才会发送通知。
contentRegex: /^7-Zip ([v0-9.]*) was released/,
url: 'http://rsshub-json-instance/twitter/user/minatoaqua/showAuthorInDesc=1&showEmojiForRetweetAndReply=1&showRetweetTextInTitle=0&showQuotedInTitle=1&heightOfPics=150',
},
{
name: 'YouTube動画',
slug: 'rss_youtube',
type: 'youtube',
lang: 'ja',
provider: 'rsshub',
url: 'https://rsshub.app/youtube/channel/UC1opHUrw8rvnsadT-iGp7Cg',
},
],
// Tape纸条账号ID。通常是URL的最后一部分。例如: https://www.tapechat.net/uu/TDL6BG/EVWKIS0F `tapechatId` 应该是 `EVWKIS0F`
tapechatId: 'RQOPYMJQ',
// 爱发电用户 ID, 可以从任意API请求中获取,比如: https://afdian.net/api/badge/first_show?creator_id=xxx
afdianId: 'beaf1482bc2511ea896452540025c377',
// 用于发送通知的 Telegram 聊天/频道 ID
tgChannelId: 41205411,
// 用于发送通知的QQ群组 ID
qGuildId: '12345678901234567',
// 用于发送通知的QQ频道 ID, `qGuildId` 也需要确定在哪个频道发送
qGuildChannelId: 1234567,
// 当用户头像在包含源中更新时,更新 Telegram 聊天/频道 的头像。
// 默认值: []
tgChannelAvatarSource: ['weibo', 'bilibili'],
// 在控制台显示自定义颜色输出。没什么用
// 默认值: '#fff'
color: '#e799b0',
// 禁用哔哩哔哩直播检测。有些账号可能没有直播功能
// 默认值: false
disableBilibiliLive: false,
// 禁用抖音直播检测
// 默认值: false
disableDouyinLive: false,
// 禁用DDStats检测。一些哔哩哔哩帐户可能没有启用DDStats
// 默认值: false
disableDdstats: false,
},
{
enabled: true,
slug: '贝拉',
showSlug: true,
biliId: '672353429',
douyinId: 'MS4wLjABAAAAlpnJ0bXVDV6BNgbHUYVWnnIagRqeeZyNyXB84JXTqAS5tgGjAtw0ZZkv0KSHYyhP',
douyinLiveId: '820648166099',
weiboId: '7594710405',
tgChannelId: '41205411',
color: '#bd7d74',
},
]
}
开发
您需要先安装Yarn:
# 安装依赖
yarn install
# 创建配置文件
vi config.js
# 在本地运行
yarn run start --once --verbose
本地Docker环境:
docker run --init -it \
-v (pwd)/config.js:/app/config.js:ro \
-v (pwd)/packages/core/src:/app/src \
-v (pwd)/db:/app/db sparanoid/eop:local \
-c config.js --color --verbose
FAQ
为什么取这个名字?
该项目的初衷是监测A-SOUL的更新。现在,此项目已重命名为EOP用于更常规的用途。
为什么不并行执行检查?
大多数服务都有 API 限制或速率限制。并行执行检查仅在少量帐户时有意义。
License 许可证
AGPL-3.0
1 条评论
好好好