4

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

我对正在发生的事情的唯一想法是,我缺少的开发和实时 App Engine 环境之间存在一些根本区别,和/或 Twitter 拒绝来自我正在运行的 App Engine IP 的请求。我写了一个小的@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
4

1 回答 1

1

正如 Calvin 所指出的,所有 App Engine 应用程序都从同一个 IP 池中获取出站 HTTP 请求,因此问题几乎可以肯定是速率限制:

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

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

他们还特别指出 GAE 没有资格列入白名单:

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

Twitter 绕过速率限制的建议是切换到Streaming API

于 2011-04-28T18:15:54.727 回答