67

一般に、すべてのユーザー メディアを取得する必要があります。

ユーザーは 250 枚以上の写真を持っています。

そうです/users/1/media/recent/?access_token=...&count=250

ただし、20 枚の写真しか返されません。

たぶん、Instagramにはメディアを取得するための制限があります。そうである場合、応答にはそれを解決するためのページ付けがあります。ただし、最大の証明写真しかありません。それをページネーションするための最初の(分)ID写真を知るにはどうすればよいですか?

4

10 に答える 10

56

そうです、Instagram API は 1 回の呼び出しで 20 枚の画像しか返しません。そのため、ページネーション機能を使用する必要があります。

API コンソールを使用しようとしている場合。最初に、API コンソールが Instagram ログインを介して認証できるようにする必要があります。これを行うには、[認証] ドロップダウンで [OAUTH2] を選択します。

認証されたら、左側のメニューを使用して users/{user-id}/media/recent エンドポイントを選択します。したがって、{user-id} のこの投稿のために、それを self に置き換えることができます。これにより、アカウントを使用して情報が取得されます。

最低限、このエンドポイントに対して GET を実行するために必要なものです。送信すると、json が返されます。すべてのサーバー情報の後に返される情報の一番上に、next_url と next_max_id を含むページネーション部分が表示されます。

next_max_id は、クエリのパラメーターとして使用するものです。max_id は、最初に返された 20 個のうち最も古いイメージの ID であることを忘れないでください。これは、この画像より前の画像を返すために使用されます。

必要がない場合は、max_id を使用する必要はありません。実際には、より多くの画像のクエリを開始したい画像の ID を取得できます。

したがって、返されたデータから、max_id をパラメーター max_id にコピーします。リクエスト URLは、 https: //api.instagram.com/v1/users/self/media/recent?max_id=XXXXXXXXXXXX のようになります。ここで、XXXXXXXXXXXX は max_id です。もう一度送信をクリックすると、次の 20 枚の写真が表示されます。

そこから、更新された max_id も受け取ります。その後、それを再び使用して、最終的にすべてのユーザーの写真を処理するまで、次の 20 枚の写真のセットを取得できます。

私が取り組んでいるプロジェクトで行ったことは、最初の最近のメディア要求から返された最初の 20 枚の写真を読み込むことです。次に、画像に data-id を割り当てます (-id は、実際には好きなものにすることができます)。次に、写真セットの下部にさらに読み込むボタンを追加しました。

ボタンがクリックされると、jQuery を使用して最後の画像とその data-id 属性を取得し、それを使用して ajax を介して get 呼び出しを作成し、その結果を既にページにある写真の最後に追加します。ボタンの代わりに、それを置き換えるだけで無限スクロール効果が得られます。

それが役立つことを願っています。

于 2012-12-05T16:42:05.923 に答える
19

オプションのパラメーター数を -1 に設定して、この問題を解決しました。

于 2013-01-29T15:20:20.453 に答える
5

については、 http://instagram.com/developer/endpoints/を参照してくださいpaginationnext_urlオブジェクトで結果が指定する次の部分を要求するたびに、結果ページを順次処理する必要がありpaginationます。

于 2012-12-03T22:01:22.293 に答える
4

Instagram PHP API のページネーションを使用できます: https://github.com/cosenary/Instagram-PHP-API/wiki/Using-Pagination

そんな感じ:

    $Instagram = new MetzWeb\Instagram\Instagram(array(
        "apiKey"      => IG_APP_KEY,
        "apiSecret"   => IG_APP_SECRET,
        "apiCallback" => IG_APP_CALLBACK
    ));
    $Instagram->setSignedHeader(true);

    $pictures = $Instagram->getUserMedia(123);
    do {

        foreach ($pictures->data as $picture_data):

            echo '<img src="'.$picture_data->images->low_resolution->url.'">';

        endforeach;

    } while ($pictures = $instagram->pagination($pictures));
于 2015-08-10T18:13:20.393 に答える
4

