为什么我会收到此错误?这就是我所谓的流式API。

import tweepy
import sys

creds = json.loads(open('credential.json').read())
tw_consumer_key = creds['tw_consumer_key']
tw_consumer_secret = creds['tw_consumer_secret']
tw_access_token = creds['tw_access_token']
tw_access_token_secret = creds['tw_access_token_secret']

try:
    auth = tweepy.OAuthHandler(tw_consumer_key, tw_consumer_secret)
    auth.set_access_token(tw_access_token, tw_access_token_secret)
    api = tweepy.API(auth)
except Exception:
    service = None
    api = None

# Query terms
Q = "Better"

class CustomStreamListener(tweepy.StreamListener):
    def on_status(self, status):
        try:
            print "%s\n%s\n%s\n%s\n\n" % (status.text,
                                      status.author.screen_name,
                                      status.created_at,
                                      status.source,)
        except Exception, e:
            print >> sys.stderr, 'Encountered Exception:', e
            pass

    def on_error(self, status_code):
        print >> sys.stderr, 'Encountered error with status code:', status_code
        return True # Don't kill the stream

    def on_timeout(self):
        print >> sys.stderr, 'Timeout...'
        return True # Don't kill the stream



class LiveStream(webapp2.RequestHandler):
    def get(self):
        streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60)
        self.response.out.write(streaming_api.filter(track=Q))

可能是由于GAE不允许使用套接字,因此我不确定如何应用查询字词来获取特定的过滤后的流式推文。这部分代码的目的是使带有指定关键字的实时流。如果有其他方法,请指导。

最佳答案

在App Engine上,httplib连接(和urllib)将使用Google URL提取服务。 URL Fetch service表示其他服务器(不是App Engine服务实例)执行请求并将响应返回给App Engine实例,而不是进程本身打开套接字。

我相信您注意到GAE上运行的httplib变体不提供用于设置超时的sock属性。但是,根本的问题是无法获得流,在响应完成之前,您不会将任何结果返回到应用程序引擎。我还没有测试过它如何失败,但是我希望您会从URL服务中收到DeadlineExceededError,因为Twitter不会关闭流式响应。

目前没有其他方法可以在GAE上获取视频流。它可能与后端的出站套接字支持一起使用。套接字支持目前仅对测试人员可用。

关于python - GAE上的Twitter流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14495868/

10-12 18:47