私は、ink361 がどのようにしてユーザー名から Instagram RSS フィードを作成しているのか疑問に思っていました。
フィードの例: http://ink361.com/feed/user/snoopdogg
ブログ投稿: http://blog.ink361.com/post/23664609916/new-rss-instagram-feed-feature-on-ink361-com
任意の洞察をいただければ幸いです。
ありがとう。
私は、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
ユーザーのフィードに似たようなものがあるかどうかはわかりません。これに関する情報を見つけるのは非常に難しく、公式 API を支持して日ごとに消える可能性があると私は言いましたが、今のところは機能しますタグ。
これについての公式ブログ投稿は次のとおりです(ただし、タグのみをカバーしています):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;
?>
実際には、上記のコードは使用しないでください。今後もこの Gistを維持するように努めます。
編集 2016 年 12 月: 常に変化する Instagram の出力を追跡して、画面をスクレイピングし、数か月後に変更することにうんざりしています。API を使用するだけでよいと思います。まだユーザーのページから RSS フィードを作成することに興味がある場合は、この Gistでその方法についてのアイデアが得られるはずです。
/users/user-id/media/recent
API エンドポイントを使用して、Instagram ユーザーのフィードにアクセスできます。このエンドポイントには、 Instagram で一部のユーザーaccess_token
を承認することによって取得できる が必要です(必ずしもフィードを要求するユーザーであるとは限りません)。受け取りまでの流れはこちらで解説しています。access_token
したがって、ink361 が行っている可能性があるのはaccess_token
、自分自身 (Instagram のユーザー) を取得し、それを使用して/users/user-id/media/recent
他のユーザーのフィードを要求することです。そのような単純な。
ヒントをくれた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.'" />';
?>
APIを使用して、InstagramのRSSフィードにアクセスできます。彼らのAPIは認証にoAuth2を使用します。私は個人のブログでこの方法を使用して、ホームページにInstagramの写真を取り込みます。これがink361サイトの仕組みだと思います。Ink361はInstagramAPIに接続し、InstagramアカウントへのInstagramアクセスを許可するために使用するInstagramボックスを介してユーザーにログインを促します。ink361サイトは、認証が成功すると、Instagramが受信したトークンをキャッシュするため、認証に同じトークンを使用して、定期的にInstagramAPIに繰り返し戻ることができます。ビンゴはユーザーデータにアクセスでき、そこからRSSフィードを作成できます。
答えは簡単です。
ユーザー データにアクセスするには、有効なアクセス トークンが必要です。
ink361 にはソーシャル ネットワークhttp://vk.com/app3225087にアプリがあり、認証されたユーザーのアクセス トークンを db に保存します。
dbで有効なものを見つけて、必要なユーザーデータを取得するだけです