web-dev-qa-db-ja.com

Instagramアクセストークンを取得する方法

Instagramのアクセストークンを取得する方法に本当に苦労しています。

新しいクライアントを登録し、このURLを使用しました

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

クライアントIDを入力してURLをリダイレクトします。

次に、URLにコードを表示するページにリダイレクトされましたが、そこからidがアクセストークンを取得する手掛かりがありません。

71
Gerry Mckay

公式APIドキュメントへのリンクは http://instagram.com/developer/authentication/ です

短編小説-2つのステップ:

コードを取得

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code からの情報で http://instagram.com/developer/clients/manage /

アクセストークンを取得

curl \-F 'client_id=CLIENT-ID' \
    -F 'client_secret=CLIENT-SECRET' \
    -F 'grant_type=authorization_code' \
    -F 'redirect_uri=YOUR-REDIRECT-URI' \
    -F 'code=CODE' \
    https://api.instagram.com/oauth/access_token
44
Marek Jalovec

これまでに投稿されたほぼすべての返信は、Instagramのクライアント側の「暗黙的な認証」手順に従って、フロントエンドでアクセストークンを処理する方法のみを扱っています。 InstagramのAPIドキュメントによると、この方法は安全性が低く推奨されません。

サーバーを使用していると仮定すると、Instagramのドキュメントはトークンのコード交換に関する明確な答えを提供できません。cURLリクエストの例を示しているだけです。基本的に、提供されたコードとアプリのすべての情報を使用してサーバーにPOST要求を行う必要があり、ユーザー情報とトークンを含むユーザーオブジェクトを返します。

あなたが書いている言語がわかりませんが、Node.jsで here を見つけることができるrequest npmモジュールでこれを解決しました。

私はURLを解析し、この情報を使用して投稿リクエストを送信しました

var code = req.url.split('code=')[1];

request.post(
  { form: { client_id: configAuth.instagramAuth.clientID,
            client_secret: configAuth.instagramAuth.clientSecret,
            grant_type: 'authorization_code',
            redirect_uri: configAuth.instagramAuth.callbackURL,
            code: code
          },
    url: 'https://api.instagram.com/oauth/access_token'
  },
  function (err, response, body) {
    if (err) {
      console.log("error in Post", err)
    }else{
      console.log(JSON.parse(body))
    }
  }
);

もちろん、configAuthのものをあなた自身の情報で置き換えてください。 Node.jsを使用していない可能性がありますが、このソリューションが、使用している言語に合わせて独自のソリューションを翻訳するのに役立つことを願っています。

12
Quest

前と同じ問題が発生しましたが、URLをこれに変更します
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

9
Andre

Instagram APIは、あなただけでなく、Instagramユーザーがアプリで潜在的に認証するためのものです。 Instagram Dev Webサイトの指示 に従いました。最初の(明示的な)メソッドを使用して、サーバー上でこれを非常に簡単に行うことができました。

ステップ1)ユーザーがクリックして認証プロセスを開始できるリンクまたはボタンをWebページに追加します。

<a href="https://api.instagram.com/oauth/authorize/?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code">Get Started</a>

Instagramバックエンドでアプリを正常に登録すると、YOUR_CLIENT_IDYOUR_REDIRECT_URIが、以下で使用されるYOUR_CLIENT_SECRETとともに提供されます。

ステップ2)アプリに定義したURI(YOUR_REDIRECT_URIと同じ)で、Instagramサーバーからの応答を受け入れる必要があります。 Instagramサーバーは、リクエストでcode変数をフィードバックします。次に、このcodeとアプリに関するその他の情報を使用して、サーバーから直接別の要求を行い、access_tokenを取得する必要があります。次のように、pythonフレームワークを使用してDjangoでこれを行いました。

Djangoをurls.pyresponse関数に転送します。

from Django.conf.urls import url

from . import views

app_name = 'main'
urlpatterns = [
        url(r'^$', views.index, name='index'),
        url(r'^response/', views.response, name='response'),
]

リクエストを処理するresponse関数、views.pyは次のとおりです。

from Django.shortcuts import render
import urllib
import urllib2
import json

