应用引擎 - 访问 Twitter 数据的困难 - Flask

4

我在使用Google App Engine的Twitter搜索API时遇到了问题。在个人开发环境中,我没有任何问题,可以得到我想要的JSON数据。然而,一旦代码部署到App Engine上,我就遇到了HTTP 500错误代码。

我能想到的唯一原因是,我可能忽略了开发环境和生产环境之间的一些根本性差异,或者Twitter拒绝了我从App Engine运行的IP的请求。我编写了一个小的@app.route来绝对验证是否存在问题-如下所示。

我相当确定我没有达到速率限制,因为Twitter搜索API并没有明确规定速率限制。我看到他们请求了一个用户代理,所以我一直提供这个,但我仍然得到了相同的500错误。

我正在处理的实际版本在这里:http://1-alpha-3.rich90usa.appspot.com/twitter_test

非常感谢您对此问题的任何想法。

Flask相关部分:

@app.route('/twitter_test')
def twitter_test():
  twitter_geo_url = 'http://search.twitter.com/search.json?callback=?&rpp=100&geocode=29.6516344,-82.3248262,3mi'
  twitter_result = urlfetch.fetch(twitter_geo_url, fetch_headers)
  if twitter_result.status_code == 200:
    return twitter_result.content

其中'fetch_headers'是之前定义的:

fetch_headers = {'User-Agent': "APPNAME-1-alpha-3"}

我的Flask Python文件的开头:

from flask import Flask, request, render_template, session, redirect
import oauth2 as oauth
import simplejson as json
import urlparse
import urllib
import httplib
import time

from google.appengine.api import urlfetch

需要错误信息和堆栈跟踪。 - hyperslug
所有的App Engine请求都来自同一个IP池。可能是Twitter从App Engine IP收到了太多的搜索请求,导致他们阻止了进一步的查询。我相信这在GAE上以前发生过。 - Calvin
2
相关链接:https://dev59.com/OFPTa4cB1Zd3GeqPmcuB 和 https://dev59.com/3lPTa4cB1Zd3GeqPjnyJ - systempuntoout
1个回答

1

正如Calvin所说,所有的App Engine应用程序都从相同的IP池发出出站HTTP请求,因此问题几乎肯定是速率限制:

根据http://dev.twitter.com/pages/rate-limiting:

但是,来自一个IP地址的所有请求都适用于搜索速率限制。搜索速率限制不公开以避免不必要的搜索使用和滥用,但它比REST速率限制更高。我们认为搜索速率限制对大多数应用程序既宽松又足够,并且知道许多应用程序供应商已经发现它适合他们的需求。

他们还特别指出GAE不符合白名单资格:

一个应用程序必须拥有静态IP才能有资格进入白名单。这意味着包括Google App Engine在内的大多数云平台都不能进入白名单。

Twitter建议解决速率限制的方法是切换到流API


1
我知道你说的,但是在谷歌应用引擎上,流API并不适合,因为谷歌会超时打开的连接。 - Richard Brooks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接