我在python中有一个cron作业,可以在我的localhost上运行,但是当它部署到appengine时,它不再有效。
pl = db.Query(Venue).order("id")
list = pl.fetch(limit=0)
for p in pl:
base_url = 'http://search.twitter.com/search.json?rpp=100&q=4sq.com/'
query = p.twitter_ID
url_string = base_url + query
json_text = fetch(url_string)
json_response = simplejson.loads(json_text.content)
result = json_response['results']
for f in result:
user = f['from_user']
print user
这在本地工作正常,但在服务器上我收到以下错误:
'结果'追踪(最近的电话 最后):文件 “/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/init.py” 第515行,致电 handler.get(* groups)文件“/base/data/home/apps/hoosheer/4.347697940058059704/hoosheer_main.py”, 第199行,在得到 result = json_response ['results'] KeyError:'results'
在我部署第二个版本之前,这确实有效。有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
未返回JSON 'results'
字段,因为Twitter允许的每Ip请求已达到max quota个可用请求;这解释了为什么从你的国内IP你没有任何问题,你没有得到HTTP 420响应代码。
不幸的是,Google App Engine使用共享IP地址池 * 来处理传出的urlfetch请求,Twitter search APIs不支持身份验证。
搜索API速率限制
托管在Search API上的请求 search.twitter.com,不要算 朝着REST API限制。然而, 所有来自IP地址的请求 适用于搜索速率限制。 未进行搜索速率限制 公众劝阻不必要的 搜索使用和滥用,但确实如此 高于REST速率限制。我们 感觉搜索速率限制是两者 自由和充足的 应用程序并知道很多 应用程序供应商已找到它 适合他们的需要。
这会迫使您认真考虑Google App Engine是否适合您的应用。
*我遇到了同样的问题here但幸运的是,API的开发人员启用了一种身份验证机制,允许来自同一IP的经过身份验证的请求。