简体   繁体   中英

Instagram API pagination in PHP

I am trying to create a small instagram app in PHP only (no database) and without getting an access_token (just my client_id). So far so good, (ie input user_id returns photos from last 30 days, with likes-count and created_time, in a table), until I get to pagination. As expected, I want to hit a 'more' button which loads next json file and adds additional photos to the existing table , but it falls apart there... Here is what I've got, working, except for the pagination attempt.

NOTE: this is an internal app, so the sensitivity of my client_id is not an issue, if it is exposed

<?php
if (!empty($_GET['user_id'])){
  $user_id = ($_GET['user_id']);
  $instagram_url = 'https://api.instagram.com/v1/users/' . $user_id . '/media/recent/?client_id=MY_CLIENT_ID';
  $instagram_json = file_get_contents($instagram_url);
  $instagram_array = json_decode($instagram_json, true);
    }
?>

...

    <?php
    if(!empty($instagram_array)){

        $instagram_array['pagination'] as $page { // Attempt at pagination
            echo '<p>' .$page['next_url'].'</p>'; // Attempt at pagination
        }  // Attempt at pagination

        foreach($instagram_array['data'] as $image){
            if ($image['created_time'] > strtotime('-30 days')) {
                echo '<tr>';
                echo '<td>' . date('M d, Y', $image['created_time']) . '</td>';
                echo '<td>'.$image['likes']['count'].'</td>';
                echo '<td><img src="'.$image['images']['standard_resolution']['url'].'" alt=""/ style="max-height:40px"></td>';
                echo '</tr>';
        }
      }
    }
    ?>

  </body>
</html>

Note: this is cobbled together from a few other sources - I am a total noob, so please forgive me if I need a little hand-holding...:)

You may specify min_timestamp to return medias which taken later than this timestamp

https://api.instagram.com/v1/users/{user_id}/media/recent/?access_token={access_token}&min_timestamp={min_timestamp}

$instagram_array['pagination']['next_url'] should be removed, it may include your access token which is a sensible data, that must be always invisible.

list_ig.php

<?
$user_id = "...";
$access_token = "...";
//30 day ago
$min_timestamp = strtotime("-30 day",time());
//pagination feature
$next_max_id = $_GET['next_max_id'];

$instagram_url  = "https://api.instagram.com/v1/users/" . $user_id . "/media/recent/?access_token=" .$access_token. "&min_timestamp=" . $min_timestamp;
if($next_max_id != "")
    $instagram_url  .= "&max_id=" . $next_max_id;

$instagram_json  = file_get_contents($instagram_url);
$instagram_array  = json_decode($instagram_json ,true);
?>

<? if( $instagram_array['pagination']['next_max_id'] != "" ): ?>
<a href="list_ig.php?next_max_id=<?=$instagram_array['pagination']['next_max_id']?>">More</a>
<? endif;?>

.... print instagram data....

Instagram AJAX Demo

http://jsfiddle.net/ajhtLgzc/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM