2013-07-06 2 views
2

Я пытаюсь получить доступ к данным, сохраненным пользователем. И он продолжает возвращать ошибку 403, поскольку это ее конечная точка api.403 ошибка при вызове Reddit API.

http://www.reddit.com/dev/api#GET_user_ {имя пользователя} _SAVED

Я тщательно запутался, что отправить в мои заголовки, чтобы сделать этот запрос работы и документация Reddit не имеет никакого упоминания о нем вообще. Помогите?

Я использую библиотеку запросов Python для этого.

+0

И отправляет ли сообщение об ошибке в тело? – Guillaume

+0

Ничего. Он просто отправляет ошибку: 403 – Hick

+0

Попробуйте сами: http://www.reddit.com/user/{username}/saved/.json Он дает тот же ответ. – Hick

ответ

0

Ссылаясь на линию 686 в коде Reddit в listingcontroller.py (here):

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.

+0

Но это вызов API. Я получаю часть входа в систему, но почему я не могу отправить имя пользователя/пароль/что-либо еще в параметрах и получить доступ к данным api? Если нет, тогда как это вызов API? – Hick

+0

Да. это также код для вызовов api, только добавьте '.json' или' .xml' в конец ... – zenpoy

+0

Да, я получил эту часть. Но я смущен тем, что параметры должны быть для api reddit, чтобы считать, что я вошел в систему. Какие заголовки/параметры он хочет вместе с запросом? – Hick

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>) 
Смежные вопросы