tweepy:如何检查 alt_text

tweepy: how to check for alt_text

我需要检查给定的推文是否包含 alt_text。

我正在尝试使用 API.get_status 操作,根据 its documentation 包含一个参数以包含 alt_text:

include_ext_alt_text – If alt text has been added to any attached media entities, this parameter will return an ext_alt_text value in the top-level key for the media entity.

然而,我得到的是:

In [47]: status = api.get_status('1373498941732454402', include_ext_alt_text=True)

In [48]: status.entities['media']
Out[48]: 
[{'id': 1373498937332629507,
  'id_str': '1373498937332629507',
  'indices': [69, 92],
  'media_url': 'http://pbs.twimg.com/media/Ew-mAaMWgAMGTRF.jpg',
  'media_url_https': 'https://pbs.twimg.com/media/Ew-mAaMWgAMGTRF.jpg',
  'url': 'https://short_url.com',
  'display_url': 'pic.twitter.com/pZjrWYNESI',
  'expanded_url': 'https://twitter.com/rowasc/status/1373498941732454402/photo/1',
  'type': 'photo',
  'sizes': {'thumb': {'w': 150, 'h': 150, 'resize': 'crop'},
   'medium': {'w': 718, 'h': 1200, 'resize': 'fit'},
   'small': {'w': 407, 'h': 680, 'resize': 'fit'},
   'large': {'w': 1226, 'h': 2048, 'resize': 'fit'}}}]

请注意,没有 ext_alt_text 值。我也没有发现它是状态对象的一部分。但是,当将状态转换为字符串时,会出现以下内容:

In [49]: 'alt_text' in str(status)
Out[49]: True

并且当使用 re 获取字符串中 alt_text 之后的内容时,alt_text 的某些部分开始出现:

In [58]: re.search(r'.{10,15}alt_text.{10,30}', str(status)).group()
Out[58]: " 'fit'}}, 'ext_alt_text': 'Bash looks furious, Shell "

如何获得alt_text?

嗯,在用 pycharm 稍微调试后,我发现 alt_text 在 status.extended_entities['media'][0]['ext_alt_text'] 中可用,其中 status = api.get_status('1373498941732454402', include_ext_alt_text=True).

当不存在 alt_text 并且 extended_entities 可能不可用时,这可以是 None,因此在访问之前检查它是否存在。

更新 除此之外,出于兼容性原因,一些实际包含图像的推文可能不包含此属性,因此为了确保,API 调用需要一个关于模式的额外参数:

api.get_status('1373498941732454402', include_ext_alt_text=True, tweet_mode="extended")

您可以阅读有关此特定点的更多信息 in this tweepy discussion

注意:

tweet_mode is applicable to every Twitter API v1.1 method / endpoint that retrieves Tweets, not just specifically to API.get_status

因此,您还应该检查 this docs for extended tweets