GAE上的推特流媒体



为什么我会收到此错误? 以下是我调用流式处理 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 "%sn%sn%sn%snn" % (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 提取服务意味着其他服务器(不是应用引擎服务实例)执行请求并将响应返回到应用引擎实例,而不是进程本身打开套接字。

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

目前没有替代方法可以在 GAE 上获取流。它可能适用于后端上的出站套接字支持。套接字支持目前仅供测试人员使用。

我相信GAE不支持httplib。HTTPSConnection.相反,通过将 secure = False 参数添加到 Stream 构造函数来尝试不安全的连接:

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

相关内容

  • 没有找到相关文章

最新更新