web-dev-qa-db-ja.com

アクセストークンを取得する方法は? (Reddit API)

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

現在、永続的なアクセストークンを取得することはできません。 2つの選択肢があります。

1つ目は、標準のOAuthフローを使用する場合に「更新」トークンをリクエストすることです。これは、コードで「持続」を「永続的」として送信することによって行っています。更新トークンはユーザーの介入なしに、新しい1時間のアクセストークンを自動的に取得するために使用されます。手動による手順は、更新トークンの最初の取得のみです。

2番目の代替方法は、個人用のスクリプトを作成する場合にのみ適用され、password付与タイプを使用することです。手順については、redditの "OAuth Quick Start" wiki page で詳しく説明していますが、ここで要約します。

  1. OAuthクライアント( https://www.reddit.com/prefs/apps の下)をtype = "script"で作成します
  2. https://www.reddit.com/api/v1/access_token with POSTパラメータgrant_type=password&username=<USERNAME>&password=<PASSWORD>。クライアントのIDとシークレットをHTTP基本認証として送信します。 <USERNAME>は、送信するOAuth 2クライアントIDの開発者として登録する必要があります。
16
kemitche

A client_idおよびclient_secrethttps://www.reddit.com/prefs/apps にアクセスしてアプリを作成することで、redditアカウント用に生成できます。


screenshot reddit.com/prefs/apps

私が隠した部分は私の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で「ユーザーエージェントとは」を検索することで簡単に見つけることができます。

8
AlexG