APIを使ってサイトを作ってみる

楽天APIを用いた楽天商品の検索サイトです。

デモ

詳しいことは以下のサイトを参考にしてください。
http://plaza.rakuten.co.jp/web……rvice/2000

?php
// ---------------------------------------------------------------
// 楽天商品検索API の利用サンプルコード (PHP)
// ---------------------------------------------------------------
// 以下を変更してPHP4が動作する公開領域におくだけでOK
// 詳細な仕様は以下を参照
// - 楽天ウェブサービス- http://webservice.rakuten.co.jp/
//
// UTF-8で保存すること
/* ---------------- 以下、変更部分 ------------------------------ */

// 自分のディベロッパーID

$DEVELOPER_ID = "自分のディベロッパーID";

//自分のアフィリエイトID

$AFFILIATE_ID = "自分のアフィリエイトID";

/* ---------------- 以上、変更部分 ------------------------------ */

//--------- API毎の固定値
// API名
$API_NAME       = "楽天商品検索API";

// APIのURL
$API_BASE_URL   = "http://api.rakuten.co.jp/rws/1.3/rest";

//オペレーション名
$OPERATION      = "ItemSearch";

//バージョン
$API_VERSION    = "2007-02-14";

//--------- リクエストパラメタの取得とAPIへのリクエストURL生成

// リクエストURL生成
$api_url = sprintf("%s?developerId=%s&affiliateId=%s&operation=%s",
$API_BASE_URL,$DEVELOPER_ID,$AFFILIATE_ID,$OPERATION);

//APIへのパラメタの連想配列
$api_params          = array(
    "keyword"        => "",
    "version"        => $API_VERSION,
    "shopCode"       => "",
    "genreId"        => "",
    "catalogCode"    => "",
    "hits"           => "",
    "page"           => "",
    "sort"           => "",
    "minPrice"       => "",
    "maxPrice"       => "",
    "availability"   => "",
    "field"          => "",
    "carrier"        => "",
    "imageFlag"      => ""
);

// リクエストパラメタ取得
reset($api_params);
while(list ($key, $val) = each($api_params) ){
    if(isset($_REQUEST[$key]) && $_REQUEST[$key] != ""){
        // リクエストパラメタにあれば、APIへのURLに追加
        $api_url = sprintf("%s&%s=%s",$api_url, $key, urlencode($_REQUEST[$key]));
        $api_params[$key] = $_REQUEST[$key];
    }else if(isset($api_params[$key]) && $api_params[$key] != ""){
        // パラメタにあれば、APIへのURLに追加
        $api_url = sprintf("%s&%s=%s",$api_url, $key, urlencode($api_params[$key]));
    }
}

// --------- API取得処理
// API結果ステータス
$status     = null;

// API結果メッセージ
$statusmsg  = null;

// 商品情報の配列
$item_array = array();

// 結果件数
$count      = 0;

// 商品検索ボタンを押された時、APIにリクエストを投げる
if( isset($_REQUEST['submit']) && $_REQUEST['submit'] == "商品検索" ){
    
    $contents = file_get_contents($api_url);
    
    // XMLをパースして構造体(values)に入れる
    $parser = xml_parser_create('UTF-8');
    xml_parse_into_struct($parser,$contents,$values);
    xml_parser_free($parser); 
    
    // 連想配列から値を取得
    if($values){
        $item_temp  = null;
        foreach ($values as $data) {
            if(isset($data['tag'])){
                // タグ名のよって分岐
                switch ($data['tag']) {
                    case 'STATUS':                          //共通パラメータ:Status
                        if(isset($data['value'])){
                            $status  = $data['value'];
                        }
                        break;
                    case 'STATUSMSG':                       //共通パラメータ:Statusに特化したメッセージ
                        if(isset($data['value'])){
                            $statusmsg  = $data['value'];
                        }
                        break;
                    case 'COUNT':                           //全体情報:検索数
                        if(isset($data['value'])){
                            $count  = $data['value'];
                        }
                        break;
                    case 'ITEM':                            //商品情報:ITEMタグ開始
                        if($data['type'] == 'open'){
                            $item_temp = array();
                        }else if($data['type'] == 'close'){ //商品情報:ITEMタグ終了
                            array_push($item_array,$item_temp);
                            $item_temp = null;
                        }
                        break;
                    default:
                        if(is_array($item_temp)){           //商品情報:ITEMタグ終了
                            if(isset($data['value'])){
                                $item_temp[$data['tag']] = $data['value'];
                            }
                        }
                        break;
                }
            }
        }
    }
    // 以下からHTML表示部分
}

header("Content-type:text/html;charset=UTF-8");
?>