Reddit API возвращает бесполезный JSON

Я пытаюсь очистить новые истории от Reddit, используя их API и python urllib2, но я продолжаю получать документы JSON, подобные этому:

{ u'kind': u'Listing', u'data': { u'modhash': u'', u'children': [], u'after': None, u'before': None }} 

Вот мой код:

 import json import time import urllib2 def get_submissions(after=None): url = 'http://reddit.com/r/all/new.json?limit=100' if after: url += '&after=%s' % after _user_agent = 'Reddit Link Analysis Bot by PirateLogic @ github.com/jamesbrewer' _request = urllib2.Request(url, headers={'User-agent': _user_agent}) _json = json.loads(urllib2.urlopen(_request).read()) return [story for story in _json['data']['children']], _json['data']['after'] if __name__ == '__main__': after = None stories = [] limit = 1 while len(stories) < limit: new_stories, after = get_submissions(after) stories.extend(new_stories) time.sleep(2) # The Reddit API allows one request every two seconds. print '%d stories collected so far .. sleeping for two seconds.' % len(stories) 

То, что я написал, довольно короткое и прямолинейное, но я, очевидно, что-то пропускаю, или у меня нет полного понимания API или того, как работает urllib2.

Вот пример страницы из API.

В чем дело?

EDIT После попытки загрузить страницу примера в другом браузере, я также вижу JSON, который я разместил в верхней части страницы. Похоже, что только для //new.json. Если я попробую //hot.json или просто /.json, я получаю то, что хочу.

2 Solutions collect form web for “Reddit API возвращает бесполезный JSON”

Изменить : по состоянию на 2013/02/22 нужный new вид больше не требует добавления sort=new в качестве параметра URL. Это связано с тем, что rising сорт больше не предоставляется по /new маршруту, но обеспечивается /rising [ источником ].


Проблема с URL http://reddit.com/r/all/new.json?limit=100 заключается в том, что new страницы по умолчанию используют rising сортировку. Если вы вошли в систему, и вы изменили сортировку по умолчанию на new то то, что вы действительно видите, является результатом для страницы http://reddit.com/r/all/new.json?limit=100&sort=new . Обратите внимание на добавление параметра sort=new .

Таким образом, результат верен, просто восходящий взгляд не обновлялся для / r / all.

В связи с этим я настоятельно рекомендую использовать PRAW (оболочку API reddit API) вместо написания собственного кода, если вы планируете использовать не только одну часть API. Вот соответствующий код, который вы хотите:

 import praw r = praw.Reddit('YOUR DESCRIPTIVE USER AGENT NAME') listing = list(r.get_subreddit('all').get_new_by_date()) print listing 

Если вы просто хотите перебирать материалы, вы можете опустить часть list() .

http://www.reddit.com/r/all.json?limit=100 возвращает значимые данные

http://reddit.com/r/all/new?limit=100 (no .json) говорит, что нет предметов …

Похоже, что reddit не использует / new, как вы думаете, что это так, проблема в использовании api.

Если этого ответа недостаточно, добавьте ссылку на reddit api docs.

Кроме того, вот краткая заметка о REST. Похоже, reddit – RESTful (я должен быть исправлен, но это то, что рассказывают мне мои эксперименты …). Это означает, что, отбросив расширение .json на любой из URL-адресов, которые вы пытаетесь получить, должны предоставить вам версии, совместимые с человеком, с теми же данными. Это может быть полезно при тестировании. Просто взгляните на вещи в своем браузере, и вы увидите, какую информацию reddit думает, о чем вы просите.

  • Как сделать метод HTTP DELETE с помощью urllib2?
  • Запрос SOAP Python с использованием urllib2
  • Необходимо установить urllib2 для Python 3.5.1
  • как проверить, соответствует ли urllib2 перенаправлению?
  • Открытие локального файла Работает с urllib, но не с urllib2
  • Как скачать изображение с помощью запросов
  • Python скачать файл
  • Python и urllib
  • Python - лучший язык программирования в мире.