アプリエンジン - Twitterデータへのアクセスの難しさ-Flask
-
26-10-2019 - |
質問
Google App EngineでTwitter Search APIからデータを取得するのに問題があります。個人的な開発環境で働くことは問題ありません。私は欲しいJSONを手に入れることができます。ただし、コードがApp Engineに展開されると、HTTP 500エラーコードに遭遇します。
何が起こっているのかについて私が持っている唯一のアイデアは、私が欠けている開発者とライブアプリエンジン環境の間にいくつかの根本的な違いがあること、および/またはTwitterが私が実行しているアプリエンジン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"}
私のフラスコ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が示したように、すべてのアプリエンジンアプリは、同じIPSのプールからのアウトバウンドHTTP要求をソースしているため、問題はほぼ確実にレートの制限です。
から http://dev.twitter.com/pages/rate-limiting:
ただし、IPアドレスからのすべてのリクエストは、検索レート制限に適用されます。検索率の制限は、不必要な検索の使用と悪用を阻止するために公開されていませんが、残りのレート制限よりも高くなっています。検索率の制限はリベラルであり、ほとんどのアプリケーションにとって十分であり、多くのアプリケーションベンダーがニーズに適していることを知っていると考えています。
彼らはまた、特にホワイトリストの資格がないと特にGAEを呼び出します。
アプリケーションには、ホワイトリストの資格があるために静的IPが必要です。これは、Google App Engineを含むクラウドプラットフォームの大部分がホワイトリストに載ることができないことを意味します。
レート制限を回避するためのTwitterの提案は、 ストリーミングAPI.