ユーザーとして認証せずにInstagramからユーザーのメディアを取得するにはどうすればいいですか? 質問する

ユーザーとして認証せずにInstagramからユーザーのメディアを取得するにはどうすればいいですか? 質問する

ユーザーの最近の 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介してこれを行うことは可能です。詳細については、こちらをご覧ください。phprhx_giscsrf_tokenここ

2019 年 1 月更新: YQL は廃止されたため、CORSInstagram ページのプロキシとして 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;

おすすめ記事