我使用Google App Engine从Twitter搜索API获取数据时遇到问题。在个人发展环境中工作,我没有问题。我能够得到我想要的JSON。但是,一旦将代码部署到App Engine,我就会遇到HTTP 500错误代码。

我对发生的事情的唯一想法是,我缺少的开发和实时应用引擎环境之间存在一些根本差异,并且/或Twitter拒绝了我运行的应用程序IP的请求。我写了一个小 @app.route,以绝对验证存在问题 - 在下面。

我敢肯定,我不会达到速率限制,因为Twitter搜索API没有明确的API。我看到他们要求使用用户代理,所以我一直在提供此服务,但是我仍然遇到相同的500误差。

我与之合作的现场版本在这里: http://1-alpha-3.rich90usa.appspot.com/twitter_test

对这里出问题的任何想法将不胜感激。

烧瓶的相关部分:

@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"}

我的烧瓶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
有帮助吗?

解决方案

正如加尔文(Calvin)所指出的那样,所有应用程序引擎应用程序源来自同一IP的http请求,因此问题几乎可以肯定是限制速率:

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

但是,来自IP地址的所有请求都应用于搜索率限制。搜索率限制并非公开以阻止不必要的搜索用法和滥用,但它高于剩余率限制。我们认为,对于大多数应用程序,搜索率限制既具有宽松又足够,并且知道许多应用程序供应商发现它适合其需求。

他们还特别呼吁GAE有资格参加白名单:

应用程序必须具有静态IP才能有资格进行白名单。这意味着不能将大多数云平台(包括Google App Engine)列入白名单。

Twitter提出限制费率的建议是切换 流媒体API.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top