2015-03-10 14 views
10

(Reddit API)? Sadece App kullanarak ben olacağım. kullanıcıları içinErişim belirteci nasıl alınır? Ben Reddit üzerinde kişisel kullanım için kalıcı bir erişim jetonu almak mümkün olup olmadığını merak

, erişim belirteci 1 saat sonra sona erer.

Benim benim istemci kimliği ve sırrı hakkında sahip aşağıdaki bilgileri kullanarak, bir erişim belirteci almaya çalışırken bir başlangıç ​​girişimini koydular. (MessageBox " Hata 401")

Bir kullanıcı bir simge alırsa, tarayıcıda "İzin Ver" i tıklamanız gerekir. Burada çok iyi tanımlanmış. https://github.com/reddit/reddit/wiki/OAuth2 Bu, sonra olduğum şey değil. Kişisel kullanım, sadece bir kod aracılığıyla erişim belirtecinin peşindeyim. Mümkün mü?

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

cevap

8

Şu andan itibaren, bir kalıcı erişim belirteci alamıyor. Yaklaşan 2 seçeneğiniz var.

ilk

standart OAuth akışı kullanıldığında bir "yenileme" belirteci talep etmektir. Kodunuzda "süre" olarak "kalıcı" olarak göndererek yaptığınız budur. Yenileme jetonu, kullanıcı müdahalesi olmadan yeni 1 saatlik erişim jetonlarını otomatik olarak almak için kullanılabilir; yalnızca manuel adımlar yenileme ikazının ilk alınışındadır.

kişisel kullanım için senaryo yazarken geçerlidir ikinci alternatif, password hibe türü kullanmaktır. POST grant_type=password&username=<USERNAME>&password=<PASSWORD> parametreleri ile

  • https://www.reddit.com/api/v1/access_token bir istekte bulunun type = "script" ile

    1. (https://www.reddit.com/prefs/apps altında) Bir OAuth istemcisi oluşturun: adımlar reddit en "OAuth Quick Start" wiki page üzerinde daha ayrıntılı olarak anlatılmıştır, ama burada özetlemek . Müşteri kimliğinizi ve sırrınızı HTTP temel kimlik doğrulaması olarak gönderin. <USERNAME>, gönderdiğiniz OAuth 2 istemci kimliğinin geliştiricisi olarak kaydedilmelidir.
  • 1
    A client_id

    ve client_secret bir uygulamayı https://www.reddit.com/prefs/apps gidip oluşturarak reddit hesabı için oluşturulabilir:

    enter image description here

    Ben gizlediğiniz parçası benim client_id olduğunu.

    Sonra reddit, sözgelimi erişmek için praw gibi bir istemci kullanabilirsiniz Python ile:

    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) 
    

    Kolayca (diğer yollarla arasında) "Benim kullanıcı aracısı ne" arama google tarafından bulunabilir mevcut tarayıcılarının kullanıcı ajanı, kullanabilirsiniz.

    İlgili konular