Web的な何か

JavaとかPHPとかやってます。最近はAndroidばっかやってます。

楽天商品検索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);