Ink361がユーザー名からInstagram RSSフィードをどのように作成しているか疑問に思いました。
フィードの例: http://ink361.com/feed/user/snoopdogg
ブログ記事: http://blog.ink361.com/post/23664609916/new-rss-instagram-feed-feature-on-ink361-com
どんな洞察もありがたいです。
ありがとう。
Instagramには一般公開されているRSS APIがあり、それに関する情報を見つけることは困難ですが、タグに対しては機能します(使用しています)。
タグの構文は次のとおりです。
http://instagr.am/tags/some-tag-you-want-to-follow/feed/recent.rss
私はそれについての情報を見つけるのは本当に難しいと言っていたので、それらがユーザーのフィードに似たものを持っているかどうかはわかりません。タグ。
これについての公式ブログ投稿があります(タグのみをカバーしています): http://blog.instagram.com/post/8755963247/introducing-hashtags-on-instagram
@ 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 を使用すると、その方法がわかります。
torvinに感謝します。
APIを使用せずにサイトでInstagramイメージを取得する方法は次のとおりです。
URLとユーザー名からJSONファイルを作成します(これを1日X回、cronジョブとして設定します)
<?
$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.'" />';
?>
/users/user-id/media/recent
APIエンドポイントを使用して、Instagramユーザーのフィードにアクセスできます。このエンドポイントにはaccess_token
が必要です。これは、Instagramでsome userを認証することで取得できます(フィードを要求するものとは限りません)。 access_token
を受信するプロセスは ここ で説明されています。
そのため、ink361が行うことは、自分(Instagramのユーザー)に対してaccess_token
を取得し、それを使用して他のユーザーのフィードに対して/users/user-id/media/recent
リクエストを行うことです。そのような単純な。
私がink361だったら、Instagramページをクロールし、HTMLを解析してRSSに変換するだけでした。 API、承認、問題はありません。
残念ながら、上記のuser2543857のソリューションは機能しません。ただし、現在のプロファイルページのソースで動作するバージョンは次のとおりです。
URLとユーザー名からJSONファイルを作成します(これを1日X回、cronジョブとして設定します)
<?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.'" />';
?>