【问题标题】:Tweepy Stream Listener for Extended Tweets用于扩展推文的 Tweepy 流侦听器
【发布时间】:2018-12-05 03:55:59
【问题描述】:

我正在使用 Tweepy 的 Stream Listener,并希望检索有关英国当前政治辩论的推文。不幸的是,我只会在 RT 和回复的情况下收到截断的推文。

如:-

RT @ZaidJilani:Chuck Schumer(antiBDS 法案的发起人)说我们应该扼杀加沙。 Jeremy Corbyn 说压迫他们会……

当全文应该是:-

查克舒默(antiBDS 法案的发起人)说我们应该扼杀加沙。 Jeremy Corbyn 说压迫他们只会激化人们。

我已经看到有一种方法可以将 `tweet_mode=extended 与常规 Twitter.API 一起使用。但是我找不到与 Streaming API 类似的东西。有没有人解决这个问题?我的代码如下:-

 from tweepy import Stream
 from tweepy import OAuthHandler
 from tweepy.streaming import StreamListener
 from redis import Redis
 from rq import Queue
 import requests
 import time
 import io
 import os
 import json
 import threading
 import multiprocessing
 from datetime import datetime, timedelta
 import _credentials

 # twitter OAuth
 ckey = _credentials.ckey
 consumer_secret = _credentials.consumer_secret
 access_token_key = _credentials.access_token_key
 access_token_secret = _credentials.access_token_secret



 #Listener Class Override
 class listener(StreamListener):

def __init__(self, start_time, time_limit):
    self.time = start_time
    self.limit= time_limit
    self.tweet_data = []



def on_data(self, data):
    localtime = datetime.now().strftime("%Y-%b-%d--%H-%M-%S")
    print(localtime)

    while (time.time() - self.time) < self.limit:
        try:
            self.tweet_data.append(data)
            return True

        except BaseException:
            print ('failed ondata')
            time.sleep(5)
            pass
    saveFile = io.open(('raw_tweets_{}.json').format(localtime), 'w', encoding='utf-8')
    saveFile.write(u'[\n')
    saveFile.write(','.join(self.tweet_data))
    saveFile.write(u'\n]')
    saveFile.close()
    exit()



def on_error(self, status):

    print (status)

def on_disconnect(self, notice):

    print ('bye')




 #Beginning of the specific code
 keyword_list = ['Theresa May', 'Jeremy Corbyn', 'GE2017', 'Labour', 'Tory','Tories'] #track list

 start_time=time.time()
 auth = OAuthHandler(ckey, consumer_secret) #OAuth object
 auth.set_access_token(access_token_key, access_token_secret)
 twitterStream = Stream(auth, listener(start_time, time_limit=10)) #initialize           Stream object with a time out limit
 twitterStream.filter(track=keyword_list, languages=['en'])  #call the filter method to run the Stream Listener

【问题讨论】:

  • Twitter Dev Documentation 声明它在 Streaming API 中不可用 - “Streaming API 不提供相同的能力来提供查询参数来配置请求选项。因此,Streaming API 将呈现所有推文目前处于兼容模式。[...] 通过公共 REST API 以兼容模式呈现的推文将不包含 extended_tweet 字段。”

标签: python-3.x twitter tweepy


【解决方案1】:

更新:似乎添加了对 tweet_mode = 'extended' 的支持。

self.stream = Stream(auth = auth, listener = self, tweet_mode= 'extended')
tweet_data = json.loads(data)
if "extended_tweet" in tweet_data:
    tweet = tweet_data['extended_tweet']['full_text']

PS。原谅格式,拼写错误等。我是堆栈溢出的新手,只是希望帮助其他面临这个问题的人。

【讨论】:

    【解决方案2】:

    现在已经过去了一段时间,我认为支持全文。

    在这个链接:

    https://developer.twitter.com/en/docs/tweets/tweet-updates

    它说默认支持兼容性。我的(可能是丑陋的)代码显示了我如何处理它:

        if 'extended_tweet' in raw_tweepy_data_object:
            if 'full_text' in raw_tweepy_data_object['extended_tweet']:
                text = raw_tweepy_data_object['extended_tweet']['full_text']
            else:
                pass # i need to figure out what is possible here
        elif 'text' in raw_tweepy_data_object:
            text = raw_tweepy_data_object['text']
    

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多