梅酒の情報をYahoo!ショッピングと楽天のAPIから正確に取得する
梅酒.inでは銘柄の画像などをYahoo!ショッピングのAPIと楽天の商品検索APIを利用して取得しています。
↑ ほぼ間違いなくその商品の画像を取得できています。
なぜAPIを2個使っているか
Yahoo!ショッピングAPIで取得できる画像のサイズ(高さと幅)は統一されていますが、楽天ウェブサービスのほうは統一されていません。そのため本当はYahoo!ショッピングだけを利用したかったのですが、楽天市場でしか売られていない梅酒もたくさんあったため、そういうわけにもいきませんでした。
正確にその銘柄の情報を取得するには
梅酒の銘柄には「蜂蜜梅酒」や「黒糖梅酒」のように複数の酒蔵から同じ名前の商品が販売されていることがあります。そのため、単純に銘柄名で検索するだけだと違う会社の梅酒がヒットしてしまう場合があります。
そこで、次の項目をひとつずつ、Yahoo!ショッピングAPI、楽天ウェブサービスの順に交互に実施して最初に取得できたデータを採用することとしました。
- 「銘柄(フルネーム) + 製造元」でデータを取得
- 「銘柄(略称) + 製造元」でデータを取得
- 「銘柄(フルネーム)」でデータを取得
ここでフルネームと略称と2通りあるのは、たとえば「星舎無添加 上等梅酒」だったら「上等梅酒」と呼ばれることもあり、商品情報としてどの名称が登録されているかわからないためです。
このように製造元とあわせて検索すれば、ほぼ確実に正確な情報を取得できます。
取得データのフィールド名を共通化する
APIは各社がそれぞれ独自のフォーマットを使用しているため、画像のURLや商品ページのURLなど、それぞれまったく別のレスポンスフィールドで返されてきます。
そこで、とりあえず楽天から取得したデータをYahoo!ショッピングのレスポンスにあわせて要素名を変更することとしました。(必要最小限で)
なお、取得したデータはXMLから自動的にPHP配列に変換し、それを丸ごとシリアライズしてデータベースに格納しています。
楽天の場合はPCかモバイルかを指定する必要がある
Yahoo!ショッピングAPIで取得される商品ページのURLは、PCとモバイルの両方に対応しています。しかし、楽天ウェブサービスではリクエスト時にPCかモバイルかを指定する必要があります。
そこで、楽天のデータを取得できた場合にはモバイルのデータもあわせて取得してデータベースに格納するようにしました。
あとは、ページを表示する際にPCかモバイルかを判別できるので、それにあわせて利用するデータを切り替えています。
これらをバックグラウンドで実行する
APIへのリクエスト回数が多くなるため、ページ表示時に実行するわけにはいきません。また、銘柄はユーザが追加できるようにしているため、追加された情報をあらかじめ確認しておく必要もあります。そのため、ページ表示時ではなくバッチ処理でデータを取得するようにしています。
というわけで、そんな 梅酒.in をよろしくお願いします。
すぱしーばYahoo!ショッピングapi。