楽天商品検索API (楽天ウェブサービス)で商品情報を取得してみる
現在制作しているサイトで楽天ウェブサービスを使用する事になったので、作った関数などを張り付けてみる。
検索にヒットさせやすくするために色々調べてみた結果、全文検索というものが気になったけれどレンタルサーバーでは導入できなさそうだったので簡易的な処理を加えてみた。
//検索文字作成(カナに変換) function kana($str){ //削除する条件を設定 $a = array( '!', '”', '#', '$', '%', '&', '’', '(', ')', '=', '〜', '|', '-', '^', '¥','`', '{', '@', '[', '+', '*', '}', ';', ':', ']', '<', '>', '?', '_', ',', '.', '/', '「', '」', '・', '!', '"', '#', '\$', '%', '&', "'", '\(', '\)', '=', '~', '\|', '-', '\^', '\\\\','`', '\{', '@' , '\[', '\+', '\*', '}', ';', ':', ']', '<', '>', '\?', '_', ',', '\.', '/', '「', '」', '・', '♪', '☆', '★' ); $str = str_replace($a, " ", $str); //かな→カナ, 全角英数→半角英数変換 return mb_convert_kana( $str, "asKC", "UTF-8" ); }
■使用法
kana( [ここに取得した商品名を入れる] )例:うたの☆プリンスさまっ♪Debut
↓
ウタノ プリンスサマッ Debut
発売日を取得するとYYYY年MM月DD日といった形で取得されるので、データベースにDATE型(YYYY-MM-DD)で格納するための変換処理。
上旬・中旬・下旬・未定などの商品を判別させるためにそれぞれ98、97、96、99と番号を振っている。
//年月日→YYYY-MM-DD変換 function changeDate($str){ $a = str_replace(array("年", "月", "日"), array("-", "-", ""), $str); $a = explode("-", $a); switch( count($a) ): case 1://年内発売予定の商品 $relDate = "99-99-99"; break; case 2://月内発売予定の商品 $relDate = sprintf("%4d-99-99", $a[0]);//YYYY年未定 break; case 3://発売日が決まっている商品 if($a[2] == ""){ $relDate = sprintf("%04d-%02d-99", $a[0], $a[1]);//YYYY年mm月予定 }elseif($a[2] == "上旬" || $a[2] == "頃"){ $relDate = sprintf("%04d-%02d-98", $a[0], $a[1]);//YYYY年mm月上旬 or 頃 }elseif($a[2] == "中旬"){ $relDate = sprintf("%04d-%02d-97", $a[0], $a[1]);//YYYY年mm月中旬 }elseif($a[2] == "下旬"){ $relDate = sprintf("%04d-%02d-96", $a[0], $a[1]);//YYYY年mm月下旬 }else{ $relDate = sprintf("%04d-%02d-%02d", $a[0], $a[1], $a[2]);//YYYY年mm月dd日 } break; endswitch; return $relDate; }
商品の取得自体はXMLなのでsimplexml_load_stringを使用する事で読み込めるのだが、楽天商品検索APIが出力するXMLはそのままでは読み込めない。
理由はフィールド名の所に":(コロン)"が入っているためで、もし関数を用いてパースする場合は文字の置換をする必要がある。
楽天ブックスのDVDサーチを例にとると、置き換えする箇所は以下の通り
header:Header → Header
booksDVDSearch:BooksDVDSearch → BooksDVDSearch
処理の流れはこのような感じになった
$contents = file_get_contents( [楽天APIに投げるリクエストURL] ); $val = array("header:Header", "booksDVDSearch:BooksDVDSearch"); $replace = array("Header", "BooksDVDSearch"); $res = str_replace($val, $replace, $contents); $xml = simplexml_load_string($res);