如何用NodeJS监听Twitter浏览器推送通知及获取Websocket连接
解决方案:基于Twitter Basic套餐实现新推文通知
一、获取Chrome中Twitter通知的WebSocket连接信息
要抓取Chrome里Twitter的WebSocket连接,步骤如下:
- 打开Chrome登录Twitter,按F12打开开发者工具
- 切换到Network标签,在筛选框输入
ws过滤WebSocket请求 - 触发一条测试通知(比如让其他账号@你),找到新出现的WebSocket连接,点击进入查看Frames标签,就能获取连接URL和传输的数据格式
- 注意:这个WebSocket URL带临时会话凭证,有效期极短,且Twitter会频繁更新连接参数,直接复用稳定性极差,不建议长期依赖
二、NodeJS模拟浏览器WebSocket连接(仅临时测试)
如果只是临时验证,可以用ws库模拟浏览器连接:
- 安装依赖:
npm install ws
- 复制抓包得到的WebSocket URL和请求头里的Cookie、Authorization等凭证,编写代码:
const WebSocket = require('ws'); // 替换为抓包获取的WebSocket地址 const wsUrl = 'wss://...'; // 替换为抓包获取的请求头参数 const headers = { 'Cookie': '你的Twitter会话Cookie', 'Authorization': 'Bearer 你的认证Token' }; const ws = new WebSocket(wsUrl, { headers }); ws.on('open', () => console.log('WebSocket连接成功')); ws.on('message', (data) => { const msg = JSON.parse(data); // 过滤新推文相关通知 if (msg.type === 'notification' && msg.data?.type === 'tweet') { console.log('新推文通知:', msg.data.tweet.text); } }); ws.on('error', err => console.error('连接出错:', err)); ws.on('close', () => console.log('连接已关闭'));
警告:此方法依赖Twitter内部未公开API,随时可能失效,且存在违反Twitter服务条款、导致账号受限的风险
三、基于Twitter Basic套餐的合规方案(推荐)
Twitter Basic套餐($100/月)提供的API权限完全满足新推文通知需求,推荐使用官方合规方式:
1. 定期轮询用户时间线API
通过/2/users/:id/tweets端点轮询目标用户的新推文,设置合理间隔(比如1分钟)避免限流:
- 安装依赖:
npm install twitter-api-v2
- 代码示例:
const { TwitterApi } = require('twitter-api-v2'); const client = new TwitterApi({ appKey: '你的应用Key', appSecret: '你的应用Secret', accessToken: '你的访问Token', accessSecret: '你的访问Secret', }); // 存储上次获取的最新推文ID,避免重复通知 let lastTweetId = null; async function fetchNewTweets() { const targetUserId = '目标用户ID'; // 替换为你要监听的用户ID const res = await client.v2.userTimeline(targetUserId, { max_results: 5, ...(lastTweetId && { since_id: lastTweetId }) }); if (res.data.length > 0) { lastTweetId = res.data[0].id; res.data.forEach(tweet => { console.log('新推文:', tweet.text); // 这里可添加自定义通知逻辑(如邮件、桌面通知) }); } } // 每分钟执行一次轮询 setInterval(fetchNewTweets, 60000);
2. Webhook主动推送(若权限支持)
如果你的Basic套餐支持Webhook,可在Twitter开发者平台配置用户时间线Webhook,当有新推文时Twitter会主动推送通知到你的NodeJS服务,无需轮询:
- 在开发者平台创建Webhook端点,订阅用户时间线事件
- 编写NodeJS服务接收POST请求,处理推送的新推文数据
四、关键注意事项
- 禁止依赖内部WebSocket:Twitter会随时变更内部接口,且该方式违反服务条款,可能导致账号封禁
- 遵守API限流:Twitter API v2有明确的请求次数限制,Basic套餐的限流规则可在开发者平台查看,需合理设置请求频率
- 低成本替代:若仅监听自己的推文,可直接用Twitter原生通知,再通过IFTTT等工具转发到你的NodeJS服务,成本更低
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

