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't stable. Sometimes I get a response and other times I keep getting the error: access_token is missing. Is there a solid example of getting a user's feed of photos by username?
Ideally, I'd like it to be as simple as:
$instagram = new Instagram();
$photos = $instagram->getPhotos("username-goes-here");
Where Instagram is a class that handles all the requests. Any help or direction is appreciated. Thanks!
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.
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>';
}
}
?>
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};
}
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.
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
}
?>
try this one a crawler type in raw form.
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>";
}
usage: https://www.instagram.com/titaniumheart_");?>
take note: you must enabled extension "php_openssl" on php.ini.
来源:https://stackoverflow.com/questions/6311195/how-to-get-a-users-instagram-feed