You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用JavaScript获取他人公开Twitter推文以搭建Telegram Bot?

实现思路与解决方案

首先得明确:Twitter(现称X)的API政策确实做了调整,未经认证(没有API密钥、Bearer Token)是没法合法获取公开推文信息流的。免费版API虽然额度有限,但依然是最稳定合规的途径。下面给你梳理几种用JavaScript实现的可行方案:

一、使用官方X API(推荐)

你需要先申请一个X开发者账号(免费即可注册),获取到Bearer Token,之后就能调用API获取指定用户的推文了。具体步骤和代码示例如下:

  1. 注册X开发者账号,创建项目并拿到Bearer Token;
  2. 通过用户名获取目标用户的ID(推文接口需要用户ID而非用户名);
  3. 获取该用户的最新推文,筛选含特定字符串的内容;
  4. 调用Telegram Bot API发送筛选后的推文。
// 替换为你的实际配置信息
const BEARER_TOKEN = 'your_bearer_token_here';
const TARGET_USERNAME = 'target_username';
const TELEGRAM_BOT_TOKEN = 'your_telegram_bot_token';
const TELEGRAM_CHAT_ID = 'your_chat_id';
const KEYWORD = '特定字符串';

async function getUserId(username) {
  const response = await fetch(`https://api.twitter.com/2/users/by/username/${username}`, {
    headers: { 'Authorization': `Bearer ${BEARER_TOKEN}` }
  });
  const data = await response.json();
  return data.data.id;
}

async function getLatestTweets(userId) {
  const response = await fetch(`https://api.twitter.com/2/users/${userId}/tweets?tweet.fields=created_at&max_results=10`, {
    headers: { 'Authorization': `Bearer ${BEARER_TOKEN}` }
  });
  const data = await response.json();
  return data.data;
}

async function sendToTelegram(message) {
  await fetch(`https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ chat_id: TELEGRAM_CHAT_ID, text: message })
  });
}

// 主逻辑:定时检查并推送
async function runBot() {
  try {
    const userId = await getUserId(TARGET_USERNAME);
    const tweets = await getLatestTweets(userId);
    
    // 筛选含特定字符串的推文
    const filteredTweets = tweets.filter(tweet => tweet.text.includes(KEYWORD));
    
    for (const tweet of filteredTweets) {
      const message = `新推文:\n${tweet.text}\n发布时间:${tweet.created_at}`;
      await sendToTelegram(message);
      await new Promise(resolve => setTimeout(resolve, 1000)); // 避免请求过于频繁
    }
  } catch (error) {
    console.error('运行出错:', error);
  }
}

// 每5分钟检查一次
setInterval(runBot, 5 * 60 * 1000);

免费版API的调用额度足够小流量Bot使用,比如/2/users/:id/tweets端点每15分钟最多可调用900次。

二、第三方镜像服务(非官方,风险较高)

如果不想申请开发者账号,可以尝试第三方X镜像服务(比如Nitter),部分实例提供JSON接口或可解析HTML获取推文内容。但要注意:

  • 这类服务没有官方保障,随时可能被X封禁或停止服务;
  • 需遵守镜像服务的使用规则,避免频繁请求给对方服务器造成压力。

示例(假设某Nitter实例支持JSON接口):

async function getTweetsFromNitter(username) {
  const response = await fetch(`https://nitter.example.com/${username}/json`);
  const tweets = await response.json();
  return tweets;
}

// 后续筛选和发送逻辑与官方API方案类似

这种方法稳定性差,不建议用于长期运行的Bot。

三、额外注意事项

  • 无论采用哪种方式,都要遵守X的服务条款,避免大规模爬取或滥用API;
  • Telegram Bot开发推荐使用node-telegram-bot-api npm包,能简化消息发送、更新监听等逻辑;
  • 建议存储上次获取的最新推文ID,避免重复发送相同内容,提升效率。

内容的提问来源于stack exchange,提问作者user234562

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:36:39