我正在尝试使用他们的API和Python的urllib2从Reddit中删除新故事,但我一直在获取像这样的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中的example page。
这是什么交易?
编辑尝试在另一个浏览器中加载示例页面后,我也看到了我在页面顶部发布的JSON。它似乎只适用于//new.json。如果我尝试//hot.json或只是/.json,我得到我想要的东西。
答案 0 :(得分:3)
修改:截至2013/02/22,所需的new
排序不再需要sort=new
作为网址参数添加。这是因为rising
路径下不再提供/new
排序,而是由/rising
[source]提供。
网址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(python 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()
部分。
答案 1 :(得分:0)
我在类似的(与OP不同)问题上被困了一段时间 - 在API响应中没有children
。我想我会发布这个,以防其他人通过搜索引擎回答这个问题:
如果我在浏览器中打开此网址:
https://www.reddit.com/comments.json?limit=100
它似乎工作正常,但当我发送请求时,它不返回任何孩子。尝试使用请求的用户代理和类似的东西无济于事。最后使用/r/all
评论流结束:
https://www.reddit.com/r/all/comments.json?limit=100
通过程序化请求在浏览器和中正常工作。仍然不知道为什么第一个网址不起作用。
答案 2 :(得分:-1)
http://www.reddit.com/r/all.json?limit=100会返回有意义的数据
http://reddit.com/r/all/new?limit=100(没有.json)说没有物品......
看起来reddit没有使用/ new你认为它怎么做所以问题在于你使用api。
如果此答案不充分,请附上reddit api文档的链接。
另外,这里有一个关于REST的快速说明。看起来reddit是RESTful(我有待纠正,但这就是我在这里的实验告诉我的......)。这意味着通过在您尝试访问的任何URL上删除.json扩展名,应该为您提供相同数据的人性化版本。这在测试期间可能很有用。只需用浏览器查看内容,您就会看到reddit认为您要求的信息。