2015-11-04 247 views
0

我想获得一些关于攻击性犬只的推文。我的关键字在代码中指定。他们都提到德国牧羊犬(西班牙语“pastoralemán”)。 例如,其他微博中我希望得到this one最贴合的关键字,并到2015年二月发布 月23日我执行低于给定的代码和1个小时左右的等待下面的错误出现后:ReadTimeoutError:Twitter流媒体API

requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='stream.twitter.com', port=443): Read timed out. 

似乎443端口有问题。如何解决这个问题?

P.S.该代码可以很好地处理像“python,javascript”这样的关键字。

更新: 我注意到,如果我用英文写关键字,如“德国牧羊犬攻击性”,代码会检索一些推文。但后来我收到另一条错误消息:

socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host 

我的代码:

from tweepy.streaming import StreamListener 
from tweepy import OAuthHandler 
from tweepy import Stream 
import time 

CONSUMER_KEY = "..." 
CONSUMER_SECRET = "..." 
ACCESS_TOKEN = "..." 
ACCESS_TOKEN_SECRET = "..." 

class listener(StreamListener): 

    def on_data(self, data): 
     try: 
      print data 
      saveFile = open('raw_tweets.json', 'a') 
      saveFile.write(data) 
      saveFile.write('\n') 
      saveFile.close() 
      return True 

     except BaseException, e: 
      print 'failed ondata,', str(e) 
      time.sleep(10) 
      pass 

    def on_error(self, status): 
     print status 
     if status == 420: 
      return False 


if __name__ == '__main__': 
    auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 
    auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) 
    stream = Stream(auth, listener()) 

    keywords = ['pastor aleman agresivo','pastor aleman muerde', 
       'pastor aleman mata','pastor aleman muerte', 
       'pastor aleman peligroso','pastor aleman peligro', 
       'pastor aleman adiestramiento'] 
    stream.filter(track=keywords) 
+0

我已经回答了类似的问题[这里](https://stackoverflow.com/a/47865652/3478114)。 –

回答

2

抓住这些错误,并重新启动流。错误是正常的。由于许多原因你无法控制,连接可能会中断。此外,如果90秒后没有任何活动,Twitter将关闭连接。

编辑: 有人发布了一个example使用tweepy做了类似于你需要的东西。

+0

你可以举一些例子如何重新启动流? –

+0

我不使用tweepy。我使用[TwitterAPI](https://github.com/geduldig/TwitterAPI)。 [实施例](http://geduldig.github.io/TwitterAPI/faulttolerance.html)。 – Jonas