Tweepy 截断状态
Tweepy Truncated Status
我正在使用 tweepy 挖掘用户时间线数据,在理解以下内容时遇到了一些困难:
- 'retweeted' 和 'truncated' 属性指的是同一事物(即超过 140 个字符的状态文本)吗?
- 如果不是,有什么区别?
- 我遇到了一个 Whosebug 问题,其中有人询问如何检索由于长度超过 140 个字符而 'chopped' 的状态文本。它表明 _json 字典中有一个转推属性,如果是这样的话,该属性将为真,并且完整的状态文本将位于 status->retweeted_status->text 下。但是,我没能找到它,唯一的状态文本是在状态->以“...”结尾的文本下。我是否听错了?如果是,我如何获得全文?
提前感谢您的帮助。
'retweeted' 和 'truncated' 属性指的是同一事物(即超过 140 个字符的状态文本)吗?如果不是,有什么区别?
不,推文不仅可以在转推(转发)之后被截断,还可以在回复或提及之后被截断(参见我下面的示例,这不是转推)。如果是这样,'truncated' 将被设置为 'True'(并且 'retweeted' 将是 True 或 False)。 'retweeted' 等于 True 而 'truncated' 等于 False 也是可能的,如果推文没有被截断,因为它的大小远低于 140 个字符。
这表明 _json 字典中有一个转推属性,如果是这样的话,该属性将为真,完整的状态文本将在 status->retweeted_status->text 下。
只有当推文是真正的转推时,这才是正确的。实际上,如果 retweeted_status 来自另一条被截断的推文,它本身可能会被截断。最好的方法是在 Tweepy 中使用 tweet_mode='extended'
参数来检索全文(遗憾的是 Tweepy 文档中没有记录)。例如:
(未扩展)
print api.get_status('862328512405004288')._json['text']
@tousuncotefoot @equipedefrance @CreditAgricole @AntoGriezmann @KMbappe @layvinkurzawa @UmtitiSam J'ai jamais vue d… https://tco/kALZ2ki9Vc
(扩展)
print api.get_status('862328512405004288', tweet_mode='extended')._json['full_text']
@tousuncotefoot @equipedefrance @CreditAgricole @AntoGriezmann @KMbappe @layvinkurzawa @UmtitiSam J'ai jamais vue de match de foot et cela ferait un beau cadeau pour mon copain !!
关于问题 3)
下面是一种从 Tweepy 流侦听器访问扩展状态文本的方法,假设推文超过 140 个字符(在这种情况下,状态对象将有一个 extended_tweet 字典)。如果推文不超过 140 个字符,则照常获取状态文本:
class MyStreamListener(tweepy.StreamListener):
def on_status(self, status):
try:
text = status.extended_tweet["full_text"]
except AttributeError:
text = status.text
我也被这个问题困扰。
转发推文时,.json文件中有两个"full_text"标签。真正的full_text可以通过调用'retweet_status'的标签提取出来。解决方法如下:
for tweet in tweepy.Cursor(api.search, q = "social", tweet_mode='extended',
wait_on_rate_limit = True, wait_on_rate_limit_notify = True, include_entities=True).items(10):
try:
print tweet.retweet.im_self._json['retweeted_status']['full_text']
except:
print tweet.retweet.im_self._json['full_text']
对我来说最简单的方法就是获取状态并搜索转发的全文。
status = api.get_status(id, tweet_mode="extended")
try:
print(status.retweeted_status.full_text)
except AttributeError: # Not a Retweet
print(status.full_text)
这甚至在搜索中也有效
tweets=[]
for tweet in api.search(q=keyword, lang="en", count=count, tweet_mode='extended'):
try:
tweets.append(tweet.retweeted_status.full_text)
except AttributeError: # Not a Retweet
tweets.append(tweet.full_text)
我正在使用 tweepy 挖掘用户时间线数据,在理解以下内容时遇到了一些困难:
- 'retweeted' 和 'truncated' 属性指的是同一事物(即超过 140 个字符的状态文本)吗?
- 如果不是,有什么区别?
- 我遇到了一个 Whosebug 问题,其中有人询问如何检索由于长度超过 140 个字符而 'chopped' 的状态文本。它表明 _json 字典中有一个转推属性,如果是这样的话,该属性将为真,并且完整的状态文本将位于 status->retweeted_status->text 下。但是,我没能找到它,唯一的状态文本是在状态->以“...”结尾的文本下。我是否听错了?如果是,我如何获得全文?
提前感谢您的帮助。
'retweeted' 和 'truncated' 属性指的是同一事物(即超过 140 个字符的状态文本)吗?如果不是,有什么区别?
不,推文不仅可以在转推(转发)之后被截断,还可以在回复或提及之后被截断(参见我下面的示例,这不是转推)。如果是这样,'truncated' 将被设置为 'True'(并且 'retweeted' 将是 True 或 False)。 'retweeted' 等于 True 而 'truncated' 等于 False 也是可能的,如果推文没有被截断,因为它的大小远低于 140 个字符。
这表明 _json 字典中有一个转推属性,如果是这样的话,该属性将为真,完整的状态文本将在 status->retweeted_status->text 下。
只有当推文是真正的转推时,这才是正确的。实际上,如果 retweeted_status 来自另一条被截断的推文,它本身可能会被截断。最好的方法是在 Tweepy 中使用 tweet_mode='extended'
参数来检索全文(遗憾的是 Tweepy 文档中没有记录)。例如:
(未扩展)
print api.get_status('862328512405004288')._json['text']
@tousuncotefoot @equipedefrance @CreditAgricole @AntoGriezmann @KMbappe @layvinkurzawa @UmtitiSam J'ai jamais vue d… https://tco/kALZ2ki9Vc
(扩展)
print api.get_status('862328512405004288', tweet_mode='extended')._json['full_text']
@tousuncotefoot @equipedefrance @CreditAgricole @AntoGriezmann @KMbappe @layvinkurzawa @UmtitiSam J'ai jamais vue de match de foot et cela ferait un beau cadeau pour mon copain !!
关于问题 3)
下面是一种从 Tweepy 流侦听器访问扩展状态文本的方法,假设推文超过 140 个字符(在这种情况下,状态对象将有一个 extended_tweet 字典)。如果推文不超过 140 个字符,则照常获取状态文本:
class MyStreamListener(tweepy.StreamListener):
def on_status(self, status):
try:
text = status.extended_tweet["full_text"]
except AttributeError:
text = status.text
我也被这个问题困扰。
转发推文时,.json文件中有两个"full_text"标签。真正的full_text可以通过调用'retweet_status'的标签提取出来。解决方法如下:
for tweet in tweepy.Cursor(api.search, q = "social", tweet_mode='extended',
wait_on_rate_limit = True, wait_on_rate_limit_notify = True, include_entities=True).items(10):
try:
print tweet.retweet.im_self._json['retweeted_status']['full_text']
except:
print tweet.retweet.im_self._json['full_text']
对我来说最简单的方法就是获取状态并搜索转发的全文。
status = api.get_status(id, tweet_mode="extended")
try:
print(status.retweeted_status.full_text)
except AttributeError: # Not a Retweet
print(status.full_text)
这甚至在搜索中也有效
tweets=[]
for tweet in api.search(q=keyword, lang="en", count=count, tweet_mode='extended'):
try:
tweets.append(tweet.retweeted_status.full_text)
except AttributeError: # Not a Retweet
tweets.append(tweet.full_text)