使用tweepy获取用户早期推文及全文

Tweepy获取用户早期推文tweepy库输出twitter全文,而不是省略号说明:

tweepy获取用户早期推文

在使用user_timeline获取某个用户的推文时,默认是从当前时间开始往前走count条推文,但是想要获取到早期的推文呢?
我们可以指定max_id来指明推文的最大id号,就可以来获取用户的早期推文。
since_id用来指明最小id是多少。

API.user_timeline([id / user_id / screen_name ][,since_id ][,max_id ][,count ][,页面])

返回从身份验证用户或指定用户发布的20个最新状态。也可以通过id参数请求其他用户的时间轴。

参数:

  • id –指定用户的ID或屏幕名称。
  • user_id –指定用户的ID。有助于区分有效的用户ID还是有效的屏幕名称。
  • screen_name –指定用户的屏幕名称。当有效的屏幕名称也是用户ID时,有助于消除歧义。
  • since_id –仅返回ID大于(即比指定ID更新)ID的状态。
  • max_id –仅返回ID小于(即早于)或等于指定ID的状态。
  • count –每页要尝试检索的结果数。
  • page –指定要检索的结果页面。注意:有分页限制。

返回类型:
Status对象列表

tweepy获取用户早期推文及全文
在这里插入图片描述

就可以获取到以为用户的早期推文。
更多细节请参考:Timeline methods

tweepy库输出twitter全文,而不是省略号

在使用tweepy库的时候可能有的人会遇到一个问题,明明已经使用了扩展模式,为什么打印出来的full_text还是有省略号?像下面这样:

tweepy获取用户早期推文及全文
在这里插入图片描述

说明:

标准API方法
任何tweepy.API返回Status对象的方法都接受一个新 tweet_mode参数。此参数的有效值为compat和 extended,分别提供兼容模式和扩展模式。默认模式(如果未提供任何参数)是兼容模式。

  • 兼容模式
    默认情况下,使用兼容模式,根据需要text将tweepy.API方法返回的Status对象的属性截断为140个字符。发生这种截断时,truncatedStatus对象的属性将为True,并且仅完全包含在可用140个字符范围内的实体将包括在该entities属性中。还可以看出,textStatus对象的属性被截断了,因为该属性的后缀是省略号,空格和到Tweet的缩短的永久链接。
  • 扩展模式
    使用扩展模式时,方法text返回的Status对象的属性将 tweepy.API替换为一个full_text属性,该属性包含Tweet的整个未截断文本。该truncated状态对象的属性会False和entities属性将包含所有的实体。此外,Status对象将具有一个 display_text_range属性,即两个Unicode代码点索引的数组,用于标识Tweet可显示内容的包含性开始和排除性结束。

  • 默认情况下,流中的Status对象可能包含一个extended_tweet 属性,该属性表示Tweet的原始数据/有效负载中的等效字段。该属性/字段仅适用于包含子字段字典的扩展推文。该full_text词典的entities 子字段/关键字将包含Tweet的完整,未截断的文本,并且子字段/关键字将包含完整的实体集。如果存在扩展实体,则extended_entities子字段/键将包含这些实体的完整集合。此外,display_text_range子字段/关键字将包含两个Unicode代码点索引的数组,用于标识Tweet可显示内容的包含性开始和排除性结束。
  • 办理转推
    当将扩展模式与Retweet一起使用时,full_textStatus对象的属性可能会用省略号字符截断,而不是包含Retweet的全文。但是,由于 retweeted_status(作为Retweet的Status对象的)full_text属性本身就是一个Status对象,因此可以改用Retweeted Status对象的属性。

这同样适用于状态对象/有效负载,它们是来自流的转推。来自extended_tweet属性/字段的词典包含一个full_text子字段/键,该 子字段/键可能会被省略号省略。而是可以使用extended_tweet“转发状态”的retweeted_status属性/字段(来自属性/字段)。

例子
给定现有tweepy.API对象并id用于Tweet,以下内容可用于打印Tweet的全文,或者如果是Retweet,则打印Retweeted 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是Retweet,则status.full_text可能会被截断。

此状态事件处理程序用于StreamListener打印Tweet的全文,或者如果是Retweet,则打印Retweeted Tweet的全文:

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是Retweet,则它将没有extended_tweet属性,并且status.text可能被截断。
——————————————————————————————————————————–
所以可以写一个on_status函数,

def on_status(status):
    if hasattr(status, "retweeted_status"):  # Check if Retweet
        try:
            print(tweet.created_at, "->", status.retweeted_status.full_text)
        except AttributeError:
            print(tweet.created_at, "->", status.retweeted_status.text)
    else:
        try:
            print(tweet.created_at, "->", status.full_text)
        except AttributeError:
            print(tweet.created_at, "->", status.text)


public_tweets = api.user_timeline(id='LeoDiCaprio', count=100, tweet_mode='extended')
for tweet in public_tweets:
    print("--------------")
    print(tweet.created_at, "->", tweet.full_text)
    on_status(status=tweet)

效果对比:

tweepy获取用户早期推文及全文
在这里插入图片描述
tweepy获取用户早期推文及全文
在这里插入图片描述

就可以打印出全文了。
详细内容可参考:Extended Tweets

赞(0) 打赏
未经允许不得转载:双小刚博客 » 使用tweepy获取用户早期推文及全文
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