2015-03-10 27 views
10

Tôi tự hỏi liệu có thể nhận được mã thông báo truy cập vĩnh viễn để sử dụng cá nhân trên Reddit không? Nó sẽ chỉ là tôi sử dụng ứng dụng.Cách nhận mã thông báo truy cập? (Reddit API)

Đối với người dùng, mã thông báo truy cập sẽ hết hạn sau 1 giờ.

tôi sử dụng thông tin dưới đây mà tôi có về tôi client-id và bí mật, tôi đưa ra một nỗ lực bắt đầu cố gắng để có được một thẻ truy cập. (MessageBox hiển thị "Lỗi 401")

Nếu người dùng nhận mã thông báo, người dùng phải nhấp "Cho phép" trong trình duyệt. Rất được mô tả ở đây. https://github.com/reddit/reddit/wiki/OAuth2 Điều này KHÔNG PHẢI là những gì tôi đang làm. Tôi sau khi cho, sử dụng cá nhân, một mã thông báo truy cập chỉ thông qua mã. Điều này có thể không?

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

Trả lời

8

Hiện tại, bạn không thể truy xuất mã thông báo truy cập vĩnh viễn. Bạn có 2 tùy chọn đến gần.

Đầu tiên là để yêu cầu "làm mới" token khi sử dụng dòng chảy OAuth chuẩn. Đó là những gì bạn đang làm bằng cách gửi "thời lượng" dưới dạng "vĩnh viễn" trong mã của bạn. Mã thông báo làm mới có thể được sử dụng để tự động truy xuất mã thông báo truy cập 1 giờ mới mà không cần sự can thiệp của người dùng; các bước thủ công chỉ có trên truy xuất ban đầu của mã thông báo làm mới.

Cách thứ hai, chỉ áp dụng khi viết tập lệnh cho mục đích sử dụng cá nhân, là sử dụng loại tài trợ password. Các bước được mô tả chi tiết trên reddit của "OAuth Quick Start" wiki page, nhưng tôi sẽ tóm tắt ở đây:

  1. Tạo một ứng dụng OAuth (dưới https://www.reddit.com/prefs/apps) với type = "kịch bản"
  2. Hãy yêu cầu https://www.reddit.com/api/v1/access_token với POST thông số grant_type=password&username=<USERNAME>&password=<PASSWORD> . Gửi ID khách hàng của bạn và bí mật dưới dạng xác thực cơ sở HTTP. <USERNAME> phải được đăng ký làm nhà phát triển ID khách hàng OAuth 2 mà bạn gửi.
1

Một client_idclient_secret có thể được tạo ra cho một tài khoản reddit bằng cách vào https://www.reddit.com/prefs/apps và tạo ra một ứng dụng:

enter image description here

Phần Tôi đã giấu là client_id tôi.

Sau đó, bạn có thể sử dụng ứng dụng khách như praw để truy cập reddit, ví dụ: với 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) 

Bạn có thể dễ dàng tìm thấy tác nhân người dùng của trình duyệt hiện tại, tìm kiếm "đại lý người dùng của tôi" (bằng nhiều cách khác).

Các vấn đề liên quan