我正在尝试访问用户保存的数据。它不断返回一个 403 错误,这是它的 api 端点。
http://www.reddit.com/dev/api#GET_user_ {用户名}_saved
我非常困惑在我的标头中发送什么来使这个请求工作并且reddit文档根本没有提到它。帮助?
我正在使用 Python-requests 库来执行此操作。
我正在尝试访问用户保存的数据。它不断返回一个 403 错误,这是它的 api 端点。
http://www.reddit.com/dev/api#GET_user_ {用户名}_saved
我非常困惑在我的标头中发送什么来使这个请求工作并且reddit文档根本没有提到它。帮助?
我正在使用 Python-requests 库来执行此操作。
参考listingcontroller.py
(此处)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
管理员身份登录才能获取saved
或hidden
数据 - 否则您将获得403 error
.
正如@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>)