cakephp

年末に「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に配置します

https://github.com/sesser/Instaphp

今回はここに配置しました。
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}&amp;response_type=code&amp;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を公開されているのでそっちを使ってみるのもありかもです。

https://github.com/polidog/InstagramApiComponent