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

使用时间参数时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']])

关键注意事项

  1. API权限限制:Twitter API v1.1的标准搜索权限只能获取最近7天的推文。如果你要获取90-180天前的历史数据,必须申请学术研究权限,并使用Twitter API v2的search_all_tweets接口。
  2. result_type的局限性:result_type='popular'对应的热门推文在指定日期区间内可能数量极少甚至没有,建议先换成result_type='mixed'或'recent'测试,确认能拿到数据后再换回popular。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:25:23