RSS-рассылка Instagram - программирование
Подтвердить что ты не робот

RSS-рассылка Instagram

Мне было интересно, как ink361 создает RSS-канал Instagram из имени пользователя.

Пример: http://ink361.com/feed/user/snoopdogg

Сообщение в блоге: http://blog.ink361.com/post/23664609916/new-rss-instagram-feed-feature-on-ink361-com

Любое понимание будет оценено.

Спасибо.

4b9b3361

Ответ 1

Instagram имеет общедоступный RSS-интерфейс, ему трудно найти какую-либо информацию об этом, но он работает с тегами (мы его используем).

Для тегов синтаксис следующий:

http://instagr.am/tags/some-tag-you-want-to-follow/feed/recent.rss

Я не уверен, что у них есть что-то похожее для фидов пользователей, так как я сказал, что очень сложно найти информацию об этом, и может исчезнуть с одного дня на другой в пользу официального API, но прямо сейчас он работает для тегов.

Здесь публикуется официальное сообщение в блоге (хотя оно охватывает только теги): http://blog.instagram.com/post/8755963247/introducing-hashtags-on-instagram

Ответ 2

@пользователь2543857 ответ был хорошо. К сожалению, структура данных Instagram изменилась. По состоянию на дату публикации этого, это будет работать. Скопируйте/вставьте файл в свой PHP-сервер и используйте как: yoursite.com/instarss.php?user=name_of_instagram_user. Это вернет корректный канал XML/RSS.

ИЗМЕНИТЬ!! Естественно, выход страницы /JSON изменился с новым интерфейсом instagram. Вот обновленный код (июнь, 2015):

<?php

if (!isset($_GET['user'])) {
    exit('Not a valid RSS feed. You didn\'nt provide an Instagram user. Send one via a GET variable. Example .../instarss.php?user=snoopdogg');
}

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,-6);
$html = substr($html, 0, -1);

$data = json_decode($html);

// print_r($data->entry_data->ProfilePage[0]->user->media->nodes);

$rss_feed = '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel>';
$rss_feed .= '<title>'.$_GET['user'].'\ 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'].'\ Instagram Feed</description>';

foreach($data->entry_data->ProfilePage[0]->user->media->nodes as $node) {

    $rss_feed .= '<item><title>';

    if(isset($node->caption) && $node->caption != '') {
        $rss_feed .= htmlspecialchars($node->caption, ENT_QUOTES, ENT_HTML5);
    } else {
        $rss_feed .= 'photo';
    }

    // pubdate format could also be: "D, d M Y H:i:s T"
    $rss_feed .= '</title><link>https://instagram.com/p/'.$node->code.'/</link><pubDate>'.date("r", $node->date).'</pubDate><dc:creator><![CDATA['.$_GET['user'].']]></dc:creator><description><![CDATA[<img src="'.$node->display_src.'" />]]></description><guid>https://instagram.com/p/'.$node->code.'/</guid></item>';

} // foreach "node" (photo)

$rss_feed .= '</channel></rss>';

echo $rss_feed;
?>

Собственно, не используйте приведенный выше код. Я попытаюсь сохранить этот Gist в будущем.

EDIT Декабрь 2016 года: Я устал преследовать каждый изменяющийся вывод Instagram только для того, чтобы очистить экран и изменить его несколько месяцев спустя. Я бы сказал, просто используйте API. Если вы все еще заинтересованы в создании RSS-ленты с пользовательской страницы, этот Gist должен дать вам идея о том, как это сделать.

Ответ 3

Благодаря torvin для наконечника.

Вот как вы можете получать изображения instagram на своем сайте без использования API.

Создайте json файл из url и username (установите это как задание cron, X раз в день)

<?
$html = file_get_contents('http://instagram.com/username/');
$html = strstr($html, '["lib');
$html = strstr($html, '</script>', true);
$html = substr($html,0,-6);
file_put_contents("username.json",$html);
?>

Отобразите несколько изображений из канала json

<?
$json = file_get_contents('username.json');
$data = json_decode($json);

$img1 = $data[2][0]->props->userMedia[0]->images->standard_resolution->url;
$img2 = $data[2][0]->props->userMedia[1]->images->standard_resolution->url;
$img3 = $data[2][0]->props->userMedia[2]->images->standard_resolution->url;

print '<img src="'.$img1.'" />';
print '<img src="'.$img2.'" />';
print '<img src="'.$img3.'" />';
?>

Ответ 4

Вы можете получить доступ к фиду для любого пользователя Instagram, используя конечную точку API /users/user-id/media/recent. Для этой конечной точки требуется access_token, которую вы можете получить, авторизуя некоторого пользователя с Instagram (не обязательно тот, который вы запрашиваете для канала). Процесс получения access_token описан здесь.

Итак, что может сделать ink361, получите access_token для себя (своего пользователя на Instagram) и используйте это, чтобы сделать запросы /users/user-id/media/recent для любых других каналов пользователей. Просто как это.

Ответ 5

Если бы я был ink361, я бы просто сканировал страницы Instagram, анализировал HTML и превращал его в RSS. Нет API, нет авторизации, нет проблем.

Ответ 6

В соответствии с новым TOS вы/мы не сможем читать из фида пользователей и, возможно, из ключевых слов.

Ответ 7

К сожалению, приведенное выше решение пользователя2543857 больше не работает. Здесь версия, которая работает с текущим источником страницы профиля.

Создайте JSON файл по URL-адресу и имени пользователя (установите это как задание cron, X раз в день)

<?php
    $json = file_get_contents('http://instagram.com/username');
    $json = strstr($json, '{"entry_data"');
    $json = strstr($json, '</script>', true);
    $json = rtrim($json,';');

    file_put_contents("username.json",$json);
?>

Отобразите несколько изображений из канала JSON

<?php
    $json = file_get_contents('username.json');
    $data = json_decode($json,true);

    $img1 = $data['entry_data']['UserProfile'][0]['userMedia'][0]['images']['thumbnail']['url'];
    $img2 = $data['entry_data']['UserProfile'][0]['userMedia'][1]['images']['thumbnail']['url'];
    $img3 = $data['entry_data']['UserProfile'][0]['userMedia'][2]['images']['thumbnail']['url'];

    print '<img src="'.$img1.'" />';
    print '<img src="'.$img2.'" />';
    print '<img src="'.$img3.'" />';
?>

Ответ 8

Вы можете получить доступ к вашему rss-каналу для instagram, используя их API. Их API использует oAuth2 для аутентификации. Я использую этот метод в своем личном блоге, чтобы вытащить фотографии instagram на главной странице. Я подозреваю, что так работает сайт ink361. Ink361 подключается к instagram api и запрашивает у пользователя логин через окно instagram, которое они используют, чтобы позволить ink361 получить доступ к своей учетной записи instagram. Сайт ink361 будет кэшировать токен, полученный с помощью instagram после успешной проверки подлинности, поэтому они могут повторно возвращаться к instagram api на периодической основе, используя тот же токен для аутентификации. Bingo у вас есть доступ к данным пользователей, и вы можете создать rss-канал из него.

Ответ 9

Ответ прост.
Чтобы получить доступ к пользовательским данным, вы должны иметь действительный токен доступа.
У ink361 есть приложение в социальной сети http://vk.com/app3225087, в котором хранятся токены, прошедшие проверку подлинности, в db.
Его осталось оставить в db действительным и получить любые пользовательские данные, которые вы хотите