Как получить токен доступа? (Reddit API)

Интересно, можно ли получить токен постоянного доступа для личного использования в Reddit? Это будет только я, используя приложение.

Для пользователей токен доступа истекает через 1 час.

Мое использование приведенной ниже информации о моем идентификаторе клиента и секретности, я поставил попытку начать попытки получить токен доступа. (MessageBox show " Ошибка 401" )

Если пользователь получит токен, нужно нажать "Разрешить" в браузере. Очень хорошо описано здесь. https://github.com/reddit/reddit/wiki/OAuth2 Это НЕ то, что я хочу. Я за то, для личного использования, токен доступа только через код. Возможно ли это?

            String requestUrl = "https://ssl.reddit.com/api/v1/access_token";

        RestSharp.RestClient rc = new RestSharp.RestClient();
        RestSharp.RestRequest request = new RestSharp.RestRequest(requestUrl, RestSharp.Method.POST);
        request.AddHeader("Content-Type", "application/json");
        //request.AddHeader("Authorization", ""); //???
        request.AddHeader("x-li-format", "json");

        request.AddParameter("client_id", "abcdefg");
        request.AddParameter("client_secret", "abc123-456");
        request.AddParameter("grant_type", "abc123-456");
        request.AddParameter("scope", "identity");
        request.AddParameter("state", "adhasegw"); //whatever value
        request.AddParameter("duration", "permanent");
        request.AddParameter("redirect_uri", "http://mywebsite.co");

        request.RequestFormat = RestSharp.DataFormat.Json;

        RestSharp.RestResponse restResponse = (RestSharp.RestResponse)rc.Execute(request);
        RestSharp.ResponseStatus responseStatus = restResponse.ResponseStatus;



        MessageBox.Show(restResponse.Content.ToString() + "," + responseStatus.ToString());

Ответ 1

Как сейчас, вы не можете получить токен постоянного доступа. У вас есть два варианта, которые приближаются.

Во-первых, необходимо запросить токен "обновления" при использовании стандартного потока OAuth. Это то, что вы делаете, отправив "длительность" как "постоянную" в свой код. Маркер обновления может использоваться для автоматического получения новых токенов доступа в час без вмешательства пользователя; только ручные шаги при первоначальном извлечении токена обновления.

Второй вариант, который применяется только при написании script для личного использования, заключается в использовании типа гранта password. Шаги описаны более подробно на странице wdwd reddit "OAuth Quick Start" , но я опишу здесь:

  • Создайте клиент OAuth (под https://www.reddit.com/prefs/apps) с типом = "script"
  • Сделайте запрос https://www.reddit.com/api/v1/access_token с параметрами POST grant_type=password&username=<USERNAME>&password=<PASSWORD>. Отправляйте свой идентификатор клиента и секрет в качестве базовой проверки подлинности HTTP. <USERNAME> должен быть зарегистрирован как разработчик идентификатора клиента OAuth 2, который вы отправляете.

Ответ 2

A client_id и client_secret могут быть сгенерированы для учетной записи reddit, перейдя в https://www.reddit.com/prefs/apps и создав приложение:

введите описание изображения здесь

Часть, которую я скрыл, это my client_id.

Затем вы можете использовать клиента типа praw для доступа к reddit, например. с Python:

import praw
r = praw.Reddit(client_id='insert id here',
                client_secret='insert secret here',
                user_agent='insert user agent')
page = r.subreddit('aww')
top_posts = page.hot(limit=None)
for post in top_posts:
    print(post.title, post.ups)

Вы можете использовать свой текущий пользовательский агент браузера, который может быть легко найден путем поиска в Google "что такое мой пользовательский агент" (среди прочего).