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

使用Tweepy API调用所有Tweet ID均失败问题求助

问题描述

我运行了导师提供的代码,该代码用于从已导入的DataFrame中根据tweet_id抓取推文状态,但所有请求均返回失败,且未收到任何报错信息。我申请Twitter开发者权限时无需回答大量问题,怀疑是否存在权限不足的情况?

相关代码如下:

import tweepy
from tweepy import OAuthHandler
import json
from timeit import default_timer as timer

# Query Twitter API for each tweet in the Twitter archive and save JSON in a text file
# These are hidden to comply with Twitter's API terms and conditions
consumer_key = 'HIDDEN'
consumer_secret = 'HIDDEN'
access_token = 'HIDDEN'
access_secret = 'HIDDEN'

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)

api = tweepy.API(auth, wait_on_rate_limit=True)

# NOTE TO STUDENT WITH MOBILE VERIFICATION ISSUES:
# df_1 is a DataFrame with the twitter_archive_enhanced.csv file. You may have to
# change line 17 to match the name of your DataFrame with twitter_archive_enhanced.csv
# NOTE TO REVIEWER: this student had mobile verification issues so the following
# Twitter API code was sent to this student from a Udacity instructor
# Tweet IDs for which to gather additional data via Twitter's API
tweet_ids = twitter_archive.tweet_id.values
len(tweet_ids)

# Query Twitter's API for JSON data for each tweet ID in the Twitter archive
count = 0
fails_dict = {}
start = timer()
# Save each tweet's returned JSON as a new line in a .txt file
with open('tweet_json.txt', 'w') as outfile:
    # This loop will likely take 20-30 minutes to run because of Twitter's rate limit
    for tweet_id in tweet_ids:
        count += 1
        print(str(count) + " : " + str(tweet_id))
        try:
            tweet = api.get_status(tweet_id, tweet_mode='extended')
            print("Success")
            json.dump(tweet._json, outfile)
            outfile.write('\n')
        except tweepy.TweepError as e:
            print("Fail")
            fails_dict[tweet_id] = e
            pass
end = timer()
print(end - start)
print(fails_dict)
解决方案分析
  • 权限校验:你申请的大概率是Twitter基础层级的API权限,这类权限无法访问v1.1版本的get_status接口来抓取历史推文。登录Twitter开发者平台,查看你的项目权限配置,确认是否启用了「Standard v1.1 API」的访问权限。如果没有,需要升级权限或重新申请符合要求的开发者账号。
  • 暴露具体错误信息:当前代码仅打印"Fail",完全无法定位问题。修改异常捕获部分的代码,把print("Fail")替换成print(f"Fail: {e}"),这样能看到具体的错误代码和描述(比如403权限不足、401未授权、404推文不存在等),这是排查问题的核心步骤。
  • 验证推文有效性:部分tweet_id对应的推文可能已被删除、设为私有,或发布账号被封禁,这类情况也会导致请求失败。可以手动通过https://twitter.com/anyuser/status/{tweet_id}格式的链接在网页端查询,确认推文是否还可访问。
  • 适配API版本:如果使用的是新版本Tweepy,v1.1接口的兼容性可能存在问题。建议检查Tweepy版本,若版本过高,可考虑改用Twitter API v2的get_tweet方法,或调整认证方式适配v1.1接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:10:46