Работа с API-интерфейсами Instagram (JSON + PHP)

Я новичок в PHP, и я не могу понять, как работать с API-интерфейсами Instagram, чтобы (например) извлечь список ссылок на изображения стандартного разрешения по последним 3 элементам, опубликованным user_id 3.

Вот что я создал до сих пор:

<?php function get_instagram($user_id,$count) { $user_id = '3'; $count = '3'; $url = 'https://api.instagram.com/v1/users/'.$user_id.'/media/recent/?access_token=13137.f59def8.1a759775695548999504c219ce7b2ecf&count='.$count; $jsonData = $json_decode((file_get_contents($url))); $data = $jsonData->data; $result = '<ul>'; foreach ($data as $key => $value) { $result .= '<li><a href='.$value->link.' ><img src="'.$value->images->standard_resolution->url.'" width="70" height="70" /></a></li> '; } $result .= '</ul>'; return $result; } 

Результат – пустая страница, хотя .. вы можете мне помочь?

Вам нужно эхо или сделать что-то с возвращенными данными (также у вас есть rouge $ перед вашей функцией json_decode)

Попробуй это:

 <?php function get_instagram($user_id=15203338,$count=6,$width=190,$height=190){ $url = 'https://api.instagram.com/v1/users/'.$user_id.'/media/recent/?access_token=13137.f59def8.1a759775695548999504c219ce7b2ecf&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)); } $result = '<div id="instagram">'.PHP_EOL; foreach ($jsonData->data as $key=>$value) { $result .= "\t".'<a class="fancybox" data-fancybox-group="gallery" title="'.htmlentities($value->caption->text).' '.htmlentities(date("F j, Y, g:ia", $value->caption->created_time)).'" style="padding:3px" href="'.$value->images->standard_resolution->url.'"> <img src="'.$value->images->low_resolution->url.'" alt="'.$value->caption->text.'" width="'.$width.'" height="'.$height.'" /> </a>'.PHP_EOL; } $result .= '</div>'.PHP_EOL; return $result; } echo get_instagram(); ?> 


С $value->location->name

Если вы хотите проверить его пустое, и если оно тогда не отображается, но также хотите добавить на него строку, если она установлена, вы будете делать что-то вроде:

 $location = (!empty($value->location->name))?'@'.$value->location->name:null; 

Затем используйте $location для эха, где вы хотите.

Я продлил выбранный ответ, написав небольшой скрипт, который можно использовать в качестве шаблона для тех, кто пытается это сделать.

Он настраивается со всеми переменными и начинается с базовой разметки. Используя селектора из документов API Instagrams, вы можете создавать на своем выходе по мере необходимости.

Он построен специально для WordPress с небольшим изменением размера изображения, которое может быть использовано в любом приложении PHP.

 <?php function instagram($count = 10, $width = 640, $height = 640) { $user_id = 123456789; $access_token = '123456789'; $size = wp_is_mobile() ? 'low_resolution' : 'standard_resolution'; $url = 'https://api.instagram.com/v1/users/'.$user_id.'/media/recent/?access_token='.$access_token.'&count='.$count; $cache_location = './'.sha1($url).'.json'; $cache_time = '-1 hour'; if (file_exists($cache_location) && filemtime($cache_location) > strtotime($cache_time)) { // If a cache file exists, and it is newer than 1 hour, use it $jsonData = json_decode(file_get_contents($cache_location)); } else { $jsonData = json_decode((file_get_contents($url))); file_put_contents($cache_location,json_encode($jsonData)); } foreach ($jsonData->data as $key=>$value) { echo '<div>'; echo '<img src="'.$value->images->$size->url.'"/>'; echo '</div>'; } } 

Основное использование

 <?php echo instagram(); ?> 

Расширенное использование

 <?php echo instagram($count = 1, $width = 100, $height = 100); ?> 

Github Repo

Welp, Это работало неделю назад, но теперь это дает мне ошибку PHP:

«Сообщение: попытка получить свойство не объекта»

в строке с оператором foreach: foreach ($jsonData->data as $key=>$value)

Оказывается, мой канал JSON был фактически поврежден, подписи к некоторым из моих instagrams отсутствовали, поэтому мне пришлось добавить оператор if empty. Теперь я использую другой метод, любопытный своими мыслями, отлично работает!

 <?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"); $cache = './instagram.json'; if(file_exists($cache) && filemtime($cache) > time() - 60*60){ // If a cache file exists, and it is newer than 1 hour, use it $instaData = json_decode(file_get_contents($cache)); } else { $instaData = json_decode((file_get_contents($result))); file_put_contents($cache,json_encode($instaData)); } foreach ($instaData->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:ia", $post->caption->created_time)).'</div></a>'; } } ?>