Note
This is a customized fork maintained by @A2Sumie. It is deployed on custom infrastructure via Docker Compose.
Key Modifications:
- Docker Compose setup for local building and sensitive asset injection.
- Customized
.gitignorefor deployment security. - Intended for use with specific operational requirements of the deployment environment.
偶像吃的瑞士军刀.jpg
目前实现的功能如下
| 抓取网站 | 转发平台 | 大模型翻译 | 转发功能 | 媒体文件功能(使用gallery-dl) |
|---|---|---|---|---|
| 推特(X) | qq(onebot11) |
谷歌 gemini(免费,api有区域限制)
智谱 glm-4-flash(免费) 字节豆包 doubao-128k-pro |
转发原推文并翻译 转发带图/视频推文 粉丝数统计 |
图片/视频 |
| telegram | ||||
| bilibili | 只有图片 |
-
配置文件: config.yaml
-
cookie: 本仓库cookies文件格式是Netscape,可以使用浏览器扩展Get cookies.txt LOCALLY获取文件
-
gallery-dl: gallery-dl 仓库地址
-
如何部署: 具体部署情况参考说明
-
环境变量: 说明见下方Docker部署方式
Docker
x86-64,debian
docker-compose.yaml 示例
services:
sns-forwarder:
# build: # 宿主机从源码进行docker build
# context: .
# dockerfile: app/tweet-forwarder/Dockerfile
image: ghcr.io/idol-bbq-utils/idol-bbq-utils:latest
container_name: 'sns-forwarder'
restart: 'on-failure'
environment:
- TZ=Asia/Shanghai
# - NO_SANDBOX=true # 如果容器启动时发现chrome提示namespace相关问题,可以尝试启用此环境变量
# - CACHE_DIR_ROOT= # log和图片的暂存目录,默认为/tmp
volumes:
- './assets/tweet-forwarder/config.example.yaml:/app/config.yaml' # 映射config.yaml
- './assets/tweet-forwarder/data.db:/app/data.db' # 映射sqlite db
- './assets:/app/assets' # 映射其余可能会用到的资源目录
- '/tmp:/tmp' # 提供图片路径给qq onebot server,所以需要映射容器目录至主机上,假设onebot server也部署在本机直接运行
需要nodejs(版本为20+), pnpm
#/bin/bash
git clone https://github.com/idol-bbq-utils/idol-bbq-utils
cd idol-bbq-utils
# 设置prisma orm的数据库地址,此应用使用的是sqlite
export DATABASE_URL="file:../../../data.db"
# 安装依赖
pnpm install
# 初始化数据库
pnpm lerna run --scope=@idol-bbq-utils/tweet-forwarder generate
# 编译源码
pnpm pnpm lerna run --scope=@idol-bbq-utils/tweet-forwarder build --include-dependencies
# 准备配置文件
cp assets/config.example.yaml ./config.yaml
# 启动并运行
node ./app/tweet-forwrader/lib/main.js由于受性能限制,我所使用的配置文件尽量在同一时间只允许使用一个浏览器标签页。所以可以看见我的爬虫规则都是在爬取完一个页面后才进行下一个用户信息的爬取。
此外,测试过程中发现推特会给每个账号设置每日的推文浏览量上限。目前我所使用的相对比较可靠的配置是:
- 两个账号,每天分别爬取12小时,爬取间隔为每10分钟一次。
- 爬取关注量不需要登录态。
具体可以参考我所使用的配置文件
-
如果爬取的用户没那么多,而且需要尝试更激进的策略,比如一分钟爬一次,那么可以自己探索下。
-
如果有使用docker的需求,请注意一下文件/文件夹的权限等
-
如果需要转发图片/视频,那么使用gallery-dl.bin即可(注意这是glibc的)
内存至少大于1G(一般2G,防止swap),硬盘空间最少大于2G(因为你需要一个chrome),推荐2核及以上。
如果你需要在同一时间内同时爬取两个及以上网站,推荐内存大于1G。
实际测试情况
| 核 | 内存 | 操作系统/架构 | 可用情况 | 多tab | 具体表现 |
|---|---|---|---|---|---|
| 1 | 1G | ubuntu 22.04 / amd64 / Common KVM processor @ 2.40GHz | ❌ | ❌ | 同时只能存在一个tab进行处理 程序一天死一次,4分钟做完爬取9个人的任务 不过使用docker的情况下可以较为方便的让爬虫自启 与此同时服务器上用于反代的nginx照常使用,但无法进行ffmpeg rtmp转播 |
| 2 | 1G | ubuntu 22.04 / amd64 | ❌ | ❌ | 3天挂一次,2分钟左右做完任务,之后会越来越慢 如果同时使用docker进行ffmpeg转播,表现为kswapd0 20%左右的占用 内存占满,需要swap换页,导致问题发生 |
| 3 | 2G | ubuntu 22.04 / amd64 | ✅ | 没测 | 比较稳定,2分钟左右完成一次任务 同时也可以使用docker进行ffmpeg rtmp转播 |
| 8 | 4G | ubuntu 22.04 / amd64 / Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz | ✅ | ✅ | 非常稳定,程序可以保持至少10天正常运行 在系统只运行此转发爬虫的重型应用的情况下,待机内存占用为600~700MB,工作时的内存(两个爬虫同时运行)占用接近1G 同时可以使用ffmpeg rtmp进行流畅转播 |
实际测试,可以使用alpine运行,(gallery-dl需要在alpine下重新编译为standalone),chromium浏览器一直占用一个核100%的问题。
todo