Instagram公共RSS提要

时间:2013-02-07 09:38:28

标签: rss instagram

我想知道ink361是如何使用用户名创建Instagram RSS提要的。

示例Feed:http://ink361.com/feed/user/snoopdogg

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

任何见解都将受到赞赏。

感谢。

8 个答案:

答案 0 :(得分:11)

Instagram有一个可公开访问的RSS API,很难找到有关它的任何信息,但它适用于标签(我们确实使用它)。

对于标签,语法如下:

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

我不确定他们是否对用户的提要有类似的东西,因为我说很难找到有关它的信息,它可能会从一天到另一天消失,支持官方API,但现在它适用于标签。

这是关于它的官方博客文章(虽然它仅涵盖标签):http://blog.instagram.com/post/8755963247/introducing-hashtags-on-instagram

答案 1 :(得分:5)

@ user2543857的答案很好。不幸的是,Instagram数据的结构发生了变化。截至发布之日,这将有效。复制/粘贴到PHP服务器上的文件中并使用如下:yoursite.com/instarss.php?user = name_of_instagram_user这将返回有效的XML / RSS提要。

修改!!当然,页面/ JSON的输出已经改变了Instagram的新外观。这是更新的代码(2015年6月):

<?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'].'\'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->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;
?>

实际上,请勿使用上述代码。 我将来会尝试维持this Gist

编辑2016年12月:我已经厌倦了追逐每一个不断变化的Instagram输出,只是屏幕刮掉它并在几个月后改变它。我只是说使用API​​ ..如果您仍然有兴趣从用户的页面制作RSS源,this Gist应该让您知道如何做到这一点。

答案 2 :(得分:4)

感谢 torvin 提示。

以下是如何在不使用API​​的情况下在您的网站上获取Instagram图片。

从url和username创建json文件(将其设置为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 '<img src="'.$img1.'" />';
print '<img src="'.$img2.'" />';
print '<img src="'.$img3.'" />';
?>

答案 3 :(得分:3)

您可以使用/users/user-id/media/recent API端点访问任何Instagram用户的Feed。此端点需要access_token,您可以通过使用Instagram授权某些用户(不一定是您请求Feed的那个)来获取。接收access_token的流程描述为here

所以ink361可能正在做的是为自己(他们在Instagram上的用户)获得access_token并使用它来对任何其他用户的提要做出/users/user-id/media/recent请求。就这么简单。

答案 4 :(得分:2)

如果我是ink361,我会抓取Instagram页面,解析HTML并将其转换为RSS。没有API,没有授权,没有问题。

答案 5 :(得分:2)

不幸的是,user2543857上面的解决方案不再适用了。这是一个适用于当前个人资料页面源的版本。

从URL和用户名创建JSON文件(将其设置为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 Feed中的一些图片

<?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.'" />';
?>

答案 6 :(得分:-1)

您可以使用他们的API访问Instagram的RSS订阅源。他们的API使用oAuth2进行身份验证。我在我的个人博客上使用这种方法在主页上引入instagram图片。我怀疑这是ink361网站的工作原理。 Ink361将连接到instagram api并通过Instagram框提示用户登录,用于允许ink361访问他们的Instagram帐户。一旦认证成功,ink361站点将缓存由Instagram接收的令牌,因此他们可以使用相同的令牌定期重复返回到instagram api进行身份验证。 Bingo您可以访问用户数据,并且可以从中创建RSS订阅源。

答案 7 :(得分:-1)

答案很简单。
要访问用户数据,您必须拥有有效的访问令牌。
ink361在社交网络http://vk.com/app3225087中有一个应用程序,用于存储经过身份验证的用户访问db中的令牌。
它只剩下在db中找到一个有效的并获得你想要的任何用户数据