ReadTimeoutError:Twitter Streaming API

时间:2015-11-04 10:44:58

标签: python sockets twitter streaming twython

我想得到一些关于攻击性狗的推文。我的关键字在代码中指定。所有这些都是指德国牧羊犬(西班牙语“牧师阿莱曼”)。 例如,在其他推文中,我希望得到this one完全符合关键字,并于2015年2月23日发布。 我执行下面给出的代码,等待大约1小时后出现以下错误:

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)

1 个答案:

答案 0 :(得分:2)

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

编辑: 有人使用tweepy发布了example,其功能类似于您需要的内容。