使用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
相关产品推荐
相关产品推荐

