Tweepy截断状态

时间:2017-02-05 09:08:51

标签: python tweepy

我用tweepy挖掘用户时间线数据,并且在理解以下内容方面遇到了一些困难:

  1. '转发了#39;并且'截断'属性指的是同一个东西(即超过140个字符的状态文本)?
  2. 如果没有,有什么区别?
  3. 我遇到了一个stackoverflow问题,其中有人询问如何检索已被删除的状态文本'由于长度超过140个字符。它建议在_json字典中有一个转推属性,如果是这种情况则为真,并且完整状态文本将在status-> retweeted_status->文本下。但是,我无法找到它,并且唯一的状态文本处于status->文本以' ...'结尾。我是否弄错了,如果是这样,我如何获得全文?
  4. 提前感谢您的帮助。

4 个答案:

答案 0 :(得分:9)

'转推'和'截断'属性是指同一件事(即超过140个字符的状态文字)?如果没有,有什么区别?

不,推文不仅可以在转发(转发)之后被截断,而且也可以在回复或提及之后被截断(请参阅下面的示例,而不是转推)。如果是这种情况,'truncated'将被设置为'True'(并且'转推'将为True或False)。如果推文没有被截断,因为它的大小远低于140个字符,也可能将'转推'等于True,而'截断'等于False。

它表明_json字典中有一个转推属性,如果是这种情况则为真,并且完整状态文本将处于status-&gt; retweeted_status-&gt; text。 < / p>

只有当推文是真正的转发时才是这样。实际上,如果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 !!

答案 1 :(得分:5)

关于问题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

答案 2 :(得分:2)

由于这个问题,我也感到困扰。

转发推文时,.json文件中有两个“ full_text”标签。真正的全文可以通过调用“ retweet_status”标签来提取。解决方法如下:

StreamingResponse

答案 3 :(得分:1)

对我来说,最简单的方法就是获取状态并搜索转发的全文。

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)