App Engine - 访问Twitter数据困难 - Flask

4 投票
1 回答
983 浏览
提问于 2025-04-16 16:35

我在使用Google App Engine从Twitter搜索API获取数据时遇到了问题。在个人开发环境中一切正常,我可以顺利获取到想要的JSON数据。但是,一旦代码部署到App Engine上,就出现了HTTP 500错误代码。

我唯一想到的可能原因是开发环境和实际运行的App Engine环境之间有一些根本性的区别我没有注意到,或者是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

1 个回答

1

正如Calvin所说,所有的App Engine应用程序发出的HTTP请求都是从同一组IP地址中发出的,所以问题几乎肯定是因为请求频率限制:

根据这个链接

不过,所有来自同一个IP地址的请求都会受到搜索频率限制的影响。这个搜索频率限制并没有公开,以避免不必要的搜索使用和滥用,但它的限制比REST频率限制要高。我们认为这个搜索频率限制对于大多数应用来说是比较宽松和足够的,很多应用开发者也发现它能满足他们的需求。

他们还特别提到GAE(Google App Engine)不符合白名单的条件:

一个应用程序必须有一个静态IP地址才能符合白名单的条件。这意味着大多数云平台,包括Google App Engine,都无法被列入白名单。

Twitter建议的绕过频率限制的方法是切换到流式API

撰写回答