【问题标题】:Load more image from instagram API giving me same images从 instagram API 加载更多图像,给我相同的图像
【发布时间】:2014-08-29 09:42:05
【问题描述】:

我正在使用带有 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 知识不是很了解,有人做过,可以帮助我吗?

【问题讨论】:

  • 你也可以为ajax请求发布你的JS吗?
  • @eithedog 刚刚添加到帖子中
  • 除了设置一些类属性之外,您是否真的在使用$call
  • 据我所知,当您想从第一个 ajax 响应 (data.pagination.next_url) 中获取下一页时,您正在对下一页进行硬编码......然后将其传递给下一个 ajax 请求

标签: php jquery ajax api instagram


【解决方案1】:

当 PHP 页面初始呈现为 HTML 时

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

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

一种解决方案是让您的 ajax 请求的“完成”回调更新 data-maxid 属性。

看起来好像你已经在传回下一个 Id ('next_id' =&gt; $media-&gt;pagination-&gt;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 library doc,看来您只需将原始对象传回“分页”函数即可。

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

【讨论】:

  • 实际上我用这段代码来获取特定的标签,它工作正常,MAX_ID 工作正常。
  • 我刚刚将我的 AJAX 请求发布到原始帖子中。有机会请您看一下并改正吗?
  • @Amir 看看我的答案的更新。基本上你需要重新创建你收到的原始媒体对象(希望不包括实际图像)并将其传递给分页方法。
  • 看起来您正在对 nexturl 进行硬编码。我又更新了一次。如果这不起作用,那么您能否发布此调用返回的对象:“$media = $instagram->getUserMedia(USER_ID, LIMIT_NUMBER);”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
相关资源
最近更新 更多