CakePHPで楽天WEBサービスを使う(データ取得をモデルでやってみる)

PHP初心者、CakePHP初心者の私が、無謀にも楽天WEBサービスをCakePHPで作ってみよう、という試み(^^;)

[tip]このシリーズはこちらのカテゴリーで一連の記事を見ることができます。[/tip]

とりあえずは、CakePHPのインストールや設定等の説明は省きます。

いきなりコーディングできる状態から話を進めていきます。

で、CakePHPで楽天WEBサービス(API)を使ってページを作っていくわけですが、いきなり思いつきで「データ取得はコントローラーではなく、モデルでやりたい」という壁にぶつかってしまいました。

とりあえずできたのですが、まだまだ糞コード(^^;)。詳しい方はどんどんつっこんでくださいね(^^;)

まず、今回はCakePHPで、データベースは使用しないので、モデル全体でデータベースを使用しないことを明記します。以下のファイルを追加します。

app/app_model.php

<?php

class AppModel extends Model {
var $useTable = false;
}

?>

次に、楽天WEBサービスのうち、商品検索を使用して、データを取得するモデルを作成します。

いちを、findAllのみをオーバーライドして、商品情報を取得しています。

app/models/Item.php

<?php

class Item extends AppModel {
var $name = "Item";

function findAll() {

uses('Xml');

$reststr = 'http://api.rakuten.co.jp/rws/1.12/rest?'.
'developerId=(デベロッパーID)'.
'&keyword='.urlencode('キーワード').
'&affiliateId=(アフィリエイトID)'.
'&operation=ItemSearch'.
'&version=2008-09-01';

$getxml = new XML($reststr);
$xml_array = Set::reverse($getxml);

return $xml_array['Response']['Body']['ItemSearch']['Items']['Item'];

}
}

?>

次に、コントローラーは以下の感じ。

app/controllers/Items_controller.php

<?php

class ItemsController extends AppController {
var $name = 'Items';
var $uses = 'Item';

function index(){
$data = $this->Item->findAll();
$this->set('items', $data);
}

}

?>


ビューは以下のような感じ。

app/views/Items/index.ctp

<?php foreach ($items as $product): ?>
< ?php
//商品名を表示
echo $html->link($product['itemName'],$product['affiliateUrl'],null,null,false);
?>
<br />
< ?php
echo $html->link($html->image($product['mediumImageUrl']),
$product['affiliateUrl'],
array(
'target' => '_blank' ,
'title' => $product['itemName'],
'alt' => $product['itemName']),
null,false);
?>
<br />
< ?php //価格を表示
echo number_format($product['itemPrice']).'円';
?>
< ?php
echo $product['reviewCount']."件のレビュー";
echo " 評価:".$product['reviewAverage']."点";
?>
<br />
<br />
< ?php endforeach; ?>

これをブラウザでプレビューしてみると以下のようになります。

う~ん。。。いきなり、ここまでで3日間を費やしてしまった。。。