2012-01-22 6 views
8

Google App Engineでcronジョブを1ヶ月以上問題なく実行しています。この仕事はさまざまなことを行います.1つは、urllib2を使ってRedditからのjsonレスポンスを取得する呼び出しを行う方法と、他のいくつかのサイトです。約2週間前、私はRedditを呼び出すときにエラーを見始めましたが、他のサイトを呼び出すときにエラーはありませんでした。私が受け取っているエラーはHTTPエラー429です。Google App EngineからReddit APIを呼び出すときのエラー429

Google App Engine以外で同じコードを実行しようとしましたが、問題はありません。私はurlFetchを使ってみましたが、同じエラーを受け取ります。

engine's interactive shellアプリを使用すると、次のコードでエラーが表示されます。

import urllib2 
data = urllib2.urlopen('http://www.reddit.com/r/Music/.json', timeout=60) 

編集:それがいつも私にとっては失敗し、誰かではないのか分かりません。これは私が受け取るエラーです:

>>> import urllib2 
>>> data = urllib2.urlopen('http://www.reddit.com/r/Music/.json', timeout=60) 
Traceback (most recent call last): 
    File "/base/data/home/apps/s~shell-27/1.356011914885973647/shell.py", line 267, in get 
    exec compiled in statement_module.__dict__ 
    File "<string>", line 1, in <module> 
    File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 126, in urlopen 
    return _opener.open(url, data, timeout) 
    File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 400, in open 
    response = meth(req, response) 
    File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 513, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 438, in error 
    return self._call_chain(*args) 
    File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 372, in _call_chain 
    result = func(*args) 
    File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 521, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
HTTPError: HTTP Error 429: Unknown 

問題なくアプリエンジンの外で実行されている同様のコード:

print urllib2.urlopen('http://www.reddit.com/r/Music/.json').read() 

最初は、私はそれが最初に働いていたので、それがタイムアウトの問題としなければならなかったと思いましたしかし、タイムアウトエラーではなく奇妙なHttpErrorコードがあるので、わかりません。 アイデア

+0

あなたが提供したインタラクティブシェルとコードを使用すると、私にとっては効果的です。 – cheeken

+6

これは、リクエストが多すぎるということです。プログラマとしては何もできません。これらのエラーを回避するには、一般にリクエスト間にスリープ状態を設定します。 http://tools.ietf.org/html/draft-nottingham-http-new-status-02#page-4 –

+0

@ user947240:shadyabhiさんのアドバイスに従ってください。 – RanRag

答えて

13

Redditレートは、Pythonシェルのデフォルトのユーザーエージェントではかなり厳しく制限されています。

のUser-Agent:あなたはこのように、それにあなたのredditのユーザー名を持つユニークなユーザーエージェントを設定する必要があり、ここでのreddit APIについて/ U/spladug

詳細情報によって、超ハッピーな雰囲気ボットhttps://github.com/reddit/reddit/wiki/API

+0

これが受け入れられる回答である必要があります。"Python/urllib"や "Java"などの多くのデフォルトのUser-Agentsは、ユニークでわかりやすいユーザエージェント文字列を奨励するために大幅に制限されています。 – yiati

0

RedditがIPに基づいてコールをカウントしている可能性があります。つまり、IPを共有しているGAEの他のアプリケーションがすでに割り当てを使い果たしている可能性があります。

Reddit APIキーを使用している(わからない)、またはアプリのヘッダーに基づいてAPI呼び出しを制限することに同意すると、これは改善される可能性があります。

+0

Sudhir、これはちょうど投機です。 – Jason

+1

うん...そうだった。私は答えが確実であるとは思わない。 –

関連する問題