Python使用Tweepy提取in_reply_to_status_id返回None问题
错误原因
取值返回None不属于语法错误,是Twitter接口返回结构的固有逻辑:
- 外层
retweet对象是用户执行转发操作生成的独立推文对象,并非被转发的原始推文。如果用户转发时没有附加评论、没有在转发链路中触发回复动作,这个外层转发对象的in_reply_to_status_id字段本身就为null,属于接口正常返回。 - 你观测到的有效值位于
retweeted_status字段内,该字段存储的是被转发原始推文的全量数据,你需要的in_reply_to_status_id是原始推文的属性,不属于外层转发对象,直接在外层层级取值自然只能拿到None。 - 你当前代码中先
json.dumps再json.loads的两次序列化/反序列化操作是冗余的,Tweepy的Status模型原生支持属性访问,不需要反复转换JSON格式。
正确实现方式
提供两种可用写法,按需选择即可:
- 直接操作Tweepy模型对象(推荐,代码更简洁)
retweets_list = api.get_retweets(id=tweetid) for retweet in retweets_list: # 从嵌套的原始推文属性上取目标字段 target_reply_id = retweet.retweeted_status.in_reply_to_status_id print(target_reply_id)
- 字典结构取值(适配习惯操作JSON数据的场景)
retweets_list = api.get_retweets(id=tweetid) for retweet in retweets_list: retweet_dict = retweet._json # 先定位到原始推文的字典节点,再取目标字段 target_reply_id = retweet_dict['retweeted_status']['in_reply_to_status_id'] print(target_reply_id)
补充说明:如果被转发的原始推文本身不是回复其他推文生成的内容,哪怕从
retweeted_status节点取in_reply_to_status_id也会返回None,这是数据本身的属性决定的,不属于代码问题。
内容的提问来源于stack exchange,提问作者e.iluf
相关产品推荐
相关产品推荐

