Redditで個人的に使用するための永続的なアクセストークンを取得することは可能ですか?アプリを使用するのは私だけです。
ユーザーの場合、アクセストークンは1時間後に期限切れになります。
クライアントIDとシークレットに関する以下の情報を使用して、アクセストークンを取得する試みを開始しました。 (MessageBox show "Error 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());
現在、永続的なアクセストークンを取得することはできません。 2つの選択肢があります。
1つ目は、標準のOAuthフローを使用する場合に「更新」トークンをリクエストすることです。これは、コードで「持続」を「永続的」として送信することによって行っています。更新トークンはユーザーの介入なしに、新しい1時間のアクセストークンを自動的に取得するために使用されます。手動による手順は、更新トークンの最初の取得のみです。
2番目の代替方法は、個人用のスクリプトを作成する場合にのみ適用され、password
付与タイプを使用することです。手順については、redditの "OAuth Quick Start" wiki page で詳しく説明していますが、ここで要約します。
https://www.reddit.com/api/v1/access_token
with POSTパラメータgrant_type=password&username=<USERNAME>&password=<PASSWORD>
。クライアントのIDとシークレットをHTTP基本認証として送信します。 <USERNAME>
は、送信するOAuth 2クライアントIDの開発者として登録する必要があります。A client_id
およびclient_secret
は https://www.reddit.com/prefs/apps にアクセスしてアプリを作成することで、redditアカウント用に生成できます。
私が隠した部分は私のclient_id
。
次に、praw
などのクライアントを使用してredditにアクセスできます。 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)
現在のブラウザのユーザーエージェントを使用できます。これは、Googleで「ユーザーエージェントとは」を検索することで簡単に見つけることができます。