CakePHP2でRESTfulなAPI作って、ついでにYahooAPI(知恵袋API)を利用する方法
取り急ぎのメモ。
まずは初期設定。ググれば出てくる。
app/Config/routes.phpの一番上に以下を記載。下の方に書くとイマイチらしい。
<?php
/**
* REST Router
*/
//利用するAPIやModelが増えるたびに追記
Router::mapResources('my_datas');
Router::mapResources('yahoo_apis');
//RESTfulにするおまじない
Router::parseExtensions();
/**
* Routes configuration
*
以下略
その後、以下のページを参考にController調整とViewの削除。
ちなみにRouterの設定はしなくてもで大丈夫でした。
http://qiita.com/aokazu/items/bae64fe4decc2cd2c933
Datasourceを使ってYahooAPIをModelにする
基本コレを参考に作ればOK。
http://book.cakephp.org/2.0/ja/models/datasources.html
今回利用したYahooAPIは知恵袋APIだったのでXML形式しか用意されてなかったり、パラメータがapiKeyではなくappidだったり異なる部分が多いので92行目付近を以下修正。
/**
* CRUD のうちの R を実装します。 ``Model::find()`` への呼び出しは
* ここに来ます。
*/
public function read(Model $model, $queryData = array(),
$recursive = null) {
/**
* ここでは、前述の calculate() メソッドで返されるカウントの
* 実際の処理を行います。リモートソースのチェックをするか、
* またはそれ以外の方法でレコードカウントを取得します。
* ここでは単に 1 を返しているので、 ``update()`` や
* ``delete()`` ではレコードが存在するものとみなされます。
*/
if ($queryData['fields'] === 'COUNT') {
return array(array(array('count' => 1)));
}
/**
* ここではリモートデータを取得およびデコードして返します。
*/
$queryData['conditions']['appid'] = $this->config['apiKey'];
$xml = $this->Http->get(
'http://chiebukuro.yahooapis.jp/Chiebukuro/V1/questionSearch',
$queryData['conditions']
);
$res = simplexml_load_string($xml);
if (is_null($res)) {
$error = "Failed loading XML\n";
throw new CakeException($error);
}
return array($model->alias => $res);
}
タグ検索を用意したい
なんか動かない場合
取り急ぎapp/tmp/chacheあたりを削除。コレでダメなら
cat app/tmp/logs/error.log