我想知道ink361是如何使用用户名创建Instagram RSS提要的。
示例Feed:http://ink361.com/feed/user/snoopdogg
博文: http://blog.ink361.com/post/23664609916/new-rss-instagram-feed-feature-on-ink361-com
任何见解都将受到赞赏。
感谢。
答案 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中找到一个有效的并获得你想要的任何用户数据