从instagram API加载更多的图像给我相同的图像


Load more image from instagram API giving me same images

我使用Ajax的Instagram PHP API来获取用户媒体流,它给我每个请求相同的图像。

页面代码:

/**
   * Instagram PHP API
   *
   * @link https://github.com/cosenary/Instagram-PHP-API
   * @author Christian Metz
   * @since 20.06.2012
   */
  require_once 'api/instagram.class.php';
  // Initialize class for public requests
  $instagram = new Instagram('CLIENT_ID');

  // Get recently tagged media
  $media = $instagram->getUserMedia(USER_ID, LIMIT_NUMBER);
  // Display first results in a <ul>
  echo "<ul id='"photos'">";
  foreach ($media->data as $data) {
    echo "<a target='"_blank'" href='"{$data->images->standard_resolution->url}'"><li><img src='"{$data->images->low_resolution->url}'"></li></a>";
  }
  echo "</ul>";
  // Show 'load more' button
  echo "<br><div id='content'><div id='spinner'><img src='/wp-content/themes/tmg/ui/img/spinner.png' id='"more'" data-maxid='"{$media->pagination->next_max_id}'"></div></div>";

是ajax。php

  /**
   * Instagram PHP API
   *
   * @link https://github.com/cosenary/Instagram-PHP-API
   * @author Christian Metz
   * @since 20.06.2012
   */
  require_once 'api/instagram.class.php';
  // Initialize class for public requests
  $instagram = new Instagram('CLIENT_ID');
  // Receive AJAX request and create call object
  $tag = $_GET['tag'];
  $maxID = $_GET['max_id'];
  $clientID = $instagram->getApiKey();
  $call = new stdClass;
  $call->pagination->next_max_id = $maxID;
  $call->pagination->next_url = "https://api.instagram.com/v1/users/4563432423/media/recent?max_id=436456456456456456&client_id=9089798ayut675675757a";
  // Receive new data
$media = $instagram->getUserMedia('76766456534', 32); 
  // Collect everything for json output
  $images = array();
  foreach ($media->data as $data) {
    $images[] = $data->images->low_resolution->url;
  }
  echo json_encode(array(
    'next_id' => $media->pagination->next_max_id,
    'images'  => $images
  ));
AJAX请求
$(document).ready(function() {
  $('#more').click(function() {
    var tag   = $(this).data('tag'),
        maxid = $(this).data('maxid');
    $.ajax({
      type: 'GET',
      url: '<?php bloginfo( 'template_directory' ); ?>/ajax.php',
      data: {
        tag: tag,
        max_id: maxid
      },
      dataType: 'json',
      cache: false,
      success: function(data) {
        // Output data
        $.each(data.images, function(i, src) {
          $('ul#photos').append('<li><img src="' + src + '"></li>');
        });
    });
  });
});

我的API请求是成功的,所以什么是明显的东西在代码是错误的,我不是很PHP知识渊博,有人做过之前,所以可以帮助我吗?

当PHP页面初始呈现为HTML时

data-maxid='"{$media->pagination->next_max_id}

将导致data-maxid始终是相同的数字(我假设,因为这是一个ajax请求,页面不会被重新加载)。

一种解决方案是让ajax请求的"on complete"回调更新data-maxid属性。

它看起来好像你已经传递了下一个Id ('next_id' => $media->pagination->next_max_id),你只需要让js更新数据属性。

如果你使用jQuery,

可能看起来像这样:

//ajax onComplete callback
function(result){
   $('#more').data('maxid', result.next_id);
}

我不是100%确定,但这个改变可能会起作用:

  //this probably shouldn't be static...
  $call->pagination->next_url = "https://api.instagram.com/v1/users/4563432423/media/recent?max_id=" . $maxId . "&client_id=9089798ayut675675757a";
  // Receive new data
  $media = $instagram->pagination($call);

查看PHP库文档,似乎您只需将原始对象传递回"pagination"函数即可。

您对$call所做的操作可能包含完成请求所需的字段,否则可能会抛出错误。