你是否有这样的需求:想在Telegram上实时接收某个Twitter账号的最新推文,或者自动将Twitter上的热门话题推送到你的频道?通过搭建一个Twitter Telegram Bot,你可以实现跨平台的消息自动同步。本教程将手把手教你如何创建一个能自动抓取Twitter内容并发送到Telegram的机器人,涵盖从账号准备到故障排除的完整流程。
准备工作:注册Telegram Bot并获取Token
在开始搭建之前,你需要先创建一个Telegram机器人并获得它的API Token,这是后续所有操作的基础。
具体操作说明:
1. 打开Telegram,在搜索框输入 @BotFather并进入该官方机器人聊天界面。
2. 发送命令 /newbot给BotFather,按照提示为你的机器人设置一个名字(如“Twitter推送助手”)和用户名(必须以 bot结尾,例如 MyTwitterBot)。
3. 创建成功后,BotFather会返回一段类似 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11的字符串,这就是你的 API Token,请务必复制并保存好。
4. 找到你刚创建的机器人用户名(如 @MyTwitterBot),点击 Start按钮激活它。
注意事项/小提示:
- 机器人用户名必须是全局唯一的,如果提示已被占用,请换一个更长的名字。
- API Token请勿泄露给他人,否则别人可以控制你的机器人。
- 建议将Token保存在一个安全的地方,后续代码中会反复用到。
备用方案:
- 如果你忘记了Token,可以再次找到@BotFather,发送/mybots,选择你的机器人,点击 API Token即可重新查看。
- 如果不想自己写代码,可以使用现成的托管服务(如IFTTT或Zapier),但灵活性较低。
获取Twitter API密钥
要让机器人读取Twitter内容,你需要申请Twitter开发者账号并获取API密钥。
具体操作说明:
1. 访问 Twitter Developer Portal(developer.twitter.com),使用你的Twitter账号登录。
2. 点击 Create Project,填写项目名称和用途描述(选择“个人使用”即可)。
3. 在项目设置中,点击 Keys and Tokens选项卡,你会看到 API Key、API Key Secret、Bearer Token等关键信息。
4. 点击 Generate按钮分别生成 Access Token和 Access Token Secret,并复制保存所有密钥。
5. 注意:新申请的开发者账号可能需要等待审核(通常几分钟到几小时),审核通过后才能正常使用API。
注意事项/小提示:
- 免费版Twitter API有速率限制(每15分钟最多读取900条推文),注意不要过于频繁请求。
- 所有密钥建议存储在一个加密的配置文件中,不要硬编码在公开代码里。
- 如果你的账号是刚注册的,可能无法立即申请开发者权限,建议使用活跃超过30天的账号。
备用方案:
- 如果无法申请到Twitter API,可以尝试使用第三方抓取服务(如Nitter的RSS源),但稳定性较低。
- 也可以使用Twint等非官方库(注意可能违反Twitter服务条款)。
编写机器人核心代码
这一步我们将编写一个简单的Python脚本,让机器人能够监听Twitter并推送消息到Telegram。
具体操作说明:
1. 在你的电脑上安装Python(推荐3.8以上版本)和依赖库:打开终端或命令提示符,运行 pip install python-telegram-bot tweepy。
2. 创建一个新文件 twitter_bot.py,用文本编辑器打开,输入以下代码框架(注意替换其中的密钥占位符):
`python
import tweepy
from telegram import Bot
import time
# Twitter API 配置
TWITTER_API_KEY = '你的API Key'
TWITTER_API_SECRET = '你的API Key Secret'
TWITTER_ACCESS_TOKEN = '你的Access Token'
TWITTER_ACCESS_SECRET = '你的Access Token Secret'
# Telegram Bot 配置
TELEGRAM_BOT_TOKEN = '你的Bot Token'
TELEGRAM_CHAT_ID = '你的聊天ID' # 可以是频道ID或个人用户ID
# 初始化客户端
twitter_client = tweepy.Client(bearer_token='你的Bearer Token')
telegram_bot = Bot(token=TELEGRAM_BOT_TOKEN)
# 监听指定用户的最新推文(示例:监听@Twitter)
def check_new_tweets():
tweets = twitter_client.get_users_tweets(id='783214', max_results=5) # 783214是Twitter官方账号的ID
if tweets.data:
for tweet in tweets.data:
telegram_bot.send_message(chat_id=TELEGRAM_CHAT_ID, text=f'新推文: {tweet.text}')
# 主循环
while True:
check_new_tweets()
time.sleep(60) # 每分钟检查一次
`
3. 获取你的聊天ID:向你的机器人发送任意消息,然后访问 https://api.telegram.org/bot<你的Token>/getUpdates,在返回的JSON中找到 chat.id。
4. 将代码中的占位符替换为真实密钥,保存文件后运行 python twitter_bot.py测试。
注意事项/小提示:
- 代码中的用户ID(783214)是Twitter官方账号,你可以通过TweeterID等工具将用户名转换为数字ID。
- 如果机器人对频道推送,需要先将机器人添加为频道管理员,并赋予发送消息权限。
- 建议使用try-except包裹网络请求,避免因API超时导致程序崩溃。
备用方案:
- 如果你不熟悉编程,可以使用现成的开源项目(如Twitter-to-Telegram),直接配置环境变量即可运行。
- 也可以使用Google Apps Script编写轻量级脚本,无需服务器。
部署机器人到云服务器
本地脚本不能24小时运行,你需要将它部署到云服务器或免费的云平台。
具体操作说明:
1. 选择云服务商:推荐Heroku(免费版已停止)、Railway(提供免费额度)、Vercel(支持Python)或阿里云/腾讯云的轻量应用服务器。
2. 以Railway为例:注册并登录,点击 New Project→ Deploy from GitHub。
3. 将你的代码上传到GitHub仓库(注意将密钥添加到环境变量,不要提交到代码中)。
4. 在Railway的项目设置中,添加环境变量:TWITTER_API_KEY、TWITTER_API_SECRET、TELEGRAM_BOT_TOKEN等。
5. 配置启动命令为 python twitter_bot.py,点击 Deploy等待部署完成。
6. 部署成功后,机器人将开始持续运行。你可以通过Telegram向机器人发送 /start命令确认是否在线。
注意事项/小提示:
- 免费云平台通常有休眠机制(如Railway每月500小时免费),注意监控运行时间。
- 建议在代码中加入日志输出,方便排查问题:
print(f'检查时间: {time.ctime()}')。 - 如果使用Heroku,需要添加Procfile文件并指定进程类型为worker。
备用方案:
- 如果你有闲置的旧电脑或树莓派,可以安装Linux系统并设置开机自启动脚本。
- 也可以使用PythonAnywhere的免费计划,但需要保持网页打开(有自动休眠限制)。
验证机器人功能
部署完成后,你需要确认机器人是否正常工作。
具体操作说明:
1. 等待5-10分钟,观察目标Twitter账号是否有新推文发布。
2. 检查Telegram中你的机器人是否发送了消息:消息格式应为“新推文: 推文内容”。
3. 查看云平台的日志(如Railway的Logs页面),确认是否有错误输出,例如 HTTP 429(请求过于频繁)或 Unauthorized(密钥错误)。
4. 手动测试:在代码中临时添加一条测试消息(如 telegram_bot.send_message(chat_id=..., text='测试消息')),重新部署后查看是否收到。
注意事项/小提示:
- 如果目标账号很久没发推,可以手动发一条推文测试(注意测试账号不要用于生产环境)。
- 检查时区问题:Twitter时间戳是UTC,Telegram可能显示本地时间,不影响功能。
- 如果收到重复消息,说明代码中未记录已处理的推文ID,需要在代码中加入去重逻辑。
备用方案:
- 如果收不到消息,先检查聊天ID是否正确:向机器人发送任意消息后,重新获取getUpdates接口。
- 尝试用curl命令直接调用Telegram API:
curl https://api.telegram.org/bot,如果成功说明Token和ID无误。/sendMessage?chat_id= &text=hello
常见问题补充
Q1:机器人报错“tweepy.errors.Forbidden: 403 Forbidden”怎么办?
A:这通常是因为Twitter API密钥权限不足。请检查你的开发者项目是否已通过审核,并确认Bearer Token已正确生成。如果使用v2 API,需要确保在开发者门户中启用了Read权限。
Q2:如何让机器人只推送特定关键词的推文?
A:在代码中使用Twitter API的过滤参数,例如 tweepy.StreamingClient的 add_rules方法添加关键词规则,或者使用 get_users_tweets后手动用 if '关键词' in tweet.text进行筛选。
Q3:机器人运行一段时间后停止推送,但日志无报错?
A:可能是免费云平台的休眠机制导致。可以在代码中加入心跳检测,每隔30分钟向Telegram发送一次“正常运行中”的消息,或升级到付费计划。
Q4:如何让机器人同时监控多个Twitter账号?
A:将多个用户ID放入列表,在循环中遍历每个ID调用API。注意控制请求频率,避免触发速率限制。例如:
`python
user_ids = ['123', '456', '789']
for uid in user_ids:
tweets = twitter_client.get_users_tweets(id=uid, max_results=5)
`
总结:
通过注册Telegram Bot、申请Twitter API、编写核心代码并部署到云服务器,你可以轻松搭建一个自动同步Twitter内容的推送机器人,实现跨平台信息实时获取。