Ошибка 429 при вызове Reddit api из Google App Engine

Я работаю над работой cron в Google App Engine уже более месяца без каких-либо проблем. Работа делает множество вещей, одна из которых заключается в том, что она использует urllib2 для вызова вызова json от Reddit, а также нескольких других сайтов. Около двух недель назад я начал видеть ошибки при вызове Reddit, но никаких ошибок при вызове других сайтов. Ошибка, которую я получаю, – ошибка HTTP 429.

Я попытался выполнить тот же код вне Google App Engine и не имею никаких проблем. Я попытался использовать urlFetch, но получил ту же ошибку.

Вы можете увидеть ошибку при использовании интерактивной оболочки движка приложения со следующим кодом.

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, я не уверен. Есть идеи?

Reddit rate ограничивает api довольно сильно для пользовательского агента по умолчанию для оболочки python. Вам необходимо установить уникальный пользовательский агент с вашим именем пользователя reddit, например:

User-Agent: супер-счастливый бот от / u / spladug

Подробнее о reddit api здесь https://github.com/reddit/reddit/wiki/API .