web-dev-qa-db-fra.com

Comment obtenir un jeton d'accès? (API Reddit)

Je me demande s'il est possible d'obtenir un jeton d'accès permanent pour un usage personnel sur Reddit? Ce ne sera que moi qui utiliserai l'application.

Pour les utilisateurs, le jeton d'accès expire après 1 heure.

En utilisant les informations ci-dessous que j'ai sur mon identifiant client et mon secret, j'ai mis en place une tentative de démarrage pour essayer d'obtenir un jeton d'accès. (MessageBox affiche " Erreur 401 ")

Si un utilisateur obtient un jeton, il faut cliquer sur "Autoriser" dans le navigateur. Très bien décrit ici. https://github.com/reddit/reddit/wiki/OAuth2 Ce n'est PAS ce que je recherche. Je suis à la recherche, pour un usage personnel, d'un jeton d'accès uniquement via du code. Est-ce possible?

            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());
17
Andreas

Pour l'instant, vous ne pouvez pas récupérer de jeton d'accès permanent. Vous avez 2 options qui se rapprochent.

La première consiste à demander un jeton "d'actualisation" lors de l'utilisation du flux standard OAuth. C'est ce que vous faites en envoyant "duration" comme "permanent" dans votre code. Le jeton d'actualisation peut être utilisé pour récupérer automatiquement de nouveaux jetons d'accès d'une heure sans intervention de l'utilisateur; les seules étapes manuelles sont lors de la récupération initiale du jeton d'actualisation.

La deuxième alternative, qui s'applique uniquement lors de l'écriture d'un script pour un usage personnel, consiste à utiliser le type de subvention password. Les étapes sont décrites plus en détail sur la page wiki de Reddit "OAuth Quick Start" , mais je vais résumer ici:

  1. Créez un client OAuth (sous https://www.reddit.com/prefs/apps ) avec type = "script"
  2. Faites une demande à https://www.reddit.com/api/v1/access_token avec POST grant_type=password&username=<USERNAME>&password=<PASSWORD>. Envoyez votre ID client et votre secret en tant qu'authentification HTTP de base. <USERNAME> doit être enregistré en tant que développeur de l'ID client OAuth 2 que vous envoyez.
16
kemitche

UNE client_id et client_secret peut être généré pour un compte reddit en accédant à https://www.reddit.com/prefs/apps et en créant une application:


screenshot reddit.com/prefs/apps

La partie que j'ai cachée est mon client_id.

Ensuite, vous pouvez utiliser un client comme praw pour accéder à reddit, par exemple avec 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)

Vous pouvez utiliser l'agent utilisateur de votre navigateur actuel, qui peut être facilement trouvé en recherchant sur Google "quel est mon agent utilisateur" (entre autres).

8
AlexG