你是否有这样的需求:想在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即可重新查看。
  • 如果不想自己写代码,可以使用现成的托管服务(如IFTTTZapier),但灵活性较低。

获取Twitter API密钥

要让机器人读取Twitter内容,你需要申请Twitter开发者账号并获取API密钥。

具体操作说明:

1. 访问 Twitter Developer Portal(developer.twitter.com),使用你的Twitter账号登录。

2. 点击 Create Project,填写项目名称和用途描述(选择“个人使用”即可)。

3. 在项目设置中,点击 Keys and Tokens选项卡,你会看到 API KeyAPI Key SecretBearer Token等关键信息。

4. 点击 Generate按钮分别生成 Access TokenAccess 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 ProjectDeploy from GitHub

3. 将你的代码上传到GitHub仓库(注意将密钥添加到环境变量,不要提交到代码中)。

4. 在Railway的项目设置中,添加环境变量:TWITTER_API_KEYTWITTER_API_SECRETTELEGRAM_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/sendMessage?chat_id=&text=hello,如果成功说明Token和ID无误。

常见问题补充

Q1:机器人报错“tweepy.errors.Forbidden: 403 Forbidden”怎么办?

A:这通常是因为Twitter API密钥权限不足。请检查你的开发者项目是否已通过审核,并确认Bearer Token已正确生成。如果使用v2 API,需要确保在开发者门户中启用了Read权限。

Q2:如何让机器人只推送特定关键词的推文?

A:在代码中使用Twitter API的过滤参数,例如 tweepy.StreamingClientadd_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内容的推送机器人,实现跨平台信息实时获取。