Instagram RSS Feed Script

11-02-2015 @ 14:15


Я тут наткнулся на аккаунт Антона Шкаплерова в инстаграме, если кто не знает – это российский космонавт-испытатель, который сейчас на МКС. Так вот он ведет весьма неплохой инста-аккаунт с фотками и видео со станции, которые, к слову, весьма красивые (см выше). Т.к. у меня с инстаграмом не сложилось, я озадачился поисками альтернатив получения новостей в нужном мне формате. Формат интересовал именно RSS, ибо большую часть новостей я получаю через него. В итоге я наткнулся на такой замечательный php-скрипт. Немного отредактировав под свои нужды делюсь оным.

Файл назовем igrss.php. Для получения rss-потока вызываем его следующим образом:
…/igrss.php?user=instagram-username

<?php
    if (!isset($_GET['user'])) {
        exit('Неверный запрос. Пример запроса: .../igrss.php?user=instagram-username');
    }
    header('Content-Type: text/xml; charset=utf-8');
    $html = file_get_contents('http://instagram.com/'.$_GET['user'].'/');
    $html = strstr($html, '{"static_root');
    $html = strstr($html, '</script>', true);
    $html = substr($html, 0, -1);
    $data = json_decode($html);
    $rss_feed = '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>';
    $rss_feed .= '<title>'.$_GET['user'].'\'s Instagram Feed</title>
  <atom:link href="http://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"].'" rel="self" type="application/rss+xml" />
  <link>http://instagram.com/'.$_GET['user'].'</link>
  <description>'.$_GET['user'].'\'s Instagram Feed</description>';
 
    foreach($data->entry_data->UserProfile[0]->userMedia as $user_media) {
        $rss_feed .= '<item><title>';
        if(isset($user_media->caption->text) && $user_media->caption->text != '') {
            $rss_feed .= htmlspecialchars($user_media->caption->text, ENT_QUOTES, ENT_HTML5);
        } else {
            $rss_feed .= 'photo';
        }
        // pubdate format возможен также: "D, d M Y H:i:s T"
        $rss_feed .= '</title><link>'.$user_media->link.'</link><pubDate>'.date("r", $user_media->created_time).'</pubDate><description><![CDATA[<img src="'.$user_media->images->standard_resolution->url.'" />]]></description><guid>'.$user_media->link.'</guid></item>';
    } // foreach userMedia (photo)
    $rss_feed .= '</channel></rss>';
    echo $rss_feed;
?>

И уже в RSS-читалке получим такую вот красоту: