使用时间参数时Tweepy无结果,max_id调用异常求解决方案
问题原因与解决方案
核心错误
你代码里的since_id和max_id参数用错了——这两个是基于推文ID的分页标识,不是日期格式参数。把日期字符串传给它们,API无法识别,自然返回空结果;不用这两个参数时,API默认返回最近的推文,所以时间范围不符合预期。
正确参数替换与代码修改
Twitter API v1.1的搜索接口中,指定日期区间应该用since(起始日期,格式YYYY-MM-DD)和until(结束日期,格式YYYY-MM-DD,注意该日期不包含在内,即只会返回until之前的推文)。
修改后的代码如下:
import datetime import tweepy # 先完成API密钥配置(请替换成你的密钥) # auth = tweepy.OAuthHandler(consumer_key, consumer_secret) # auth.set_access_token(access_token, access_token_secret) # api = tweepy.API(auth) # 计算日期区间 date1 = (datetime.datetime.now() - datetime.timedelta(days=180)).strftime("%Y-%m-%d") # 因为until不包含指定日期,要获取到date2当天的推文,需将date2加1天 date2 = datetime.datetime.now() - datetime.timedelta(days=90) date2_until = (date2 + datetime.timedelta(days=1)).strftime("%Y-%m-%d") # 获取推文 for item in tweepy.Cursor(api.search_tweets, q=hashtag, since=date1, until=date2_until, tweet_mode='extended', lang="en", result_type='popular').items(): print([item.full_text, item.created_at, item.retweet_count, item.favorite_count, item.user.followers_count, item.user.profile_image_url, item.entities['hashtags']])
关键注意事项
- API权限限制:Twitter API v1.1的标准搜索权限只能获取最近7天的推文。如果你要获取90-180天前的历史数据,必须申请学术研究权限,并使用Twitter API v2的
search_all_tweets接口。 - result_type的局限性:
result_type='popular'对应的热门推文在指定日期区间内可能数量极少甚至没有,建议先换成result_type='mixed'或'recent'测试,确认能拿到数据后再换回popular。 - API v2适配(学术权限):如果使用API v2,日期参数需用
start_time和end_time,格式为ISO 8601(如2023-01-01T00:00:00Z),示例代码如下:
# API v2示例(需学术权限) client = tweepy.Client(bearer_token=BEARER_TOKEN) start_time = (datetime.datetime.now() - datetime.timedelta(days=180)).isoformat() + "Z" end_time = (datetime.datetime.now() - datetime.timedelta(days=90)).isoformat() + "Z" response = client.search_all_tweets( query=hashtag, start_time=start_time, end_time=end_time, tweet_fields=['created_at', 'public_metrics'], user_fields=['public_metrics', 'profile_image_url'], expansions='author_id', max_results=100 ) # 处理返回结果 for tweet in response.data: user = next(u for u in response.includes['users'] if u.id == tweet.author_id) print([tweet.text, tweet.created_at, tweet.public_metrics['retweet_count'], tweet.public_metrics['like_count'], user.public_metrics['followers_count'], user.profile_image_url])
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