ユーザーのすべての投稿を取得するには、最適な再帰関数を使用します。

<?php
    set_time_limit(0);
    function getPost($url,$i) 
    {
        static $posts=array();  
        $json=file_get_contents($url);
        $data = json_decode($json);
        $ins_links=array();
        $page=$data->pagination;
        $pagearray=json_decode(json_encode($page),true);
        $pagecount=count($pagearray);

        foreach( $data->data as $user_data )
        {
            $posts[$i++]=$user_data->link;
        }

        if($pagecount>0)
            return getPost($page->next_url,$i);
        else
            return $posts;
    }
    $posts=getPost("https://api.instagram.com/v1/users/CLIENT-ACCOUNT-NUMBER/media/recent?client_id=CLIENT-ID&count=33",0);

    print_r($posts);

?>
于 2015-02-27T03:21:56.217 に答える
4

私がしなければならなかったことは、(Javascript で) 再帰関数を使用してすべてのページを通過することです。インスタグラムのユーザーは何千枚もの写真を持っている可能性があるので危険です(だからあなたはそれを制御する必要があります)私はこのコードを使用します:

        instagramLoadDashboard = function(hash)
    {
        code = hash.split('=')[1];

        $('#instagram-pictures .images-list .container').html('').addClass('loading');


        ts = Math.round((new Date()).getTime() / 1000);
        url = 'https://api.instagram.com/v1/users/self/media/recent?count=200&min_timestamp=0&max_timestamp='+ts+'&access_token='+code;

        instagramLoadMediaPage(url, function(){

            galleryHTML = instagramLoadGallery(instagramData);
            //console.log(galleryHTML);
            $('#instagram-pictures .images-list .container').html(galleryHTML).removeClass('loading');
            initImages('#instagram-pictures');

            IGStatus = 'loaded';

        });

    };

    instagramLoadMediaPage = function (url, callback)
    {
        $.ajax({
                url : url,
                dataType : 'jsonp',
                cache : false,
                success:  function(response){

                                        console.log(response);

                                        if(response.code == '400')
                                        {
                                            alert(response.error_message);
                                            return false;
                                        }

                                        if(response.pagination.next_url !== undefined) {
                                            instagramData = instagramData.concat(response.data);
                                            return instagramLoadMediaPage(response.pagination.next_url,callback);
                                        }

                                        instagramData = instagramData.concat(response.data);
                                        callback.apply();
                                    }
        });
    };

    instagramLoadGallery = function(images)
    {
        galleryHTML ='<ul>';

        for(var i=0;i<images.length;i++)
        {
            galleryHTML += '<li><img src="'+images[i].images.thumbnail.url+'" width="120" id="instagram-'+images[i].id+' data-type="instagram" data-source="'+images[i].images.standard_resolution.url+'" class="image"/></li>';

        }

        galleryHTML +='</ul>';

        return galleryHTML;
    };

写真のギャラリーを印刷することに関連するものがあります。

于 2013-11-22T18:36:34.107 に答える
2

next_urlオブジェクトを使用して、次の 20 個のイメージを取得します。

JSON 応答にはpagination配列があります。

 "pagination":{
      "next_max_tag_id":"1411892342253728",
      "deprecation_warning":"next_max_id and min_id are deprecated for this endpoint; use min_tag_id and max_tag_id instead",
      "next_max_id":"1411892342253728",
      "next_min_id":"1414849145899763",
      "min_tag_id":"1414849145899763",
      "next_url":"https:\/\/api.instagram.com\/v1\/tags\/lemonbarclub\/media\/recent?client_id=xxxxxxxxxxxxxxxxxx\u0026max_tag_id=1411892342253728"
 }

これは特定の API 呼び出しに関する情報であり、オブジェクトnext_urlは次の 20 枚の写真を取得するための URL を示しているので、その URL を取得して次の 20 枚の写真を呼び出すだけです。

Instagram API の詳細については、次のブログ記事をご覧ください: Instagram の API と仲良くなる

于 2015-03-18T22:54:53.523 に答える