Yahooが提供する商品検索APIのバージョンが上がり、古いバージョンのAPIからデータが取れなくなってしまいましたので、新バージョンの商品検索APIに対応するようPHPを修正いたしました。

新しくなった商品検索APIでは、レスポンスデータがJSONに統一されてしまっていましたので、JSONデコード処理を含めたPHPのサンプルコードをこちらの記事ではご紹介いたします。

PHPでwarningがでる

ディレクトリ型検索dtn」、「猫ネコサーチエンジン」の検索結果画面には、Yahoo商品検索APIを使った、検索ワードに連動した商品検索結果がでるようにしてあります。

久々に自分のサイトで検索をしてみたところ、PHPのWarningが複数表示されてしまっており、warningの内容を見るとAPI関連のエラーということが分かりました。

猫ネコサーチエンジンの検索結果にプログラムエラーが表示される
検索するとPHPのWarningが….

Yahoo APIの仕様変更

APIのサポートサイトを見てみると、いつの間にやらYahoo商品検索APIの仕様が変更されていたようで、API側データが空振りをし続けていたようです。

仕様を再確認していくと、APIのバージョンもVersion1からVersion3にまで変更がされており、取得可能なデータもXML、PHPserialize、JSONPが無くなってしまい、レスポンスはJSONに一本化されてしまっておりました。

Yahoo API 商品検索(V3)の詳細はこちらでご確認どうぞ。

途中にVer2があった??ということを考えると、かなりの期間でエラーが表示されてしまっていたのかもしれません。

APIの仕様に合わせてPHPを改修

リクエスト先URLの変更

APIのバージョン変更に伴い、リクエストURLも変更がされておりましたので、まずはここから修正です。

$YitemsearchUrl = "https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch";

基本パラメータの変更はなし

APIに投げるリクエストパラメータの仕様はほぼ昔のままっぽいので、以前に利用していたアプリケーションIDとバリューコマースアフィリエイトIDをそのまま流用できました。

ちなみに、YahooのAPIを利用するにあたっては、Yahoo IDでログインしてアプリケーションの登録が必要になります。アプリケーションの登録は、こちらのAPIご利用ガイドを見つつ簡単にできますので、使う場合はまず登録をして下さい。

それと、dtn.jpのようにこのAPIを使ってアフィリエイトをやってみたい方は、APIレスポンスにバリューコマースのアフィリエイトURLを生成してもらえるので、こちらのアフィリエイトIDの設定ガイドを見つつ設定をてみて下さい。

$YAppid = '0000000000000000000000000000000000000000000000000000000000';
$Yvalueid = "http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=0000000&pid=000000000&vc_url=";

クエリストリングの生成

アプリケーションIDとバリューコマースIDの二つのIDが準備できたら、あとは先程のリクエストURLにパラメータとこのIDをセットして投げればOKです。

//$KEYWORDに関連した、サイズ146の画像がある商品を10件
$YQuery = $YitemsearchUrl.'?appid='.$YAppid.'&affiliate_type=vc&affiliate_id='.urlencode($Yvalueid).'&query='.$KEYWORD.'&image_size=146&hits=10';
$YAPIBuff = file_get_contents($YQuery);

レスポンスのXML→JSON変更対応

これまではレスポンスデータはXMLでデータを受けていたのですが、商品検索(V3)からはレスポンスデータがJSONに統一されてしまったようです。そこで、$YAPIBuffに入ったJSONデータから商品名、商品画像、金額などのデータを拾い上げたいと思います。

PHPだとJSONを扱うにはjson_decode()関数を使ってデコードすることになりますが、扱うデータをオブジェクト型(stdClass)で扱うか、配列型(Array)で扱うかは選択をすることができます。

どちらかというと、オブジェクト型の方がアロー演算子(->)でデータを引っ張りやすそうなので、json_decode()の第2引数にfalseを指定してオブジェクト型で取ることにしました。このあたりはお好みで選択下さい。

