RSS-рассылка Instagram

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

Example feed: http://ink361.com/feed/user/snoopdogg

Blog post: http://blog.ink361.com/post/23664609916/new-rss-instagram-feed-feature-on-ink361-com

Любое понимание было бы оценено.

Благодарю.

16
Похоже, теперь, в 2018 году, они уходят с api и получение данных по rss-каналу не выполнимо? Всегда меняя вещи, сводит с ума.
добавлено автор drooh, источник
Я вижу, что RSS-канал пользователя ink361 больше не работает.
добавлено автор jonathanbell, источник
Согласно новому TOS вы/мы не сможем читать из фида пользователей и, вероятно, из ключевых слов.
добавлено автор PJunior, источник
browse-tutorials.com/snippet/php-instagram-rss-feed этот инструмент использует пейджинг. Таким образом, вы можете контролировать количество элементов.
добавлено автор ram4nd, источник

8 ответы

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

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

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

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

Here's an official blog post about it (although it covers only tags): http://blog.instagram.com/post/8755963247/introducing-hashtags-on-instagram

11
добавлено
С недавнего времени этот фид прекратил работать :( Я использовал его в нескольких проектах, у меня такое чувство, что они просто забыли об этом! Они, должно быть, заметили это ...
добавлено автор Nathan Hornby, источник
@Paulo нет, больше нет. Мы использовали его для приложения iOS, над которым я работал в то время.
добавлено автор Viktor Benei, источник
Привет, Виктор. Вы все еще используете RSS-канал? Мне было бы интересно или интересно в вашем случае использования (есть ли ссылка?). Благодаря!
добавлено автор Paulo, источник

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

EDIT!! Naturally, the output of the page/JSON has changed with instagram's new look/feel. Here is updated code (June, 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_feed .= '<title>'.$_GET['user'].'\'s Instagram Feed</title><link>http://instagram.com/'.$_GET['user'].'</link>'.$_GET['user'].'\'s Instagram Feed';

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

    $rss_feed .= '<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>'.date("r", $node->date).'display_src.'" />]]>https://instagram.com/p/'.$node->code.'/';

}//foreach "node" (photo)

$rss_feed .= '';

echo $rss_feed;
?>

Actually, don't use the above code. I'll try to maintain this Gist in the future.

EDIT December 2016: I'm tired of chasing the every-changing Instagram output only to screen scrape it and have it change a few months later. I'd say just use the API.. If you are still interested in making an RSS feed from a user's page, this Gist should give you an idea of how to do it.

5
добавлено
@marca спасибо! Просто помните с помощью тегов, вам придется часто запрашивать RSS, поскольку некоторые теги используются довольно часто, и данные будут быстро обновляться. Таким образом, сценарий не будет пропускать сообщения!
добавлено автор jonathanbell, источник
@ MPękalski Полезно знать! Рад, что это помогло.
добавлено автор jonathanbell, источник
Спасибо за код. Просто примечание, с PHP 5.5 я получал ошибку, вызванную htmlspecialchars , и мне пришлось изменить ENT_HTML5 на 'utf-8' , после чего она началась работать как прелесть.
добавлено автор MPękalski, источник
Удивительная работа, и замечательно, что вы также работаете с тегами. благодаря
добавлено автор marca, источник

Благодаря 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 feed

<?
$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 '';
print '';
print '';
?>
4
добавлено
теперь не работает
добавлено автор Srinivas08, источник
любая идея, как это сделать в 2018 году?
добавлено автор drooh, источник
Хорошая техника. Выход изменился, но его легко понять и применить снова к экрану экрана. :) CHEERS!
добавлено автор jonathanbell, источник
Хорошая техника. Я полагаю, что это может привести к сбою в будущем, если Instagram изменит формат форматирования JSON или изменит способ работы страницы.
добавлено автор Jeff Shillitto, источник

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

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

3
добавлено
Эта конечная точка в основном одинакова, но требует только идентификатор клиента.
добавлено автор Percival Ulysses, источник
Чтобы уточнить: это обеспечит доступ к ресурсу Instagram API , который будет JSON-документом, а не RSS-каналом.
добавлено автор raindev, источник

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

2
добавлено
В случае Instagram, что делает работу на самом деле проще! Посмотрите на исходный код instagram.com/snoopdogg , строка, начинающаяся с ["lib \/fullpage \/переходы "... это просто чистый JSON. Таким образом, вам даже не нужно разбираться с HTML вообще! Просто используйте JSON-парсер и бум! - данные для вашего RSS-канала готовы
добавлено автор torvin, источник
Проблема в том, что Instagram полностью генерируется javascript. Что кажется довольно сумасшедшим - особенно для сайта, который предназначен для мобильных пользователей, но делает сканирование его, как вы предлагаете, гораздо сложнее.
добавлено автор Nick F, источник
Ха, да, хороший момент!
добавлено автор Nick F, источник

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

1
добавлено
Привет, Мэтью, спасибо за ответ. Дело с Ink361 заключается в том, что они не используют oAuth. Я не одобрил приложение ink361 (и я не snoop dogg;), но я все еще могу получить RSS-опросов snoop dogg: ink361.com/feed/user/snoopdogg
добавлено автор johnnyknox, источник

К сожалению, решение пользователя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 '';
    print '';
    print '';
?>
1
добавлено
Замените «thumbnail» на «standard_resolution» для полного размера 640 x 640 или «low_resolution» для изображения 306 x 306.
добавлено автор Trae, источник

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

1
добавлено