Как получить токен доступа? (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 "что такое мой пользовательский агент" (среди прочего).