Instagramのアクセストークンを取得する方法に本当に苦労しています。
新しいクライアントを登録し、このURLを使用しました
クライアントIDを入力してURLをリダイレクトします。
次に、URLにコードを表示するページにリダイレクトされましたが、そこからidがアクセストークンを取得する手掛かりがありません。
公式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
これまでに投稿されたほぼすべての返信は、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を使用していない可能性がありますが、このソリューションが、使用している言語に合わせて独自のソリューションを翻訳するのに役立つことを願っています。
前と同じ問題が発生しましたが、URLをこれに変更します
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
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_ID
とYOUR_REDIRECT_URI
が、以下で使用されるYOUR_CLIENT_SECRET
とともに提供されます。
ステップ2)アプリに定義したURI(YOUR_REDIRECT_URI
と同じ)で、Instagramサーバーからの応答を受け入れる必要があります。 Instagramサーバーは、リクエストでcode
変数をフィードバックします。次に、このcode
とアプリに関するその他の情報を使用して、サーバーから直接別の要求を行い、access_token
を取得する必要があります。次のように、pythonフレームワークを使用してDjangoでこれを行いました。
Djangoをurls.py
のresponse
関数に転送します。
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またはその他のサーバー側言語でほぼ同じである必要があります。
簡単な方法
セキュリティ認証の下で暗黙的なoauthを無効にして、これをロードします:
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
アカウントでREDIRECT-URIを指定し、指定どおりに正確に入力します。
Instagramのデータの使用をアプリケーションに許可した後、アクセストークンはURIフラグメントとして返されます。次のようになります。
これを試して:
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
これは私にとってはうまくいきました:
http://jelled.com/instagram/access-token
参考までに、ここで見つけるjQuery Instagramプラグインと組み合わせて使用しました。 http://potomak.github.com/jquery-instagram
このコードを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();
}
?>
クライアント側(Webアプリまたはモバイルアプリ)でのみ開発するなど、サーバー側を構築したくない場合は、Implicit Authentication。
文書によると、最初にhttpsリクエストを作成します
指定したCLIENT-IDおよびREDIRECT-URLを入力します。
次に、ログインページに移動しますが、最も重要なことは、ユーザーが正しくログインした後にアクセストークンを取得する方法です。
ユーザーが正しいアカウントとパスワードの両方でログインボタンをクリックすると、Webページは指定したURLにリダイレクトされ、その後に新しいアクセストークンが続きます。
私はjavascriptに精通していませんが、Android studioでは、リスナーを追加する簡単な方法ですWebページが新しいurl(リダイレクトイベント)へのURLをオーバーライドするイベントをリッスンし、リダイレクトURL文字列を渡すため、簡単に分割できます次のようなアクセストークンを取得するには:
文字列access_token = url.split( "=")[1];
URLを各「=」文字の文字列配列に分割することを意味し、アクセストークンは明らかに[1]に存在します。
https://www.hurl.it/ を使用することで、これを見ることができました:{"code":400、 "error_type": "OAuthException"、 "error_message": "一致するコードは見つかったか、すでに使用されていました。」 }
そのため、リクエストごとに新しいコードを取得する必要があります。