How to get a user's Instagram feed

后端 未结 7 847
北海茫月
北海茫月 2020-12-04 23:10

I\'d like to get a user\'s Instagram feed using PHP. I\'ve signed up for an Instagram Developer Account and tried pulling in a user\'s info and photos, but the response isn

相关标签:
7条回答
  • 2020-12-04 23:22

    Taking what i have seen around the internet and on this page, I have created an Instagram class (very simple, only for pulling feed, etc.') below.

    class Instagram {
        public static $result;
        public static $display_size = 'thumbnail'; // you can choose between "low_resolution", "thumbnail" and "standard_resolution"
        public static $access_token = "DEFAULTACCESSTOKEN"; // default access token, optional
        public static $count = 10;
        public static function fetch($url){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_TIMEOUT, 20);
            $result = curl_exec($ch);
            curl_close($ch);
            return $result;
        }
        function __construct($Token=null){
            if(!empty($Token)){
                self::$access_token = $Token;
    
                // Remove from memory -- not sure if really needed.
                $Token = null;
                unset($Token);
            }
            self::$result = json_decode(self::fetch("https://api.instagram.com/v1/users/self/media/recent?count=" . self::$count . "&access_token=" . self::$access_token), true);
        }
    }
    $Instagram = new Instagram('ACCESSTOKENIFCHANGEDORNULLOREMPTY');
    foreach ($Instagram::$result->data as $photo) {
        $img = $photo->images->{$Instagram::$display_size};
    }
    
    0 讨论(0)
  • 2020-12-04 23:23

    Found this medium article:- https://medium.com/@bkwebster/how-to-get-instagram-api-access-token-and-fix-your-broken-feed-c8ad470e3f02

     <?php
                        $user_id=xxxxxx;//User ID is the first string of numbers before the first dot (.)
                        $count=2;
                        $width=100;
                        $height=100;
                        $url = 'https://api.instagram.com/v1/users/'.$user_id.'/media/recent/?access_token=xxxxxx.83c3b89.257e2fd9c2bd40c181a2a4fb9576628c&count='.$count;
    
                        // Also Perhaps you should cache the results as the instagram API is slow
                        $cache = './'.sha1($url).'.json';
                        if(file_exists($cache) && filemtime($cache) > time() - 60*60){
                            // If a cache file exists, and it is newer than 1 hour, use it
                            $jsonData = json_decode(file_get_contents($cache));
                        } else {
                            $jsonData = json_decode((file_get_contents($url)));
                            file_put_contents($cache,json_encode($jsonData));
                        }
                        foreach ($jsonData->data as $key=>$value) {
                            ?>
                            <ul class="w3_footer_grid_list1">
                                <li><label class="fa fa-instagram" aria-hidden="true"></label><a target="_blank" href="<?php echo $value->link;?>"><i><?php echo $value->caption->text; ?> </i></a><?php  ?>
                                </li>
                                <a target="_blank" href="<?php echo $value->link;?>">
                                <img src="<?php echo  $value->images->low_resolution->url;?>" alt="'.$value->caption->text.'" width="<?php echo $width;?>" height="<?php echo $height;?>" />
                                </a>
                            </ul>
                            <?php
                        }
                    ?>
    
    0 讨论(0)
  • 2020-12-04 23:24

    Update: 15.6.2017 - Instagram has changed the end point, the following does not work anymore.

    Since it's not anymore possible to get random users feed without approved application, I've figured out how to get it using the unofficial API:

    #!/bin/bash
    instagram_user_id=25025320
    count=12
    csrftoken=$(curl --head -k https://www.instagram.com/ 2>&1 | grep -Po "^Set-Cookie: csrftoken=\K(.*?)(?=;)")
    curl "https://www.instagram.com/query/" -H "cookie: csrftoken=$csrftoken;" -H "x-csrftoken: $csrftoken" -H "referer: https://www.instagram.com/" --data "q=ig_user($instagram_user_id)%20%7B%20media.after(0%2C%20$count)%20%7B%0A%20%20count%2C%0A%20%20nodes%20%7B%0A%20%20%20%20caption%2C%0A%20%20%20%20code%2C%0A%20%20%20%20comments%20%7B%0A%20%20%20%20%20%20count%0A%20%20%20%20%7D%2C%0A%20%20%20%20date%2C%0A%20%20%20%20dimensions%20%7B%0A%20%20%20%20%20%20height%2C%0A%20%20%20%20%20%20width%0A%20%20%20%20%7D%2C%0A%20%20%20%20display_src%2C%0A%20%20%20%20id%2C%0A%20%20%20%20is_video%2C%0A%20%20%20%20likes%20%7B%0A%20%20%20%20%20%20count%0A%20%20%20%20%7D%2C%0A%20%20%20%20owner%20%7B%0A%20%20%20%20%20%20id%2C%0A%20%20%20%20%20%20username%2C%0A%20%20%20%20%20%20full_name%2C%0A%20%20%20%20%20%20profile_pic_url%0A%20%20%20%20%7D%2C%0A%20%20%20%20thumbnail_src%2C%0A%20%20%20%20video_views%0A%20%20%7D%2C%0A%20%20page_info%0A%7D%0A%20%7D" -k
    

    I will improve this answer with PHP later, I need to do this with PHP too.

    0 讨论(0)
  • 2020-12-04 23:31

    I did this:

    <?php
    
      function fetchData($url){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_TIMEOUT, 20);
      $result = curl_exec($ch);
      curl_close($ch); 
      return $result;
      }
    
      $result = fetchData("https://api.instagram.com/v1/users/USER ID HERE/media/recent/?access_token=ACCES TOKEN HERE&count=14");
    
    
      $result = json_decode($result);
      foreach ($result->data as $post) {
         if(empty($post->caption->text)) {
           // Do Nothing
         }
         else {
            echo '<a class="instagram-unit" target="blank" href="'.$post->link.'">
            <img src="'.$post->images->low_resolution->url.'" alt="'.$post->caption->text.'" width="100%" height="auto" />
            <div class="instagram-desc">'.htmlentities($post->caption->text).' | '.htmlentities(date("F j, Y, g:i a", $post->caption->created_time)).'</div></a>';
         }
    
      }
    ?>
    
    0 讨论(0)
  • 2020-12-04 23:33

    Try this,

    <?php
    
      function fetchData($url){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_TIMEOUT, 20);
      $result = curl_exec($ch);
      curl_close($ch); 
      return $result;
      }
    
      $result = fetchData("https://api.instagram.com/v1/users/ID-GOES-HERE/media/recent/?access_token=TOKEN-GOES-HERE");
      $result = json_decode($result);
      foreach ($result->data as $post) {
        // Do something with this data.
      }
    ?>
    

    May this help you.

    0 讨论(0)
  • 2020-12-04 23:48

    this function goes in your App class, but can be a regular function and it will work anyways.

    <?php
        public function instagram(){
          $user = 'your user here';
          // you can get your token from here: https://instagram.pixelunion.net/
          $access_token = 'your access token here';
          $photo_count = 6;// you can choose the amount. 20 is the max per query
    
          $json_link = "https://api.instagram.com/v1/users/self/media/recent/?";
          $json_link .="access_token={$access_token}&count={$photo_count}";
          $json = file_get_contents($json_link);
          return json_decode($json);
        }
    

    the result can be navigated interactively using this tool: http://jsonviewer.stack.hu/

    in my case i'm using blade template engine (https://laravel.com/docs/5.8/blade)

    so the template will be

    @foreach($instagram->data as $gram)
       <img src="{{$gram->images->thumbnail->url}}">
    @endforeach
    

    that's it!

    0 讨论(0)
提交回复
热议问题