调用Reddit API时出错403。

时间:2013-07-06 14:22:13

标签: python reddit

我正在尝试访问用户保存的数据。并且它继续返回403错误,这是它的api终点。

http://www.reddit.com/dev/api#GET_user_ {用户名} _saved

我完全混淆了在我的标题中发送什么来使这个请求工作,而reddit文档根本没有提到它。帮助

我正在使用Python请求库来执行此操作。

2 个答案:

答案 0 :(得分:1)

参考listingcontroller.pyhere)中reddit代码中的第686行:

    if (where in ('saved', 'hidden') and not 
        ((c.user_is_loggedin and c.user._id == vuser._id) or
          c.user_is_admin)):
        return self.abort403()

您可以清楚地看到,您必须以username身份登录或成为管理员才能获取savedhidden数据 - 否则您将获得403 error

答案 1 :(得分:0)

正如@zenpoy已经提到的(以及您已经知道的),您必须登录。因此,您应该保存cookie,作为对api/login的有效调用的响应。我编写了一些代码,用于记录用户并检索所有已保存的内容:

import urllib
import urllib2
import cookielib
import json

login_url = 'https://ssl.reddit.com/api/login/'
saved_url = 'https://ssl.reddit.com/user/<username>/saved.json'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))


def login(username, passwd):
    values = {'user': username,
              'api_type': 'json',
              'passwd': passwd}

    data = urllib.urlencode(values)
    response = opener.open(login_url, data).read()

    print json.loads(response)


def retrieve_saved(username):
    url = saved_url.replace('<username>', username)
    response = opener.open(url).read()

    print json.loads(response)


login(<username>, <passwd>)
retrieve_saved(<username>)