年末に「spacegram」というサイトを作成しました。
(宇宙以外も表示されちゃうのでどうにかしないとですけど)
その際に、CakePHPでInstagramのAPIを使ってみたので使い方など。
CoreのHttpSocket使ってゴニョゴニョしても良かったんですけど、
既に公開されているライブラリがあったのでそれを使いました。
環境
- CakePHP2.0.4
- PHP5.3.8
- ライブラリ:Instaphp
APIを使用する準備
ディベロッパー用のページにアクセスして、メニューのManageから必要な手続きを行います。http://instagram.com/developer/
今回必要なのは「CLIENT ID」と「CLIENT SECRET」
Instaphpを配置する
github からInstaphpを取得しvendorsに配置します
今回はここに配置しました。
app/Vendor/Instaphp
Instaphpの設定ファイルを作る
以下のファイルをコピーして自分用の設定ファイルを作成します。
app/Vendor/Instaphp/config.sample.xml
↓
app/Vendor/Instaphp/config.xml
InstagramのAPIで取得した「CLIENT ID」と「CLIENT SECRET」と「CALLBACK URL」を書きます。
<?xml version="1.0" encoding="utf-8" ?> <Config> <Instagram> <Endpoint timeout="10">https://api.instagram.com</Endpoint> <Version>v1</Version> <ClientId>「CLIENT ID」</ClientId> <ClientSecret>「CLIENT SECRET」</ClientSecret> <Scope>comments+likes+relationships</Scope> <OAuthPath>/oauth/authorize/?client_id={ClientId}&response_type=code&redirect_uri={RedirectUri}</OAuthPath> <OAuthTokenPath>/oauth/access_token/</OAuthTokenPath> </Instagram> <Instaphp> <RedirectUri>「CALLBACK URL」</RedirectUri> <CACertBundlePath></CACertBundlePath> <Cache Engine="File" Enabled="true"> <Settings> <Setting Path="tmp/cache"/> <Setting TTL="+2 Minutes"/> </Settings> </Cache> </Instaphp> </Config>
Controller
Controllerはこんな感じ。この例ではPopularを取得しています。
App::import('Vendor', 'Instaphp/Instaphp'); class StagramController extends AppController { public function index() { $api = Instaphp\Instaphp::Instance(); $response = $api->Media->Popular(); if (empty($this->response->error)) { $mediaData = $response->data; $this->set(compact('mediaData')); } else { $error = $response->error; $this->set(compact('mediaData')); } } }
View
Viewでは取得内容を表示するだけ。
<ul> <?php foreach ($mediaData as $item): ?> <li> <?php printf('<img src="%s" alt="%s">', $item->images->thumbnail->url, $item->caption->text); ?> </li> <?php endforeach; ?> </ul>
その他
検索する場合はこんな感じ
パラメーターはInstagramのAPIで確認してください。
$response = $api->Media->Search(Array( ));
タグで検索する場合はこんな感じ
$response = $api->Tags->Recent(検索したいタグ);
Likeを取得する場合はこんな感じ
$response = $api->Media->Likes(取得したい画像のID);
簡単ですね。CakePHPで使用されてるみたいなのですんなり出来ましたが、プラグインでもよかった気がしますね。
OAuth認証も出来るみたいですけど、今回は使っていません。
また、こちらのブログを運営されている@polidogさんがcomponentを公開されているのでそっちを使ってみるのもありかもです。