【问题标题】:Retrieve more photos from instagram api on button click单击按钮从 instagram api 检索更多照片
【发布时间】:2014-11-11 21:20:09
【问题描述】:

我正在构建一个从某个tag name 检索 Instagram 图片的基本应用程序。我正在使用instagram-api-php 存储库。到目前为止,一切都很好。我在尝试加载更多与 tag name 相关的图片时遇到问题。我正在使用next_max_id,如instagram api pagination 中所述。我在页面中放置了一个button 并分配了next_max_id 来加载其余的照片。但没有照片正在加载。如何在单击按钮时加载更多照片?我按照Github 中的例子

index.php

<script>
    $(document).ready(function() {
      $('#more').click(function() {
        var tag   = $(this).data('tag'),
            maxid = $(this).data('maxid');

        $.ajax({
          type: 'GET',
          url: '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>');
            });

            // Store new maxid
            $('#more').data('maxid', data.next_id);
          }
        });
      });
    });
  </script>

<?php
  /**
   * Instagram PHP API
   */

    require_once 'Instagram.php';


    // Initialize class with client_id
    // Register at http://instagram.com/developer/ and replace client_id with your own
    $instagram = new Instagram('API KEY');

    // $geo = $instagram->searchMedia(56.8770413, 14.8092744);

    $tag = 'sweden';

    // Get recently tagged media
    $media = $instagram->getTagMedia($tag);

    // Display first results in a <ul>
    echo '<ul id="photos">';

    foreach ($media->data as $data) 
    {
        echo '<li><img src="'.$data->images->thumbnail->url.'"></li>';
    }
    echo '</ul>';

    // Show 'load more' button
    echo '<br><button id="more" name="max_id" data-maxid="'.$media->pagination->next_max_id.'" data-tag="'.$tag.'">Load more ...</button>';
?>

ajax.php

<?php
    /**
     * Instagram PHP API
     */
      set_include_path("../src/" . PATH_SEPARATOR . get_include_path());
      require_once 'Instagram.php';
      use MetzWeb\Instagram\Instagram;

      // Initialize class for public requests
      $instagram = new Instagram('API KEY');

      // 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/tags/{$tag}/media/recent?client_id={$clientID}&max_tag_id={$maxID}";

      // Receive new data
      $media = $instagram->getTagMedia($tag,$auth=false,array('max_tag_id'=>$maxID));

      // Collect everything for json output
      $images = array();
      foreach ($media->data as $data) {
        $images[] = $data->images->thumbnail->url;
      }

      echo json_encode(array(
        'next_id' => $media->pagination->next_max_id,
        'images'  => $images
      ));
?>

【问题讨论】:

    标签: javascript php jquery instagram


    【解决方案1】:

    改变

    $.each(data.images, function(i, src) {
      $('ul#photos').append('<li><img src="' + src + '"></li>');
    });
    

    $.each(data.images, function(i, img) {
      $('ul#photos').append('<li><img src="' + img.standard_resolution.url + '"></li>');
    });
    

    不是 100% 确定这是正确的属性名称,但就目前而言,您正在循环遍历图像对象数组,将每个图像对象设置为 src,然后尝试使用 src 作为图像源,而实际上它是图像对象。 src 可能是它的属性。

    编辑:这是一个jsBin 演示。如果data.images 实际上是一个对象数组,我的解决方案应该可以工作......

    【讨论】:

    • 好吧,当你 console.log(img) 时会发生什么? (或者你设置的任何东西。
    • @techAddict82 查看我的编辑。这一切都假设您实际上正在取回数据。在追加之前控制台日志会发生什么?
    • 等一下,我正在尝试在演示站点上获取它。是的,我正在取回数据。
    • 对不起,我的网络服务器不支持cURL,所以我不能。我试过console.log(img),但没有显示。正如控制台中提到的,我收到了回传数据。
    • 你自相矛盾。你说你正在取回数据,但是当你记录它时,什么都没有显示。该函数根本没有执行,或者您没有取回数据。在追加之前尝试console.log('test') 看看是否显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2017-07-18
    • 2015-11-22
    • 2018-07-07
    • 1970-01-01
    • 2023-02-05
    相关资源
    最近更新 更多