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

Tweepy编写Twitter机器人返回HTTP 401错误问题排查

Tweepy 流连接报Stream encountered HTTP error: 401错误排查

这个401报错和本地时钟无关,是代码本身的认证逻辑、语法、版本写法混用导致的,具体问题点如下:

  • 基础语法拼写错误:
    • 类构造方法名写错:Python类初始化方法固定为__init__,你写的__int__完全不会被执行,实例的计数参数、父类初始化逻辑全部失效
    • 连接回调方法名写错:Tweepy流连接成功的回调固定为on_connect,你写的on_conect漏了字母n,永远不会被触发
  • 认证逻辑完全混乱:
    • 第一次实例化流对象时,传入的是'consumer_key'这类字符串占位符,根本没有读取keys.py里存储的真实密钥,假密钥必然返回401
    • 代码执行顺序写反:你在构造方法里引用api变量、第一次启动流的时候,下方的auth认证、api初始化代码还没执行,变量根本不存在
    • 新旧版本API混用:你自定义的类已经继承了新版tweepy.Stream,后面又写了旧版v1的Stream(auth=api.auth, listener=xxx)写法,两套API参数规则不兼容,会直接导致认证参数传递失效
  • 执行逻辑错误:第一次调用stream.filter()时就会阻塞启动流,下方的所有代码都不会被执行

修正方案

  1. 先确认Twitter开发者后台的四个密钥(consumer key、consumer secret、access token、access token secret)复制完整,没有多余空格、换行,应用已经开启推文读取权限
  2. 统一使用Tweepy v4+的新版流写法,修正所有拼写错误,调整代码执行顺序,修正后的可运行代码如下:
import tweepy
import keys
from textblob import TextBlob


class TweetListener(tweepy.Stream):
    """处理 incoming 推文流"""
    def __init__(self, consumer_key, consumer_secret, access_token, access_token_secret, limit):
        """初始化推文计数参数"""
        self.tweet_count = 0
        self.TWEET_LIMIT = limit
        # 正确调用父类初始化,传入认证参数
        super().__init__(consumer_key, consumer_secret, access_token, access_token_secret)

    def on_connect(self):
        """连接成功回调"""
        print("Connection successful\n")

    def on_status(self, status):
        try:
            tweet_text = status.extended_tweet.full_text
        except:
            tweet_text = status.text
        print(f'Screen name: {status.user.screen_name}')
        print(f'Language: {status.lang}')
        print(f'Status: {tweet_text}')

        if status.lang != 'en':
            try:
                print(f'Translated: {TextBlob(tweet_text).translate()}')
            except:
                print("翻译接口调用失败")
        print()
        self.tweet_count += 1

        # 达到采集上限后返回False终止流
        return self.tweet_count != self.TWEET_LIMIT


if __name__ == "__main__":
    # 初始化流,传入keys里的真实密钥,设置采集上限为10条
    stream = TweetListener(
        keys.consumer_key,
        keys.consumer_secret,
        keys.access_token,
        keys.access_token_secret,
        limit=10
    )
    # 启动流,跟踪关键词
    stream.filter(track=['python', 'Mars Rover'])

如果运行时还是报401,直接去Twitter开发者平台重新生成一组密钥替换即可,大概率是密钥输错或者权限没开,不用反复调整系统时钟。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:01:06