WEIR

推特监控机器人:新推文自动推送到 Telegram(2026)

用 Python 做一个推特监控机器人,把指定账号的新推文推送到 Telegram:BotFather 建机器人、每 5 分钟轮询或签名 Webhook 推送,附真实费用和现成方案对比。


发布于 · 更新于 · 阅读约 7 分钟 · Read in English

封面图:新推文,直接推到 Telegram

推特监控机器人会盯住一个 X 账号,一有新推文,就用 Telegram 的 sendMessage 推送到你的聊天或频道。

我们查过的 GitHub 机器人都要 X(推特)的 API Key,而 X 现在每读一条推文收 $0.005。这篇写给想把新推文推到 Telegram、又不想申请这些 Key 的人,比如盯项目方公告或某个公开账号的动态。

下面两种做法都只要很短的 Python。它们用的 API 是我们做的 Weir。机器人建好之后,用这条命令发一条测试消息:

curl -s "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
  -d chat_id="$TELEGRAM_CHAT_ID" -d text="Hello from my Twitter bot"

你需要 Python 3、一个 Telegram 账号和一个免费的 Weir Key。整个流程四步:

  1. 创建机器人给 @BotFather 发 /newbot,复制令牌。
  2. 找到 chat id用 @频道名,或者从 getUpdates 里读 chat.id。
  3. 获取新推文用 sinceId 轮询搜索,或者让监控推送。
  4. 发送每条推文每条推文调用一次 sendMessage,间隔一秒。

2026 年还能用的推特转 Telegram 方案

看你要多快收到提醒,以及愿不愿意自己跑代码。各方案的条件如下:

方案 你需要 标价 问题
IFTTT Pro 套餐 每月 $2.99,按年付 我们没测过
GitHub 脚本 X API Key 每读一条推文 $0.005 查过的一个已归档
Activepieces 一个账号 免费起步 没列出 X 的触发器
Weir 轮询(第 4 步) Weir Key 和 cron 每次 1 积分,每条 1 分钟级,不是秒级
Weir 监控(第 5 步) Weir Key 和服务器 每次 1 积分,每条 1 最快每小时一次

每个数字都来自对应厂商自己的页面,于 2026 年 10 月 22 日核对。

我们的建议:要几分钟内收到,就用轮询;每小时一次就够、又不想跑循环,就用监控。

如果你把别人的推文转发到公开频道,先看看 X 的条款。本文不构成法律建议。

第 1 步:用 BotFather 创建 Telegram 机器人

给 Telegram 官方的 @BotFather 发消息,就能创建机器人。

发送 /newbot,起一个名字,再起一个以“bot”结尾的用户名。它会回复一个令牌,Telegram 提醒说拿到令牌的人都能控制你的机器人。把它放进环境变量:

export TELEGRAM_BOT_TOKEN="123456789:AA..."
export WEIR_API_KEY="weir_live_..."

要在频道里发消息,就把机器人设为能发消息的管理员。Bot API 把这个权限叫 can_post_messages。

第 2 步:找到你的 Telegram chat id

sendMessage 需要一个 chat_id。公开频道直接用 @频道名。

私聊的话,先给你的机器人随便发一条消息。然后调用 getUpdates,从返回里复制 message.chat.id:

curl -s "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/getUpdates"
export TELEGRAM_CHAT_ID="@yourchannel"  # 或者 getUpdates 里的数字

运行本页开头的测试命令,确认 Telegram 这边通了。

第 3 步:用一个函数把推文转发到 Telegram

两种做法共用一个函数。它把每条推文作为一条单独的消息发出,间隔一秒,这是 Telegram 机器人常见问题里对同一个聊天要求的频率。

import os, pathlib, time, requests

SEND = f"https://api.telegram.org/bot{os.environ['TELEGRAM_BOT_TOKEN']}/sendMessage"

def forward(posts):
    for post in posts:
        text = f"@{post['author']['username']}: {post['text'][:2000]}\n\n{post['url']}"
        r = requests.post(SEND, timeout=10,
                          json={"chat_id": os.environ["TELEGRAM_CHAT_ID"], "text": text})
        r.raise_for_status()  # Telegram 拒收时停止
        time.sleep(1)  # 同一个聊天大约每秒一条

一条消息最多 4,096 个字符,所以代码会截短长推文,并保留链接。

第 4 步:用 sinceId 轮询 X 的新推文

带 sinceId 的搜索只返回比这个 ID 更新的推文,所以每次轮询只为新内容付费。

2026 年 10 月 22 日我们实测过:搜索 @XDevelopers 的 3 条推文扣了 4 积分,再从最新的 ID 开始搜,什么都没有:

→ search_x {"fromUsers": ["XDevelopers"], "limit": 3}
← 3 posts · 4 credits · newest id 2111172163776708859
→ search_x {"fromUsers": ["XDevelopers"], "sinceId": "2111172163776708859", "limit": 3}
← 0 posts · 1 credit · meta.nextCursor null

空的轮询也要 1 积分,你每月的花费主要由它决定。把下面这段加在函数后面:

STATE = pathlib.Path("since_id.txt")  # 已经发送过的最新推文
since_id = STATE.read_text().strip() if STATE.exists() else None
body = {"fromUsers": ["XDevelopers"], "limit": 20}
if since_id:
    body["sinceId"] = since_id
r = requests.post("https://api.weirapp.io/v1/x/search", json=body, timeout=30,
                  headers={"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}"})
r.raise_for_status()  # 402 表示积分用完:充值,不要重试
posts = sorted(r.json()["data"], key=lambda p: int(p["id"]))  # 从旧到新
if since_id:  # 第一次运行只保存最新 ID,旧推文不会刷屏
    forward(posts)
