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 の提案は、ストリーミング APIに切り替えることです。

于 2011-04-28T18:15:54.727 に答える