2015-03-10 17 views
10

Mi chiedo se è possibile ottenere un token di accesso permanente per uso personale su Reddit? Sarò solo io a usare l'app.Come ottenere il token di accesso? (API Reddit)

Per gli utenti, il token di accesso scade dopo 1 ora.

Utilizzando le seguenti informazioni sul mio ID cliente e segreto, ho avviato un tentativo di tentativo di ottenere un token di accesso. (MessageBox mostra "Errore 401")

Se un utente riceve un token, è necessario fare clic su "Consenti" nel browser. Molto ben descritto qui. https://github.com/reddit/reddit/wiki/OAuth2 Questo NON è quello che sto dopo. Sto cercando, per uso personale, un token di accesso solo attraverso il codice. È possibile?

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

risposta

8

A partire da ora, non è possibile recuperare un token di accesso permanente. Hai 2 opzioni che si avvicinano.

Il primo è richiedere un token di "aggiornamento" quando si utilizza il flusso OAuth standard. Questo è quello che stai facendo inviando "durata" come "permanente" nel tuo codice. Il token di aggiornamento può essere utilizzato per recuperare automaticamente nuovi token di accesso di 1 ora senza l'intervento dell'utente; le uniche operazioni manuali sono sul recupero iniziale del token di aggiornamento.

La seconda alternativa, che si applica solo quando si scrive uno script per uso personale, consiste nell'utilizzare il tipo di sovvenzione password. I passaggi sono descritti in modo più dettagliato su reddit di "OAuth Quick Start" wiki page, ma cercherò di riassumere qui:

  1. Creare un client OAuth (sotto https://www.reddit.com/prefs/apps) con type = "script"
  2. fare una richiesta al https://www.reddit.com/api/v1/access_token con POST parametri grant_type=password&username=<USERNAME>&password=<PASSWORD> . Invia il tuo ID cliente e segreto come autenticazione di base HTTP. <USERNAME> deve essere registrato come sviluppatore dell'ID client OAuth 2 inviato.
1

A client_id e client_secret possono essere generati per avere un account reddit andando a https://www.reddit.com/prefs/apps e la creazione di un app:

enter image description here

La parte che ho nascosto è il mio client_id.

Quindi è possibile utilizzare un client come praw per accedere a reddit, ad es. con 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) 

Si potrebbe utilizzare user agent del browser corrente, che può essere facilmente trovato da google cercando "qual è il mio user agent" (tra gli altri modi).

Problemi correlati