许多用户希望将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 KeyAPI Key SecretBearer Token以及 Access TokenAccess Token Secret。这些密钥将在后续步骤中用于授权。

注意事项/小提示:

  • 务必保管好密钥,不要公开分享,否则他人可能滥用你的API额度。
  • Twitter免费API的请求频率有限(每月约1500条推文),如果同步量较大,可能需要考虑付费方案。
  • 如果遇到“Access Denied”错误,检查项目权限是否设置为“Read and Write”。

备用方案:

  • 如果无法访问Twitter Developer Portal,可尝试使用第三方代理服务(如n8nZapier),这些服务内置了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 发送消息”节点完成配置。
  • 对于零编程基础用户,推荐使用 ZapierIFTTT的免费方案,但注意它们可能对免费账户有每月任务量限制。

第三步:配置关键词过滤(仅转发特定内容)

具体操作说明:

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 ResearchPro级别,免费版仅支持有限功能。如果无法使用,请回退到轮询方式。
  • 关键词支持中文和英文,但注意Twitter的搜索是精确匹配,例如“Python”不会匹配“pythonic”。
  • 为避免重复转发,建议在脚本中添加一个已处理推文ID的集合(set),每次检查前先判断ID是否已存在。

备用方案:

  • n8n中,可以在Twitter节点后添加一个“Filter”节点,设置条件如 {{$json["text"].includes("关键词")}}
  • 使用 Telegram Bot APIsendMessage方法时,也可以直接在机器人端做过滤——但更推荐在脚本端处理,减少无效请求。

第四步:验证同步结果并处理常见错误

具体操作说明:

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客户端,配合 AutoHotkeyKeyboard 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的 sendPhotosendVideo方法发送。修改脚本如下:

`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分钟内完成搭建。