You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Tweepy搜索包含GIF的热门推文?

解决用Tweepy搜索含GIF的热门推文问题

嘿,我来帮你搞定这个需求!你之前尝试的方向是对的,但有几个关键细节需要调整,让我们一步步来:

核心问题:正确的搜索运算符与参数

Twitter官方支持的筛选GIF推文的运算符是 filter:animated_gif,而不是filter:gif——这可能是你之前没得到预期结果的原因之一。另外,要专门获取热门推文,必须在搜索时指定result_type="popular"参数(针对Tweepy v1.1 API)。

修正后的Tweepy v1.1代码示例

假设你已经完成了OAuth认证步骤,下面是可以直接运行的代码:

import tweepy

# 替换成你的认证信息
consumer_key = "你的consumer_key"
consumer_secret = "你的consumer_secret"
access_token = "你的access_token"
access_token_secret = "你的access_token_secret"

# 初始化API
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)  # 加上wait_on_rate_limit避免触发速率限制

# 搜索含GIF的英文热门推文
try:
    results = api.search(
        q="filter:animated_gif",
        lang="en",
        result_type="popular",
        count=10  # 指定返回的推文数量,最多100
    )

    for tweet in results:
        print(f"\n{tweet.user.name}: {tweet.text}")
        # 额外验证:确认推文确实包含GIF媒体
        if 'media' in tweet.entities:
            for media in tweet.entities['media']:
                if media['type'] == 'animated_gif':
                    print(f"✅ 包含GIF: {media['media_url_https']}")
except tweepy.TweepError as e:
    print(f"请求出错:{e.reason}")

如果你用的是Tweepy v2 API

如果你的项目用的是最新的Tweepy v2(推荐,因为v1.1 API未来会逐步淘汰),代码结构会稍有不同:

import tweepy

# 替换成你的Bearer Token
bearer_token = "你的bearer_token"

# 初始化客户端
client = tweepy.Client(bearer_token, wait_on_rate_limit=True)

# 搜索含GIF的热门英文推文
try:
    response = client.search_recent_tweets(
        query="filter:animated_gif lang:en",
        tweet_fields=["entities", "created_at"],
        expansions="author_id",
        max_results=10
    )

    # 匹配用户信息
    users = {user.id: user for user in response.includes['users']}

    for tweet in response.data:
        user = users[tweet.author_id]
        print(f"\n{user.name}: {tweet.text}")
        # 验证GIF存在
        if 'media' in tweet.entities:
            for media in tweet.entities['media']:
                if media['type'] == 'animated_gif':
                    print(f"✅ 包含GIF: {media['url']}")
except tweepy.TweepError as e:
    print(f"请求出错:{e.reason}")

几个重要提示

  • 速率限制:加上wait_on_rate_limit=True可以让Tweepy自动处理API速率限制,避免被暂时封禁。
  • 热门推文的可用性:如果某个时间段内带GIF的热门推文较少,返回结果可能会不多,这是正常现象。
  • 媒体验证:通过tweet.entities['media']检查媒体类型,可以确保你获取的确实是含GIF的推文,避免搜索结果的小偏差。

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

火山引擎 最新活动