楽天コスプレショップを5日で作る方法

楽天のコスプレショップ紹介サイトを作成しましたので、紹介と楽天コスプレショップを5日で作る方法を紹介したいと思います。
いくつか自分なりのポイントがありますので、ご参考になればと思います。
まずは今回のサンプルサイト
http://moeten.info/rakuten/

#実はFireFoxCSSを合わせてないので近日中に修正します。

公開日 2009年1月26日
制作者 むぎ。
製作期間 5日
使用言語 PHP,MySQL
使用API 楽天API
ページ URL

今回の完成までのスケジュール

  • 木曜日に友達に相談し、その場でメモを作成。
  • 金曜日にデザインの完成
  • 土曜日にプログラムのメイン部分完成
  • 日曜日にプログラム・細かい部分の修正
  • 月曜日にリリース

となりました。
作成する上でのポイントはこちら

  • 1.目的を作成する
  • 2.一人で作らない
  • 3.できた段階ですぐに人に必ず見せる。
  • 4.アイディアをお互いに相談する(できればご飯を食べながら)
  • 5.完成後は必ず打ち上げをする
  • 6.1に戻る

作る喜びと作った喜びを共有することがテンションを保つ上で大切だと思ってます。また、目的はかならずはっきりさせるとテンションは下がりにくいです。

開発者向け情報

楽天APIはREST形式にて簡単に情報の取得が可能です。
公式サイトのオンラインドキュメントが非常に分かりやすいです。

http://api.rakuten.co.jp/rws/1.12/rest?
developerId=[YOUR_developerID]
&operation=ItemSearch
&version=2008-09-01
&keyword=%E7%A6%8F%E8%A2%8B
&sort=%2BitemPrice

PHPXML形式を便利に扱うライブラリがPEARにありますのでこちらを使用することでかなりの作業効率が上がります。
実際のプログラムはこちら

function searchRakutenItem( $url ){
    require_once 'XML/Unserializer.php';
    $file = file_get_contents( $url );
    $Unserializer =& new XML_Unserializer(
                                          array('parseAttributes' => true,
                                                'targetEncoding'  => 'utf-8'
                                                )
                                          );
    $status = $Unserializer->unserialize($file);
    if (PEAR::isError($status)) {
        die($status->getMessage());
    }
    $xml = $Unserializer->getUnserializedData();
    $xml = $xml["Body"]["itemSearch:ItemSearch"]["Items"]["Item"];
    return $xml;
}

これだけできれいに配列に変換してPHPで簡単に扱うことができます。
あとは配列をきれいにスタイルシートなHTMLで出力するだけです。

function data2listhtml($items){
    $html = "";
    $html .= <<<EOD
<ul class="itemlist">
EOD;
    foreach( $items as $number => $item ){
        $item["itemName"]    = mb_strimwidth( $item["itemName"] , 0 , 50 , "...");
        $item["itemCaption"] = mb_strimwidth( $item["itemCaption"] , 0 , 70 , "...");
        if( $item['reviewCount'] ){
            $REVIEW  = <<<EOD
<span class="review"><a href="" target="_blank">レビュー{$item['reviewCount']}件 {$item['reviewAverage']}</a></span>
EOD;
        }else{
            $REVIEW  = <<<EOD
<br>
EOD;
        }
        $point = intval( $item["itemPrice"] * 0.01 ) . "pt付き";
        $html .= <<<EOD
 <li><span class="thum"><a href="{$item['affiliateUrl']}" target="_blank"><img src="{$item['mediumImageUrl']}" title="{$item['itemCaption']}"></a></span><span class="title">{$item['itemName']}</span><!--<span style="display:block;width:90px;height:30px;font-size:10px;">{$item['itemCaption']}</span>--><span class="price">{$item["itemPrice"]}円</span><span class="point">({$point})</span>{$REVIEW}</li>
EOD;
    }
    $html .= <<<EOD
</ul>
<br clear="all"/>
EOD;
    return $html;
}

こうすることでメインのプログラムは2行でできます。

$items = searchRakutenItem( $url );
echo data2listhtml( $items );

キャッシュ機能やソート機能を付ければさらに便利になるでしょう。