推特监控机器人:新推文自动推送到 Telegram(2026)
用 Python 做一个推特监控机器人,把指定账号的新推文推送到 Telegram:BotFather 建机器人、每 5 分钟轮询或签名 Webhook 推送,附真实费用和现成方案对比。
Tarun Khatri
发布于 · 更新于 · 阅读约 7 分钟 · Read in English
推特监控机器人会盯住一个 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。整个流程四步:
- 创建机器人给 @BotFather 发 /newbot,复制令牌。
- 找到 chat id用 @频道名,或者从 getUpdates 里读 chat.id。
- 获取新推文用 sinceId 轮询搜索,或者让监控推送。
- 发送每条推文每条推文调用一次 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 条推文的账号为例:
每月 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 日核对,均为英文页面:
- Telegram Bot API,10.3 版:https://core.telegram.org/bots/api
- Telegram,BotFather:https://core.telegram.org/bots/features#botfather
- Telegram 机器人常见问题,消息限制:https://core.telegram.org/bots/faq
- IFTTT,X 服务:https://ifttt.com/twitter
- IFTTT,Telegram 服务:https://ifttt.com/telegram
- IFTTT 套餐:https://ifttt.com/plans
- Activepieces,Twitter 与 Telegram Bot:https://www.activepieces.com/pieces/twitter/telegram-bot
- hypnoJerk/from_twitter_to_telegram:https://github.com/hypnoJerk/from_twitter_to_telegram
- GeBakaev/twitter-telegram-forward(2023 年 8 月 22 日归档):https://github.com/GeBakaev/twitter-telegram-forward
- X API 价格:https://docs.x.com/x-api/getting-started/pricing
- X Activity API:https://docs.x.com/x-api/activity/introduction
- TwitterAPI.io:https://twitterapi.io/
- n8n,Telegram 节点:https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/
- Weir 监控与 Webhook:https://docs.weirapp.io/monitors
- Weir 计费:https://docs.weirapp.io/billing
- Weir 调用,2026 年 10 月 22 日:两次 search_x