2011-04-28 39 views
4

我在使用Google App Engine從Twitter搜索API獲取數據時遇到問題。在個人發展環境中工作,我沒有任何問題。我能夠獲得我想要的JSON。但是,一旦將代碼部署到App Engine後,我會遇到HTTP 500錯誤代碼。App Engine - 難以訪問Twitter數據 - Flask

我對發生的事情的唯一想法是,我缺少的開發和實時App Engine環境和/或Twitter拒絕來自App Engine IP的請求之間存在一些根本區別我正在運行從。我寫了一個小的@ app.route來絕對驗證是否存在問題 - 下面是。

我很確定我沒有達到費率限制,因爲Twitter搜索API沒有明確的限制。我看到他們要求一個用戶代理,所以我一直在提供,但我仍然得到相同的500錯誤。

什麼我工作的現場版是在這裏:​​

上發生了什麼事情錯在這裏任何想法,將不勝感激。

從瓶

相關章節:

@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 
+0

需要錯誤消息+堆棧跟蹤。 – hyperslug 2011-04-28 13:23:44

+0

所有App Engine請求都來自同一個IP池。可能是因爲Twitter正在從App Engine IP獲取如此多的搜索請求,以至於阻止了進一步的查詢。我相信這在GAE之前就已經發生過。 – Calvin 2011-04-28 16:14:57

+2

相關:http://stackoverflow.com/questions/4821888/app-engine-alternatives-to-urlfetch-seems-very-unreliable和http://stackoverflow.com/questions/4722315/cron-works-on-local -host-but-not-when-deployed-appengine – systempuntoout 2011-04-29 07:49:05

回答

1

加爾文指出,所有App Engine應用從IP地址的同一池中源出站HTTP請求,所以這個問題是幾乎可以肯定的速率限制:

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

然而, 所有請求來自何處IP地址 應用於搜索速率限制。 搜索速度限制不是 公開阻止不必要的 搜索使用情況和濫用,但它是 高於REST速率限制。我們 覺得搜索速率限制是 自由和充分的大多數 應用程序,並知道很多 應用程序供應商已發現它適合他們的需求 。

他們還叫了GAE專門爲沒有資格獲得白名單:

應用程序必須有一個靜態IP纔有資格獲得白名單。這意味着大多數雲平臺(包括Google App Engine)都不能列入白名單。

Twitter的建議是解決限速問題是切換到the Streaming API

+1

我關注 - 但是,在谷歌應用引擎上,流API不太合適,因爲谷歌超時打開連接。 – 2011-04-29 00:09:25