我在使用Google App Engine从Twitter搜索API获取数据时遇到问题。在个人开发环境中工作我没有问题。我能够获得我想要的JSON。但是,一旦代码部署到App Engine,我就会遇到HTTP 500错误代码。
我所知道的唯一想法是,我缺少的开发和实时App Engine环境之间存在一些根本区别,并且/或者Twitter拒绝来自App Engine IP I&#39的请求; m。我写了一个小@ app.route来绝对验证是否有问题 - 现在是。
我非常确定我没有达到速率限制,因为Twitter Search 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 py文件的顶部:
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
答案 0 :(得分:1)
正如Calvin指出的那样,所有App Engine应用都会从同一个IP池中获取出站HTTP请求,因此问题几乎肯定是速率限制的:
来自http://dev.twitter.com/pages/rate-limiting:
然而, 所有来自IP地址的请求 适用于搜索速率限制。 未进行搜索速率限制 公众劝阻不必要的 搜索使用和滥用,但确实如此 高于REST速率限制。我们 感觉搜索速率限制是两者 自由和充足的 应用程序并知道很多 应用程序供应商已找到它 适合他们的需要。
他们还特别指出GAE不符合白名单的条件:
Twitter推荐限制速率的建议是切换到the Streaming API。应用程序必须具有静态IP才有资格进行白名单。这意味着大多数云平台(包括Google App Engine)都不能列入白名单。