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

Tweepy如何从user_fields提取数据?无法获取推文作者用户名

问题原因

你无法读取用户名的核心原因有两个:

  1. 漏传了expansions参数:Twitter API v2 不会默认返回推文关联的作者用户数据,user_fields的作用只是指定「当用户对象被返回时需要包含哪些字段」,本身不会触发用户数据的拉取,必须显式传入expansions=["author_id"]告诉接口要展开推文对应的作者对象。
  2. 直接调用flatten()方法会丢失关联数据:flatten()会把所有分页里的主资源(也就是推文对象)抽平成可迭代序列,但分页响应里附带的includes关联数据(也就是展开的用户对象)会在这个过程中被丢弃,你自然无法从单个tweet实例上拿到用户属性。
修复方案

按如下逻辑调整代码即可:

  • 给请求新增expansions=["author_id"]参数
  • 放弃直接用flatten()抽平结果,改为逐页遍历响应,先把每页返回的用户对象做成id到实例的映射,再和每条推文的author_id匹配拿到对应用户名
  • 额外注意:原代码里tweet_text_list.append(tweet)是错误写法,要存推文文本需要取tweet.text属性,否则存入的是整个推文对象。
修正后可运行代码
for ids in liste:
    tweet_pages = tweepy.Paginator(
        client.get_users_tweets,
        id=ids,
        exclude=["replies", "retweets"],
        end_time=current_time,
        start_time=first_day_of_month,
        expansions=["author_id"],  # 新增:声明展开作者关联字段
        tweet_fields=["created_at", "author_id", "public_metrics"],
        user_fields=["name", "username"],
        max_results=100
    )

    for page in tweet_pages:
        # 构建本页用户id到用户对象的映射
        user_mapping = {user.id: user for user in page.includes.get("users", [])}
        for tweet in page.data:
            tweet_id_list.append(tweet.id)
            tweet_created_at.append(tweet.created_at)
            tweet_text_list.append(tweet.text)  # 修正:取推文文本而非整个对象
            tweet_user_id.append(tweet.author_id)
            # 匹配拿到作者用户名
            tweet_author = user_mapping.get(tweet.author_id)
            if tweet_author:
                tweet_user_name.append(tweet_author.username)
补充说明
  • 不要尝试直接访问tweet.username或tweet.user_name属性:推文对象本身不存储用户字段,用户是独立返回的关联资源,必须通过id匹配获取
  • 如果后续需要拉取推文关联的其他资源(比如附带的媒体、地点、话题标签等),逻辑一致:先在expansions里声明要展开的关联字段,再指定对应的*_fields参数,最后从每页的includes里匹配对应数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:24:30