2015-03-10 12 views
10

Ich frage mich, ob es möglich ist, einen permanenten Zugriffstoken für den persönlichen Gebrauch auf Reddit zu bekommen? Es wird nur ich mit der App sein.Wie bekomme ich Zugangstoken? (Reddit API)

Für Benutzer läuft das Zugriffstoken nach 1 Stunde ab.

Meine mit den folgenden Informationen, die ich über meine Client-ID und das Geheimnis habe, habe ich einen Startversuch unternommen, um ein Zugriffs-Token zu erhalten. (MessageBox show "Fehler 401")

Wenn ein Benutzer ein Token erhält, müssen Sie im Browser auf "Zulassen" klicken. Sehr gut hier beschrieben. https://github.com/reddit/reddit/wiki/OAuth2 Das ist es NICHT, wonach ich bin. Ich bin für, persönlichen Gebrauch, ein Zugangs-Token nur durch Code. Ist das möglich?

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

Antwort

8

Ab sofort können Sie kein permanentes Zugriffstoken abrufen. Sie haben 2 Optionen, die Ihnen nahe kommen.

Die erste besteht darin, ein "Refresh" -Token anzufordern, wenn der standardmäßige OAuth-Fluss verwendet wird. Das tun Sie, indem Sie in Ihrem Code "duration" als "permanent" senden. Das Aktualisierungstoken kann verwendet werden, um neue 1-Stunden-Zugangstoken ohne Benutzereingriff automatisch abzurufen; Die einzigen manuellen Schritte sind beim ersten Abrufen des Aktualisierungstokens.

Die zweite Alternative, die nur beim Schreiben eines Skripts für den persönlichen Gebrauch gilt, besteht darin, den Erteilungsschlüssel password zu verwenden. Die Schritte werden im Detail auf reddit des beschriebenen "OAuth Quick Start" wiki page, aber ich werde hier zusammenfassen:

  1. ein OAuth-Client erstellen (unter https://www.reddit.com/prefs/apps) mit type = "script"
  2. eine Anfrage an https://www.reddit.com/api/v1/access_token Stellen mit POST-Parameter grant_type=password&username=<USERNAME>&password=<PASSWORD> . Senden Sie Ihre Client-ID und Ihren geheimen Schlüssel als HTTP-Basisauthentifizierung. <USERNAME> muss als Entwickler der OAuth 2-Client-ID registriert sein, die Sie senden.
1

A client_id und client_secret können, indem Sie auf https://www.reddit.com/prefs/apps und die Schaffung einer App für ein reddit Konto generiert werden:

enter image description here

Der Teil I versteckt habe meine client_id ist.

Dann können Sie einen Client wie praw verwenden, um reddit z. mit 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) 

Sie könnten Ihren aktuellen Browser-User-Agent verwenden, die sich leicht durch eine Google-Suche „was Agent mein Benutzer“ (unter anderem) zu finden sind.

Verwandte Themen