许多用户希望将Twitter(现称X)上的特定账号推文或话题内容,自动转发到自己的Telegram频道或群组中,以便集中查看或分享。然而,Twitter API政策调整后,直接通过第三方机器人抓取变得困难,且手动转发耗时费力。本文将为你提供一套从零开始的完整解决方案,涵盖机器人配置、关键词过滤和备用方案,确保你能够稳定实现“Twitter→Telegram”的内容同步。
问题现象描述
当你尝试将Twitter上的推文自动发送到Telegram时,可能会遇到以下问题:手动复制粘贴效率极低,无法实时更新;使用第三方机器人时,发现机器人因Twitter API限制而失效或需要付费;或者你根本不知道如何创建和配置一个能够监听Twitter内容的Telegram机器人。此外,部分用户可能希望只同步特定关键词或特定账号的推文,但缺乏精准过滤的方法。
准备条件:注册并获取Twitter API密钥
具体操作说明:
1. 访问 Twitter Developer Portal(developer.twitter.com),使用你的Twitter账号登录。
2. 点击 Create Project,填写项目名称(如“Telegram Sync”),选择使用场景为 “Other”,然后点击 Next。
3. 在 App Permissions页面,选择 Read and Write权限,以便后续能读取推文内容。
4. 创建项目后,进入 Keys and Tokens页面,记录下 API Key、API Key Secret、Bearer Token以及 Access Token和 Access Token Secret。这些密钥将在后续步骤中用于授权。
注意事项/小提示:
- 务必保管好密钥,不要公开分享,否则他人可能滥用你的API额度。
- Twitter免费API的请求频率有限(每月约1500条推文),如果同步量较大,可能需要考虑付费方案。
- 如果遇到“Access Denied”错误,检查项目权限是否设置为“Read and Write”。
备用方案:
- 如果无法访问Twitter Developer Portal,可尝试使用第三方代理服务(如n8n或Zapier),这些服务内置了Twitter连接器,无需直接管理API密钥。
- 对于个人小规模同步,也可以使用浏览器扩展(如Distill Web Monitor)监控特定Twitter页面,但时效性较差。
第一步:在Telegram创建机器人并获取Token
具体操作说明:
1. 打开Telegram应用,搜索并进入 @BotFather(官方机器人创建工具)。
2. 发送 /newbot命令,按照提示设置机器人名称(如“TwitterSyncBot”)和用户名(必须以 bot结尾,如 TwitterSync_Bot)。
3. 创建成功后,BotFather会返回一个 HTTP API Token,格式类似 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11。复制并保存此Token,后续所有操作都需要它。
4. 将新创建的机器人添加到你的Telegram频道或群组中,并赋予管理员权限(至少需要“发送消息”权限)。
注意事项/小提示:
- 机器人用户名一旦设定无法修改,除非删除重建,所以请慎重选择。
- 如果机器人无法发送消息到频道,检查频道是否设置了“限制成员发送消息”,机器人必须为管理员才能绕过限制。
- Token泄露后,任何人都可以控制你的机器人,请立即在BotFather中使用
/revoke命令重置。
备用方案:
- 如果你不想创建新机器人,也可以使用现有的第三方机器人(如 @IFTTT_Bot),但功能受限且需绑定IFTTT服务。
- 对于仅测试目的,可以在Telegram的“我的收藏夹”中与机器人私聊,但正式使用建议创建专用频道。
第二步:部署自动化脚本(使用Python + Tweepy)
具体操作说明:
1. 安装Python环境:确保你的电脑或服务器已安装Python 3.8及以上版本。打开终端(Windows用CMD或PowerShell,Mac/Linux用终端),运行 python --version检查。
2. 安装必要库:在终端中执行以下命令安装Tweepy(Twitter API库)和python-telegram-bot:
`
pip install tweepy python-telegram-bot
`
3. 编写脚本:创建一个名为 twitter_to_telegram.py的文件,输入以下核心代码(需替换其中的密钥和Token):
`python
import tweepy
from telegram import Bot
import time
# Twitter API 配置
consumer_key = "你的API Key"
consumer_secret = "你的API Key Secret"
access_token = "你的Access Token"
access_token_secret = "你的Access Token Secret"
# Telegram 配置
telegram_token = "你的机器人Token"
chat_id = "你的频道或群组ID" # 例如 @mychannel 或 -1001234567890
# 初始化客户端
auth = tweepy.OAuth1UserHandler(consumer_key, consumer_secret, access_token, access_token_secret)
api = tweepy.API(auth)
bot = Bot(token=telegram_token)
# 监听特定用户的推文(替换为你要监控的Twitter用户名,不带@)
def monitor_tweets(user_screen_name):
last_tweet_id = None
while True:
try:
tweets = api.user_timeline(screen_name=user_screen_name, count=1, tweet_mode="extended")
if tweets:
latest_tweet = tweets[0]
if last_tweet_id is None or latest_tweet.id != last_tweet_id:
tweet_text = latest_tweet.full_text
tweet_url = f"https://twitter.com/{user_screen_name}/status/{latest_tweet.id}"
message = f"新推文来自 @{user_screen_name}:\n\n{tweet_text}\n\n🔗 {tweet_url}"
bot.send_message(chat_id=chat_id, text=message)
last_tweet_id = latest_tweet.id
time.sleep(60) # 每60秒检查一次
except Exception as e:
print(f"错误: {e}")
time.sleep(300) # 出错后等待5分钟
# 启动监控(例如监控用户 "elonmusk")
monitor_tweets("elonmusk")
`
4. 运行脚本:在终端中执行 python twitter_to_telegram.py,脚本将开始循环检查新推文并发送到Telegram。
注意事项/小提示:
- 脚本中的
chat_id获取方法:将机器人添加到频道后,任意发送一条消息,然后访问https://api.telegram.org/bot<你的Token>/getUpdates,在返回的JSON中找到chat.id字段。 - 免费API的速率限制为每15分钟15次请求,因此轮询间隔建议至少60秒,避免被限流。
- 如果监控多个账号,建议为每个账号单独运行一个脚本实例,或使用多线程处理。
备用方案:
- 不想写代码?可使用 n8n(开源自动化工具)的可视化界面,拖拽“Twitter 触发器”和“Telegram 发送消息”节点完成配置。
- 对于零编程基础用户,推荐使用 Zapier或 IFTTT的免费方案,但注意它们可能对免费账户有每月任务量限制。
第三步:配置关键词过滤(仅转发特定内容)
具体操作说明:
1. 修改上面的Python脚本,在发送消息前添加关键词判断逻辑。例如,只转发包含“Python”或“科技”的推文:
`python
keywords = ["Python", "科技", "AI"]
if any(keyword in tweet_text for keyword in keywords):
bot.send_message(chat_id=chat_id, text=message)
`
2. 如果希望监控特定话题标签(Hashtag),可改用Tweepy的流式API(Streaming API)。在脚本中添加以下代码监听包含 #bitcoin的推文:
`python
class MyStreamListener(tweepy.StreamingClient):
def on_tweet(self, tweet):
if tweet.lang == "en": # 可选:只转发英文推文
message = f"新推文: {tweet.text}\nhttps://twitter.com/user/status/{tweet.id}"
bot.send_message(chat_id=chat_id, text=message)
stream_listener = MyStreamListener(bearer_token="你的Bearer Token")
stream_listener.add_rules(tweepy.StreamRule("#bitcoin"))
stream_listener.filter()
`
3. 保存并重新运行脚本,此时只有满足关键词或话题条件的推文才会被转发。
注意事项/小提示:
- 流式API(Streaming API)需要Twitter API v2的Academic Research或Pro级别,免费版仅支持有限功能。如果无法使用,请回退到轮询方式。
- 关键词支持中文和英文,但注意Twitter的搜索是精确匹配,例如“Python”不会匹配“pythonic”。
- 为避免重复转发,建议在脚本中添加一个已处理推文ID的集合(set),每次检查前先判断ID是否已存在。
备用方案:
- 在 n8n中,可以在Twitter节点后添加一个“Filter”节点,设置条件如
{{$json["text"].includes("关键词")}}。 - 使用 Telegram Bot API的
sendMessage方法时,也可以直接在机器人端做过滤——但更推荐在脚本端处理,减少无效请求。
第四步:验证同步结果并处理常见错误
具体操作说明:
1. 检查推文是否成功发送:等待脚本运行至少5分钟,然后查看Telegram频道,确认是否收到了符合关键词的推文。如果没有,检查以下几点:
- 确认Twitter账号最近发布了新推文(例如手动发一条测试推文)。
- 查看脚本终端输出是否有报错信息,如 401 Unauthorized(密钥错误)或 Rate limit exceeded(请求过频)。
2. 测试机器人权限:在Telegram中,向机器人发送 /start命令,如果机器人无响应,说明Token无效或机器人被屏蔽。此时需回到BotFather重新生成Token。
3. 验证关键词过滤:如果设置了关键词,但所有推文都被转发,说明过滤逻辑未生效。检查代码中的 if any(...)语句是否正确缩进,并确认关键词与推文内容完全匹配。
注意事项/小提示:
- 首次运行时,脚本可能会转发最近几条推文(取决于
count=1参数),这是正常现象,后续只会转发新推文。 - 如果频道中收到重复推文,检查脚本中是否未记录
last_tweet_id,导致每次轮询都认为有新推文。 - 遇到“Connection refused”错误,通常是网络问题,尝试更换DNS或使用代理。
备用方案:
- 如果脚本始终无法工作,可临时使用手动转发工具:安装 Telegram Desktop客户端,配合 AutoHotkey或 Keyboard Maestro设置快捷键,手动复制推文链接后一键发送到频道。
- 对于企业级需求,考虑使用 Apify的Twitter抓取Actor,它提供稳定的API接口并支持直接输出到Telegram Webhook。
常见问题补充
问:脚本运行一段时间后自动停止怎么办?
答:这可能是由于服务器关机或Python进程被杀死。建议使用 systemd(Linux)或 Task Scheduler(Windows)将脚本设置为开机自启或定时重启。另外,检查是否有内存泄漏,可在循环末尾添加 time.sleep(10)降低CPU占用。
问:我想同步多个Twitter账号,如何同时监控?
答:在脚本中创建多个线程,每个线程监控一个账号。例如:
`python
import threading
threads = []
for user in ["user1", "user2", "user3"]:
t = threading.Thread(target=monitor_tweets, args=(user,))
threads.append(t)
t.start()
`
注意:每个线程需要独立的API认证,但可以共用同一个Telegram Bot Token。
问:转发推文时,如何保留图片和视频?
答:Tweepy的 full_text不包含媒体内容。你需要使用 tweet.entities['media']提取媒体URL,然后通过Telegram的 sendPhoto或 sendVideo方法发送。修改脚本如下:
`python
if hasattr(tweet, 'extended_entities') and 'media' in tweet.extended_entities:
for media in tweet.extended_entities['media']:
if media['type'] == 'photo':
bot.send_photo(chat_id=chat_id, photo=media['media_url_https'])
elif media['type'] == 'video':
bot.send_video(chat_id=chat_id, video=media['video_info']['variants'][0]['url'])
`
问:免费API额度用完后怎么办?
答:升级到Twitter API的 Basic计划(每月约100美元)可获得更高额度。或者,改用RSS方式:使用 Nitter(Twitter的替代前端)生成用户的RSS feed,然后通过 RSS Bot(如 @rss_to_telegram_bot)转发到Telegram。虽然实时性稍差,但完全免费。
总结:
通过注册Twitter API、创建Telegram机器人、部署Python脚本并配置关键词过滤,你可以实现从Twitter到Telegram的自动化内容同步,整个过程虽需一定技术基础,但按照本文步骤操作,结合备用方案,即使新手也能在30分钟内完成搭建。