2015-03-10 11 views
10

मुझे आश्चर्य है कि अगर यह Reddit पर निजी इस्तेमाल के लिए एक स्थायी पहुंच टोकन प्राप्त करने के लिए संभव है? यह केवल मुझे App का उपयोग किया जाएगा।एक्सेस टोकन कैसे प्राप्त करें? (रेडिट एपीआई)

उपयोगकर्ताओं के लिए, पहुँच टोकन 1 घंटे की होती है।

मेरे नीचे दी गई जानकारी मैं अपने ग्राहक-आईडी और रहस्य के बारे में है का उपयोग करते हुए, मैं पहुंच टोकन प्राप्त करने की कोशिश की एक शुरुआत के प्रयास डाल दिया। (संदेशबॉक्स शो "त्रुटि 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()); 

उत्तर

8

अभी तक, आप स्थायी पहुंच टोकन पुनर्प्राप्त नहीं कर सकते हैं। आपके पास 2 विकल्प हैं जो करीब आते हैं।

पहले जब मानक OAuth प्रवाह का उपयोग एक "ताज़ा" टोकन का अनुरोध करने के लिए है। "कोड" को आपके कोड में "स्थायी" के रूप में भेजकर आप यही कर रहे हैं। ताज़ा टोकन स्वचालित रूप से उपयोगकर्ता के हस्तक्षेप के बिना नई 1 घंटे पहुंच टोकन को पुनः प्राप्त करने के लिए इस्तेमाल किया जा सकता है; रीफ्रेश टोकन की प्रारंभिक पुनर्प्राप्ति पर एकमात्र मैन्युअल चरण हैं।

दूसरा विकल्प, केवल लागू होता है जब निजी इस्तेमाल के लिए एक स्क्रिप्ट लिखने, password अनुदान प्रकार का उपयोग करने के लिए है। साथ type = "स्क्रिप्ट"

  1. (https://www.reddit.com/prefs/apps से कम) एक OAuth क्लाइंट बनाएं
  2. https://www.reddit.com/api/v1/access_token करने के लिए एक अनुरोध करें पोस्ट पैरामीटर grant_type=password&username=<USERNAME>&password=<PASSWORD> साथ: चरणों reddit के "OAuth Quick Start" wiki page के बारे में अधिक विस्तार से वर्णन किया जाता है, लेकिन मैं यहाँ संक्षेप में प्रस्तुत करेंगे । अपने ग्राहक आईडी और HTTP बुनियादी प्रमाणीकरण के रूप में गुप्त भेजें। <USERNAME> OAuth 2 ग्राहक आईडी आप भेजने के एक डेवलपर के रूप में पंजीकृत होना चाहिए।
1

एक client_id और client_secrethttps://www.reddit.com/prefs/apps के लिए जा रहा है और किसी ऐप बनाने के द्वारा एक reddit खाते के लिए उत्पन्न किया जा सकता:

enter image description here

हिस्सा मैं छिपा हुआ है मेरी client_id है।

तो फिर तुम reddit उदा का उपयोग करने की praw की तरह एक ग्राहक का उपयोग कर सकते अजगर के साथ:

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) 

आप अपने मौजूदा ब्राउज़र की उपयोगकर्ता एजेंट, आसानी से गूगल द्वारा पाया जा सकता है खोज (अन्य तरीकों के अलावा) "मेरे उपयोगकर्ता एजेंट है क्या" इस्तेमाल कर सकते हैं।

संबंधित मुद्दे