$Yjson = new stdClass;
$Yjson = json_decode( $YAPIBuff , false ) ;

これで$Yjsonにオブジェクト型となったjsonデータが入ってくれたので、あとはforeachで必要なデータを取り出していきます。

foreachでのデータ取得方法は色々あると思いますが、分かりやすくするため、検索結果部分に該当するkeyのhitsを$YItemに一度放り込みつつやってみます。

商品名・URL・画像・金額があれば、「ディレクトリ型検索dtn」、「猫ネコサーチエンジン」の検索ワードに連動した商品検索が作れますので、name、url、exImage->url、priceといった値を空の配列に取り出して積んでいきます。

foreach($Yjson -> hits as $YItem){
  //タイトル用商品名
  $Yheadtitle[] = (string)$YItem -> name;        
  //アフィリエイトURL
  $YaffiliateUrl[] = (string)$YItem -> url;
  //アイテム画像[0]
  $YImageUrls[] = (string)$YItem -> exImage -> url;
  //価格
  $YPrice[] = (string)$YItem -> price;
}

以上でスライダー用配列にデータが入ってくれたので、また昔のように検索結果に検索連動商品広告を表示することができるようになりました。

おわりに

以前に作ったキーワードトレンドチェックサイトにもスライダーがあり、こちらにもAPIを使ったところが多々あったので、そこも一緒に直しておきました。

表示されている商品キーワードをみると、上位にあるものがマスク、体温計、アルコールジェルとかばっかりで、コロナ禍で世の中が一気に変わったんだということが良く分かる雰囲気になってました。

ECキーワードのランキングサイトKeyword Tool++にはコロナ関連商品ばかりが並ぶ
マスク、マスク、マスク……

会社そばのコンビニに感染者が出て閉店になったりと、益々近づいているコロナですが、色々と気を付けたいと思いました。

ABOUT dtn.jp

この運営ブログをみてdtn.jpの運営サイトに興味をお持ちになった方は下記のリンク集からサイトをご参照ください。PHP・SQL・JS・HTML・CSSや様々なAPIでゼロから立ち上げたサイトを複数運営しています。

dtn.jp関連サイト

  • ディレクトリ型検索エンジンdtn大手サイトは全てサービスを終了し、中小でも運営を継続するところがほとんどなくなってしまったディレクトリ型検索エンジンを2002年から細々運営しており、未だに細かい機能改修も行っております。申請されたサイトは実際に訪問して細かく確認をしているので登録までかなりお時間いただきます。
  • 猫ネコサーチエンジン猫・ペットサイト専用のディレクトリ型検索エンジンです。登録サイトはサイトのスクリーンショット付きでカテゴリに掲載しています。
  • 画像掲示板の泉画像やYouTubeやニコニコ動画が貼り付け可能な匿名画像掲示板です。27ジャンルに分かれた掲示板に、それぞれ100スレッドまで立てることが可能です。
  • ツイータンTwitter APIを使って10分おきに収集したTwitter(ツイッター)のトレンドワードや人気ハッシュタグデータを月別に集計してランキング形式で公開しています。
  • Keyword Tool++Yahoo APIや楽天サイトのデータを日次で収集したデータを元に、EC系キーワードをラインキング形式でご紹介しています。各ワードは検索ボリュームや関連語、24か月の検索ボリュームトレンドを確認も可能です。
  • 消費者金融の泉カードローン商品を取り扱う金融業者を一覧で比較可能としたサイトです。カテゴリ別、人気度別、限度額別、金利別に比較可能なサイトにしています。
  • TrendinGファッションモールに出店するブランドをアイテムヒット率でランキングとしたサイトです。まだβ版です。

各サイトの開発方法などについて

各サイトの開発方法や運用トラブルについては、当ブログで不定期にご紹介しています。Twitterで新着記事のお知らせもしています。宜しければフォロー下さい。