def response(request):
    if 'code' in request.GET:
        url = 'https://api.instagram.com/oauth/access_token'
        values = {
            'client_id':'YOUR_CLIENT_ID',
            'client_secret':'YOUR_CLIENT_SECRET',
            'redirect_uri':'YOUR_REDIRECT_URI',
            'code':request.GET.get('code'),
            'grant_type':'authorization_code'
        }
        data = urllib.urlencode(values)
        req = urllib2.Request(url, data)
        response = urllib2.urlopen(req)
        response_string = response.read()
        insta_data = json.loads(response_string)
        if 'access_token' in insta_data and 'user' in insta_data:
            #authentication success
            return render(request, 'main/response.html')
        else:
            #authentication failure after step 2
            return render(request, 'main/auth_error.html')
    Elif 'error' in req.GET:
        #authentication failure after step 1
        return render(request, 'main/auth_error.html')

これは1つの方法にすぎませんが、プロセスはPHPまたはその他のサーバー側言語でほぼ同じである必要があります。

6

簡単な方法

セキュリティ認証の下で暗黙的なoauthを無効にして、これをロードします:

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

アカウントでREDIRECT-URIを指定し、指定どおりに正確に入力します。

5
Callombert

Instagramのデータの使用をアプリケーションに許可した後、アクセストークンはURIフラグメントとして返されます。次のようになります。 enter image description here

2
Adam

これを試して:

http://dmolsen.com/2013/04/05/generated-access-tokens-for-instagram/

コードを取得したら、次のようなことができます:

curl -F 'client_id=[your_client_id]' -F 'client_secret=[your_secret_key]' -F 'grant_type=authorization_code' -F 'redirect_uri=[redirect_url]' -F 'code=[code]' https://api.instagram.com/oauth/access_token
1
ashishashen

これは私にとってはうまくいきました:

http://jelled.com/instagram/access-token

参考までに、ここで見つけるjQuery Instagramプラグインと組み合わせて使用​​しました。 http://potomak.github.com/jquery-instagram

0
Rinocerontes

このコードを100%動作させる

<a id="button" class="instagram-token-button" href="https://api.instagram.com/oauth/authorize/?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&response_type=code">Click here to get your Instagram Access Token and User ID</a>
<?PHP
  if (isset($_GET['code'])) {

        $code = $_GET['code'];

        $client_id='< YOUR CLIENT ID >';
        $redirect_uri='< YOUR REDIRECT URL >';
        $client_secret='< YOUR CLIENT SECRET >';
        $url='https://api.instagram.com/oauth/access_token';

        $request_fields = array(
            'client_id' => $client_id,
            'client_secret' => $client_secret,
            'grant_type' => 'authorization_code',
            'redirect_uri' => $redirect_uri,
            'code' => $code
        );

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        $request_fields = http_build_query($request_fields);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request_fields);
        $results = curl_exec($ch); 
        $results = json_decode($results,true);
        $access_token = $results['access_token'];

        echo $access_token;

        exit();
    }

?>
0
mehul

クライアント側(Webアプリまたはモバイルアプリ)でのみ開発するなど、サーバー側を構築したくない場合は、Implicit Authentication

文書によると、最初にhttpsリクエストを作成します

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

指定したCLIENT-IDおよびREDIRECT-URLを入力します。

次に、ログインページに移動しますが、最も重要なことは、ユーザーが正しくログインした後にアクセストークンを取得する方法です。

ユーザーが正しいアカウントとパスワードの両方でログインボタンをクリックすると、Webページは指定したURLにリダイレクトされ、その後に新しいアクセストークンが続きます。

http:// your-redirect-uri#access_token = ACCESS-TOKEN

私はjavascriptに精通していませんが、Android studioでは、リスナーを追加する簡単な方法ですWebページが新しいurl(リダイレクトイベント)へのURLをオーバーライドするイベントをリッスンし、リダイレクトURL文字列を渡すため、簡単に分割できます次のようなアクセストークンを取得するには:

文字列access_token = url.split( "=")[1];

URLを各「=」文字の文字列配列に分割することを意味し、アクセストークンは明らかに[1]に存在します。

0
OOD Waterball

手順については、この記事をご覧ください post 。また、C#ASP.NETを使用している場合は、この repo をご覧ください。

0
Mike

https://www.hurl.it/ を使用することで、これを見ることができました:{"code":400、 "error_type": "OAuthException"、 "error_message": "一致するコードは見つかったか、すでに使用されていました。」 }

そのため、リクエストごとに新しいコードを取得する必要があります。

0
Tone Škoda