ユーザーの最近の Instagram メディアをサイドバーに表示しようとしています。Instagram API を使用してメディアを取得しようとしています。
http://instagram.com/developer/endpoints/users/
ドキュメントには GET と書かれていますhttps://api.instagram.com/v1/users/<user-id>/media/recent/
が、OAuth アクセス トークンを渡すように書かれています。アクセス トークンは、ユーザーに代わって行動するための承認を表します。サイドバーでこれを見るために、ユーザーが Instagram にログインする必要はないと思います。Instagram アカウントを持っている必要すらありません。
例えば、私はhttp://instagram.com/thebrainscoopInstagram にログインせずに写真を閲覧したいのですが、API 経由で実行したいです。
Instagram API では、ユーザー認証されていないリクエストはclient_id
ではなくを渡しますaccess_token
。ただし、これを試してみると、次のようになります。
{
"meta":{
"error_type":"OAuthParameterException",
"code":400,
"error_message":"\"access_token\" URL parameter missing. This OAuth request requires an \"access_token\" URL parameter."
}
}
では、これは不可能なのでしょうか? ユーザーに最初に OAuth 経由で Instagram アカウントにログインするように求めずに、ユーザーの最新の (公開) メディアを取得する方法はないのでしょうか?
ベストアンサー1
var name = "smena8m";
$.get("https://images"+~~(Math.random()*3333)+"-focus-opensocial.googleusercontent.com/gadgets/proxy?container=none&url=https://www.instagram.com/" + name + "/", function(html) {
if (html) {
var regex = /_sharedData = ({.*);<\/script>/m,
json = JSON.parse(regex.exec(html)[1]),
edges = json.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges;
$.each(edges, function(n, edge) {
var node = edge.node;
$('body').append(
$('<a/>', {
href: 'https://instagr.am/p/'+node.shortcode,
target: '_blank'
}).css({
backgroundImage: 'url(' + node.thumbnail_src + ')'
}));
});
}
});
html, body {
font-size: 0;
line-height: 0;
}
a {
display: inline-block;
width: 25%;
height: 0;
padding-bottom: 25%;
background: #eee 50% 50% no-repeat;
background-size: cover;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
?__a=1
ランディングページのアドレスの横にあるJSON形式で、Instagramユーザーの写真フィードをダウンロードできます。このようなユーザー ID を取得したり、アプリを登録したりする必要はありません。トークンや OAuth も不要です。
min_id
変数はmax_id
ページ区切りに使用できます。例
YQL
切り取られたiframe内では動作しない可能性があるため、手動で確認することができます。YQL コンソール
2018 年 4 月更新: 最新の Instagram アップデート以降、署名付きリクエストのカスタム ヘッダーは制限により JavaScript で設定できないため、クライアント側 (JavaScript) でこれを行うことはできません。ただし、、およびリクエスト パラメータに基づく適切な署名を使用して、または他のサーバー側メソッドをCORS
Access-Control-Allow-Headers
介してこれを行うことは可能です。詳細については、こちらをご覧ください。php
rhx_gis
csrf_token
ここ。
2019 年 1 月更新: YQL は廃止されたため、CORS
Instagram ページのプロキシとして Google Image Proxy を使用した最新の更新を確認してください。唯一のマイナス点は、この方法ではページネーションが利用できないことです。
PHP
解決:
$html = file_get_contents('https://instagram.com/apple/');
preg_match('/_sharedData = ({.*);<\/script>/', $html, $matches);
$profile_data = json_decode($matches[1])->entry_data->ProfilePage[0]->graphql->user;