年末に「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 highlight=”6,7,13″]
<?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>
[/xml]
Controller
Controllerはこんな感じ。この例ではPopularを取得しています。
[php]
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’));
}
}
}
[/php]
View
Viewでは取得内容を表示するだけ。
[php]
<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>
[/php]
その他
検索する場合はこんな感じ
パラメーターはInstagramのAPIで確認してください。
[php]
$response = $api->Media->Search(Array( ));
[/php]
タグで検索する場合はこんな感じ
[php]
$response = $api->Tags->Recent(検索したいタグ);
[/php]
Likeを取得する場合はこんな感じ
[php]
$response = $api->Media->Likes(取得したい画像のID);
[/php]
簡単ですね。CakePHPで使用されてるみたいなのですんなり出来ましたが、プラグインでもよかった気がしますね。
OAuth認証も出来るみたいですけど、今回は使っていません。
また、こちらのブログを運営されている@polidogさんがcomponentを公開されているのでそっちを使ってみるのもありかもです。