【问题标题】:Tweepy Truncated StatusTweepy 截断状态
【发布时间】:2017-06-22 08:41:22
【问题描述】:

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

  1. “转推”和“截断”属性是否指同一事物(即超过 140 个字符的状态文本)?
  2. 如果不是,有什么区别?
  3. 我遇到了一个 stackoverflow 问题,有人询问如何检索由于长度超过 140 个字符而被“截断”的状态文本。它表明 _json 字典中有一个 retweeted 属性,如果是这种情况,则该属性为 true,并且完整的状态文本将位于 status->retweeted_status->text 下。但是,我无法找到它,并且唯一的状态文本位于状态-> 以“...”结尾的文本下。我是不是弄错了,如果是这样,我该如何获取全文?

提前感谢您的帮助。

【问题讨论】:

    标签: python tweepy


    【解决方案1】:

    'retweeted' 和 'truncated' 属性指的是同一个东西(即超过 140 个字符的状态文本)吗?如果不是,有什么区别?

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

    提示 _json 字典中有一个 retweeted 属性,如果是这种情况,则为 true,完整的状态文本将在 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 !! ????????

    【讨论】:

    • 感谢您的回答。我已经试过了,它就像你解释的那样工作。
    【解决方案2】:

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

    【讨论】:

    • 正是我需要的。谢谢:) +1 来自我。
    • 我很高兴它有用! :)
    【解决方案3】:

    我也因为这个问题而烦恼。

    当推文被转发时,.json 文件中有两个“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']
    
    

    【讨论】:

      【解决方案4】:

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

      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)
      

      【讨论】:

        猜你喜欢
        • 2018-04-27
        • 1970-01-01
        • 1970-01-01
        • 2017-06-14
        • 2011-04-04
        • 1970-01-01
        • 2019-02-03
        • 1970-01-01
        • 2019-05-28
        相关资源
        最近更新 更多