Я хотел бы получить фид Instagram пользователя с помощью PHP. Я подписался на учетную запись разработчика Instagram и попытался потянуть информацию пользователя и фотографии, но ответ не стабилен. Иногда я получаю ответ, а иногда я получаю сообщение об ошибке: access_token отсутствует. Есть ли убедительный пример получения пользовательского фида фотографий по имени пользователя?
В идеале я хотел бы, чтобы это было так просто:
$instagram = new Instagram(); $photos = $instagram->getPhotos("username-goes-here");
Где Instagram – это класс, который обрабатывает все запросы. Любую помощь или направление оценивают. Благодаря!
Попробуй это,
<?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. } ?>
Пусть это поможет вам.
Я сделал это:
<?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:ia", $post->caption->created_time)).'</div></a>'; } } ?>
Принимая то, что я видел в Интернете, и на этой странице, я создал класс Instagram (очень простой, только для вытягивания фида и т. Д.) Ниже.
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}; }
с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}; }
Обновление: 15.6.2017 – Instagram изменила конечную точку, следующее больше не работает.
Поскольку уже невозможно получить случайный поток пользователей без одобренного приложения, я выяснил, как его получить с помощью неофициального 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
Я улучшу этот ответ с помощью PHP позже, мне тоже нужно сделать это с PHP.
попробуйте этот тип искателя в необработанном виде.
function feed_instagram($url = "https://www.instagram.com/titaniumheart_") { //$url ie https://www.instagram.com/titaniumheart_ $dom = new DOMDocument(); @$dom->loadHTMLFile($url); $f=$dom->saveHTML(); //load the url (crawl) $key=""; $swquote=0; echo "<div>"; for ($x=0;$x<strlen($f);$x++) { $c=substr($f,$x,1); //echo $c."-"; if ($c==chr(34)) { if($swquote==0) { $swquote=1; //to start get chars } else { $swquote=0; //echo $key; if($key=="code") { //get the number of comments $m=substr($f,$x+4,100); $code= substr($m,0,strpos($m,chr(34))); echo "code is ".$code; echo "<br>"; } if($key=="comments") { //get the number of comments $m=substr($f,$x+12,20); $comments= substr($m,0,strpos($m,"}")); echo "number of comments is ".$comments; echo "<br>"; } if($key=="caption") { //get the number of comments $m=substr($f,$x+4,200); $caption= substr($m,0,strpos($m,chr(34))); echo "caption is ".$caption; echo "<br>"; } if($key=="likes") { //get the number of comments $m=substr($f,$x+12,20); $likes= substr($m,0,strpos($m,"}")); echo "number of likes is ".$likes; echo "<br>"; } if($key=="thumbnail_src") { //get the number of comments $m=substr($f,$x+4,200); $src= substr($m,0,strpos($m,"?")); echo "<br>image source is ".$src; echo "<br>"; echo "<a href=\"https://www.instagram.com/p/".$code."/\">"; echo "<img src=\"".$src."\">"; echo "</a><br>"; } $key=""; } }else { if($swquote==1) { $key.=$c; } } } echo "</div>"; }
использование: https://www.instagram.com/titaniumheart_ ");?>
обратите внимание: вы должны включить расширение php_openssl на php.ini.