if posts:
    STATE.write_text(posts[-1]["id"])

存成 tweets_to_telegram.py,让 cron 每 5 分钟运行一次:

*/5 * * * * cd /home/you/bot && python3 tweets_to_telegram.py

cron 运行时环境变量很少,所以三个 Key 也要写进 crontab。

如果一个账号在两次轮询之间发了 20 条以上,就用 meta.nextCursor 翻页,或者轮询得更勤一些。

第 5 步:用监控把推特通知推到 Telegram

监控按计划检查,只把新推文签名后发给你的 Webhook。你只需要跑一个小的处理程序,不用写轮询循环。

免费账号有一个监控,每天或每周运行。每小时运行需要付费档,买任意一个 $5 套餐就能升级。

用 POST /v1/webhooks 创建 Webhook,给它一个 name 和你处理程序的 url,保存它只显示一次的密钥。然后创建监控:

curl -s https://api.weirapp.io/v1/monitors -H "Authorization: Bearer $WEIR_API_KEY" \
  -H "Content-Type: application/json" -d '{"name": "XDevelopers", "schedule": "daily",
  "target": {"kind": "x_user", "handle": "XDevelopers"}}'

它的第一次运行会报告这个账号最近的推文。先用 POST /v1/monitors/{id}/run 跑一次,等 /runs 显示完成,再用 PATCH /v1/monitors/{id} 填上 webhookId。

下面的处理程序用 Flask(pip install flask)。和第 3 步的函数一起存成 bot.py:

import hashlib, hmac, json, threading
from flask import Flask, request
app, SECRET = Flask(__name__), os.environ["WEIR_WEBHOOK_SECRET"].encode()

@app.post("/weir")
def weir():
    raw, h = request.get_data(), request.headers  # Weir 签名用的原始字节
    ts, event_id = h.get("weir-timestamp", ""), h.get("weir-event-id", "")
    expected = hmac.new(SECRET, f"{ts}.{event_id}.".encode() + raw, hashlib.sha256).hexdigest()
    fresh = ts.isdigit() and abs(time.time() - int(ts)) <= 300
    if not fresh or not hmac.compare_digest(expected, h.get("weir-signature", "")):
        return "", 400
    posts = json.loads(raw).get("data", {}).get("results", [])
    threading.Thread(target=forward, args=(posts,)).start()  # 先回应,再发送
    return "", 200

按 Weir 的 Webhook 文档,它用 HMAC-SHA256 对 {timestamp}.{eventId}.{rawBody} 签名,并要求 10 秒内回应。投递至少一次,可能重复,所以介意重复的话,就把 weir-event-id 存下来去重。

推特监控机器人一个月要花多少钱?

在 Weir 上,每次轮询或监控运行扣 1 积分,每条新推文再扣 1 积分。以一个每天发 10 条推文的账号为例:

监控一个账号的每月积分,每天 10 条推文
监控,每天一次约 330
监控,每小时一次(付费档)约 1,020
每 10 分钟轮询一次约 4,620
每 5 分钟轮询一次约 8,940

每月 5,000 免费积分够前三种。每 5 分钟轮询一次会超出,按 $5 套餐的单价,超出的部分每月大约 $0.79。

X 的 Activity API 是实时方案。X 的文档说每条推送的推文按一条推文计费,读一条推文 $0.005,这个账号在那边每月大约 $1.50。

推送不成功怎么办

  • 频道里收不到消息。 确认机器人是这个频道的管理员,并且有发消息的权限。
  • sendMessage 报错。 先检查令牌,再检查 chat_id:是 @频道名 还是那串数字。
  • 旧推文刷屏。 两次运行之间要保留 since_id.txt。用监控的话,先跑一次再接上 Webhook。
  • 签名一直对不上。 要对原始请求体做哈希。解析后再序列化的 JSON,字节会变。

什么时候不适合用 Weir

  • 你要几秒内收到提醒。 Weir 按计划检查。X 的 Activity API 会实时推送,TwitterAPI.io 也卖亚秒级的 Webhook。
  • 你要看一个账号的回复。 x_user 监控读的是时间线,不包含回复。
  • 你想从 Telegram 发推。 Weir 只读。反过来的方向,Activepieces 列出了 X 的发推动作。
  • 你不想写代码。 n8n 有 Telegram 节点,我们的 n8n 集成指南(英文)讲了 Webhook 那一侧。

常见问题

有免费的推特转 Telegram 机器人吗?

截至 2026 年 10 月,没有完全免费又不限量的。IFTTT 的 X 小程序要 Pro 套餐,GitHub 上的机器人要付费的 X API Key。Weir 每月 5,000 免费积分,够每 10 分钟轮询一个每天发 10 条推文的账号。

IFTTT 还能把推文发到 Telegram 吗?

IFTTT 仍然列着 X 的触发器“New tweet by a specific user”和 Telegram 的“Send message”动作。它的套餐页把推特小程序放在 Pro 里,每月 $2.99,按年付。触发有多快,我们没测过。

GitHub 上的推特转 Telegram 机器人还能用吗?

代码可能还能跑,但我们查过的两个都要 X API Key,而 X 每读一条推文收 $0.005。其中 GeBakaev 的 twitter-telegram-forward 已在 2023 年 8 月归档。

推特监控机器人能盯关键词吗?

能。把轮询代码里的 fromUsers 换成 query,或者给监控设一个 search 目标,sources 设为 ["x"]。查询语句的写法见推特高级搜索语法大全。

参考来源

以下均于 2026 年 10 月 22 日核对,均为英文页面: