[PHP]Instagramの情報を取得しサムネイル表示させる

最近書評ばかりなので、たまにはWeb製作者・PHPerらしいことを書こうかと思う。

Instagramは写真を加工して共有できるアプリだ。

このウェブサービスは、iPhoneの専用アプリで操作することがメインになってるため、画像やユーザ情報などを取得できるAPIは用意されていない。
なければ自分で取得できるPHPスクリプト作ってしまえばいいと思い、色々調べてみた。

すると、画像が表示されるページ(例:http://instagr.am/p/eQJh/)のHTMLにはメタタグ内に画像URLやユーザ名を含んでることがわかった。
ソースを表示するとhead内に<meta property=”og:image” content=”画像URL” />といった記述がある。

InstagramのURLをもとに、以下のように処理します。

— ソースここから —
<?php

$url = “http://instagr.am/p/eQJh/”;
$fp = file_get_contents($url);

/* タイトルを取得 */
preg_match(‘/(]+)property=”?og:title”?([^>]*)>)/i’, $fp, $match);
preg_match(‘/content=”?([^”]+)”?/i’, $match[0], $title);

/* イメージURLを取得 */
preg_match(‘/(]+)property=”?og:image”?([^>]*)>)/i’, $fp, $match);
preg_match(‘/content=”?([^”]+)”?/i’, $match[0], $image);

/* コメントを取得 */
preg_match(‘/(]+)property=”?og:description”?([^>]*)>)/i’, $fp, $match);
preg_match(‘/content=”?([^”]+)”?/i’, $match[0], $description);

echo $title[1].”<br>”;
echo $image[1].”<br>”;
echo $description[1];

?>
— ソースここまで —

これを画像だけの表示にするには、本来なら

header("Content-type: image/jpeg");
readfile($image[1]);

で表示できるはずなのだが、何故か上手くいかなかったので、

echo "<img src="{$image[1]}" alt="">";

で表示することにした。

——– 追記 (2010/12/06) ————–

書き忘れがあったので追記。

取得したURLをサムネイル画像の大きさにするため、URL画像の_7.jpgを_5.jpgに変更するとよい。_5.だと150pxになるからだ。

つまり


$image[1] = str_replace("_7.", "_5.", $image[1]);

とすればよい。