推文扩展
本节补充了推特的 Tweet updates documentation 和 repository.
引言
2016年5月24日,推特 宣布 更改回复和URL的处理方式并 发布 了关于支持推特API中这些更改的计划以及描述推特对象和API选项更新的初始技术文档。1 2017年9月26日,推特 开始测试 某些语言的280个字符。2 2017年11月7日,推特 宣布 正在扩大推文的字符限制。3
标准 API 方法
任何返回Status对象的 tweepy.API
方法都接收一个新的
tweet_mode
参数。 该参数的值是 compat
和
extended
。它们分别为兼容模式和扩展模式,默认模式(如果没有提供参数)是兼容模式。
兼容模式
默认情况下,使用兼容模式, tweepy.API
方法返回的 Status 对象的 text
属性被截断为 140 个字符。发生此截断时,Status对象的 truncated
属性将为 True
,并且只有完全包含在可用140个字符范围内的实体才会包含在 entities
属性中。
还可以看出,Status 对象的 text
属性被截断,因为它将以省略号字符、空格和缩短的指向 Tweet 的短链为后缀。
扩展模式
使用扩展模式时, tweepy.API
方法返回的 Status 对象的 text
属性被替换为 full_text
属性,这里包含 Tweet 的整个未截断文本。Status 对象的 truncated
属性将为 False
, entities
属性将包含所有实体。此外,Status 对象将有一个 display_text_range
属性,一个由两个 Unicode 代码点索引组成的数组。
流媒体
默认情况下,来自流的状态对象可能包含一个 extended_tweet
属性,该属性表示推文的原始数据。 此属性/字段仅存在于扩展推文。 该字典的 full_text
字段包含完整的、未截断的推文文本,而 entities
字段包含完整的实体集。 如果有扩展实体,extended_entities
字段将包含所有这些。 此外, display_text_range
字段将包含两个 Unicode 代码点索引的数组。
处理转推
当使用带有转推的扩展模式时,状态对象的 full_text
属性可能会用省略号截断,而不是包含转推的全文。 但是,由于(作为转推的 Status 对象的) retweeted_status
属性本身就是 Status 对象,因此可以使用转推状态 Status 的 full_text
属性。
这也同样适用于来自流的转推的 Status 。 来自 extended_tweet
属性的字典包含一个可以用省略号截断的 full_text
字段。 相反,可以使用转推 Status 的 extended_tweet
字段(来自 retweeted_status
字段)。
例子
给定一个现有的 API
对象和 Tweet 的 id
,以下代码可用于出书 Tweet 的全文,如果它是 转推,则可以输出转推的全文:
status = api.get_status(id, tweet_mode="extended")
try:
print(status.retweeted_status.full_text)
except AttributeError: # Not a Retweet
print(status.full_text)
如果 status
是转推, status.full_text
可能会被截断。
这个 Status 会被 Stream
输出推文全文。 如果它是转推,则会输出转推原文的全文:
def on_status(self, status):
if hasattr(status, "retweeted_status"): # Check if Retweet
try:
print(status.retweeted_status.extended_tweet["full_text"])
except AttributeError:
print(status.retweeted_status.text)
else:
try:
print(status.extended_tweet["full_text"])
except AttributeError:
print(status.text)
如果 status
是转推,它将没有 extended_tweet
属性,并且 status.text
可能会被截断。
脚注