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

使用Tweepy调用Twitter API v2获取完整推文时遇403权限错误

问题解决:Twitter API v2 403权限错误及完整推文获取方案

问题根源

你遇到的403错误核心原因:免费的Essential访问权限仅支持Twitter API v2端点,但你的代码用Tweepy的tweepy.API类调用了v1.1的search_tweets接口,这超出了权限范围,和密钥重置无关。

解决方案

改用Tweepy的Client类(对应API v2)实现搜索,并调整推文文本的获取逻辑,具体如下:

1. 替换API初始化方式

用Client替代API,v2认证需要Bearer Token(在开发者后台生成),同时可保留OAuth1.0a密钥用于用户上下文请求。

2. 调用v2合法搜索接口

使用Client.search_recent_tweets(Essential权限支持搜索最近7天推文),通过tweet.fields参数指定获取完整文本及所需字段。

3. 处理完整推文文本

API v2中,普通推文的完整文本在text字段;若为引用/回复推文,需通过referenced_tweets字段请求原推文获取完整内容。

修改后的完整代码

import tweepy
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from scipy.special import softmax

# 替换为你的开发者密钥
bearer_token = "你的Bearer Token"
consumer_key = "xxx"
consumer_secret = "xxx"
access_token = "xx"
access_token_secret = "xxx"

# 初始化API v2客户端
client = tweepy.Client(
    bearer_token=bearer_token,
    consumer_key=consumer_key,
    consumer_secret=consumer_secret,
    access_token=access_token,
    access_token_secret=access_token_secret,
    wait_on_rate_limit=True
)

# 搜索最近7天的热门英文原创推文
response = client.search_recent_tweets(
    query="React lang:en -is:retweet",
    tweet_fields=["text", "referenced_tweets"],
    max_results=25
)

# 整理推文列表,处理引用推文的完整文本
tweets_list = []
for tweet in response.data:
    # 检查是否为引用推文
    if tweet.referenced_tweets:
        # 请求引用的原推文获取完整内容
        ref_response = client.get_tweet(tweet.referenced_tweets[0].id, tweet_fields=["text"])
        full_text = ref_response.data.text
    else:
        full_text = tweet.text
    tweets_list.append(full_text)

# 情感分析逻辑保持不变
roberta = "cardiffnlp/twitter-roberta-base-sentiment"
model = AutoModelForSequenceClassification.from_pretrained(roberta)
tokenizer = AutoTokenizer.from_pretrained(roberta)
labels = ['Negative', 'Neutral', 'Positive']

for tweet in tweets_list:
    tweet_words = []
    for word in tweet.split(' '):
        if word.startswith('@') and len(word) > 1:
            word = '@user'
        elif word.startswith('http'):
            word = "http"
        tweet_words.append(word)
    tweet_proc = " ".join(tweet_words)

    encoded_tweet = tokenizer(tweet_proc, return_tensors='pt')
    output = model(**encoded_tweet)

    scores = output[0][0].detach().numpy()
    scores = softmax(scores)

    print(f"Tweet: {tweet}")
    for i in range(len(scores)):
        l = labels[i]
        s = scores[i]
        print(f"{l}: {s:.2f}")
    print("\n")

关键说明

  • 权限限制:Essential权限仅支持搜索最近7天的推文,如需更早内容才需申请Elevated权限。
  • Bearer Token获取:在Twitter开发者后台的「Projects & Apps」→ 对应项目 →「Keys and tokens」中生成。
  • 调用次数限制:处理引用推文时的额外请求会消耗API额度,注意控制请求数量。

内容的提问来源于stack exchange,提问作者Krzysztof Romańczuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:42:35