Files
fetch_x/README.md
T

3.6 KiB
Raw Blame History

每天抓取指定 X 账号推文

这个项目提供一个零第三方依赖的 Python 脚本,使用 X 官方 API v2 查询指定账号的近期原创推文,并去重存入本地 SQLite 数据库。不会抓取私密账号,也默认排除转推。

配置并手动运行

  1. X Developer Console 创建有 API 访问权限的项目,并取得 Bearer Token。

  2. 复制环境变量示例并填入 token(不要把 .env 提交到 Git):

    cp .env.example .env
    
  3. 运行:

    set -a; source .env; set +a
    python3 fetch_x_posts.py @OpenAI @XDevelopers
    

首次运行默认取过去 24 小时;可用 --initial-lookback-hours 168 取最多 7 天。之后的运行会从上次成功时间向前回退 5 分钟查询,SQLite 的主键去重保证不会重复保存。

数据保存在 x_posts.dbposts 表包含正文、发布时间、公开互动指标、原始 API JSON 和可直接打开的链接。查看最近记录:

sqlite3 x_posts.db 'SELECT username, created_at, text, url FROM posts ORDER BY created_at DESC LIMIT 20;'

macOS 每天定时(推荐)

将下面内容存为 ~/Library/LaunchAgents/com.local.fetch-x.plist,把其中的项目路径和账号改成自己的;token 请直接填入 EnvironmentVariables,或改为调用一个仅自己可读的 wrapper 脚本。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
  <key>Label</key><string>com.local.fetch-x</string>
  <key>ProgramArguments</key><array>
    <string>/usr/bin/python3</string>
    <string>/Users/YOU/Work/fetch_x/fetch_x_posts.py</string>
    <string>@OpenAI</string><string>@XDevelopers</string>
  </array>
  <key>WorkingDirectory</key><string>/Users/YOU/Work/fetch_x</string>
  <key>EnvironmentVariables</key><dict>
    <key>X_BEARER_TOKEN</key><string>YOUR_BEARER_TOKEN</string>
  </dict>
  <key>StartCalendarInterval</key><dict><key>Hour</key><integer>9</integer><key>Minute</key><integer>0</integer></dict>
  <key>StandardOutPath</key><string>/Users/YOU/Work/fetch_x/fetch-x.log</string>
  <key>StandardErrorPath</key><string>/Users/YOU/Work/fetch_x/fetch-x-error.log</string>
</dict></plist>

加载并立即验证一次:

launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.local.fetch-x.plist
launchctl kickstart -k gui/$(id -u)/com.local.fetch-x

X 的“recent search”接口只能检索最近 7 天的推文,且实际 API 权限、额度和速率限制取决于你的 X 开发者套餐。官方接口文档见 Search recent Posts

部署到 Linux 服务器(systemd

以下步骤适用于 Ubuntu/Debian 等使用 systemd 的服务器。把整个项目上传到服务器后,在项目目录执行:

sudo bash deploy/install-linux.sh
sudoedit /etc/fetch-x/fetch-x.env

在环境文件中写入一行 X_BEARER_TOKEN=你的token,然后把 deploy/fetch-x.service 的账号参数 @OpenAI @XDevelopers 换成目标账号并重载:

sudo systemctl daemon-reload
sudo systemctl start fetch-x.service
sudo journalctl -u fetch-x.service -n 100 --no-pager
systemctl list-timers fetch-x.timer

默认每天服务器本地时间 09:00 运行,修改 deploy/fetch-x.timerOnCalendar 后执行 sudo systemctl daemon-reload && sudo systemctl restart fetch-x.timer。定时器设有 Persistent=true,服务器关机错过的执行会在下次开机后补跑。