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

新しくなった商品検索APIではレスポンスデータがJSONに統一されてしまいましたので、PHPでJSONデータをパースするサンプルコードなどもご紹介をしたいと思います。

PHPでwarningが発生

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

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

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

YahooショッピングAPIの仕様が変更されていた

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

改めて、APIの仕様をサポートサイトで確認してみると、これまで使っていたAPIのVersion1がVersion3にまで変更されており、取得可能なデータもXML、PHPserialize、JSONPが無くなり、JSONに一本化されておりました

商品検索(v3)

商品検索はYahoo!ショッピングの商品検索結果を取得することが可能なAPIです。
デベロッパーは日本最大級の商品データベースからキーワードでの商品検索をはじめ、JANコード、ジャンルカテゴリID、ブランドID、ストアIDでの商品検索を行い、JSON形式で各種商品情報を取得できます。

Yahoo API 商品検索(V3)の詳細

前にPHPのコードを書いた時にはVersion1でしたが、既にVersion3となっておりましたので、途中にVersion2があった?ということを考えると、かなりの期間にエラーが表示されてしまっていたのかもしれません。成果がほとんど期待できない検索連動広告でしたが、エラーが表示されて相当見栄えが悪い状態が続いてしまっていたようです。お恥ずかしい限りでした。

Yahoo API 商品検索(v3)向けPHP

リクエスト先URLの確認

APIのバージョン変更に伴い、リクエストURLも変更がされておりましたので、まずはそこから修正をしていきます。ヤフーの商品検索API Version3用のリクエストURLは下記となっておりました。

【JSON】

https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch

Yahoo API 商品検索(v3)のリクエストURL

PHPで設定していたリクエストURLをこのURLに変更しておきます。

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

リクエストパラメータに変更はなし

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

YahooのショッピングAPIを利用するためには、アプリケーションIDとバリューコマースアフィリエイトIDの2つのキーが必要となります。お持ちでない場合には、下記の作業を一通りすれば無料で取得することができます。

  1. YahooのIDを取得する
  2. YahooのデベロッパーネットワークでアプリケーションIDを取得する
  3. バリューコマースに登録する
  4. バリューコマースでYahooショッピングと提携する
  5. Yahooショッピングのテキスト広告を作成する
  6. テキスト広告からバリューコマースアフィリエイトIDを生成する

YahooのショッピングAPIアフィリエイトについては、下記に細かくやり方やコツをまとめておきました。実践してみたいという方はこちらもご参照下さい。

APIリクエストを生成する

アプリケーションIDとバリューコマースIDの二つのIDが準備できていれば、あとは先程のリクエストURLにパラメータとこのIDをセットして投げればJSONレスポンスデータを受け取ることができます。

例として、検索キーワードに関連したサイズ146の画像が用意されている商品を10件取得するリクエストは、このような形で生成して送信させています。

//Yahoo API 商品検索(v3)リクエストURL
$YitemsearchUrl = "https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch";

//お持ちのYahooアプリケーションID
$YAppid = "あなたの登録したアプリケーションID";

//生成したバリューコマースアフィリエイトID
$Yvalueid = "あなたのバリューコマースアフィリエイトID";

//キーワード
$KEYWORD = "キーワード";

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

//file_get_contents()でJSONを取得
$YAPIBuff = file_get_contents($YQuery);

JSONレスポンスデータの処理方法

ヤフーショッピングAPI Version1の時には、レスポンスデータはXMLで受け取っていましたが、商品検索(V3)からはレスポンスデータがJSONに統一されました。

そこで、先ほどのコードで$YAPIBuffに入ったJSONデータの中から、商品名・商品画像・金額などのデータを拾い出したいと思います。

//file_get_contents()でJSONを取得
$YAPIBuff = file_get_contents($YQuery);

PHPでは、JSONデータをそのまま扱うことができないため、json_decode()という関数で「配列型」、もしくは「オブジェクト型」に変換します。アロー演算子「->」を使うことができるオブジェクト型の方が楽かもしれません。

PHPでJSONデータをパースする

取得した「$YAPIBuff」をjson_decode()する際に、第2引数部分にfalseを指定しておけばオブジェクト型で取ることができます。

//標準クラスのインスタンスを生成
$Yjson = new stdClass;
//オブジェクト型でデコードする
$Yjson = json_decode( $YAPIBuff , false ) ;

これで$Yjsonにオブジェクト型となったJSONデータが入ってくれたので、アロー演算子「->」をforeachで回していくことで、必要なデータを取り出していくことができます。

$Yjsonに入ったJSONデータから、商品名・URL・画像・金額を抜き出していきます。バラバラに取り出したそれぞれのデータは、それぞれ空の配列に積み上げて保存していきます。

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

商品名・URL・画像・金額といった、検索連動広告に必要となるデータが全てそろいましたので、取得したデータを元にして連動広告をフロントで作り上げていけば復旧完了です。

おわりに

以前に制作したキーワードトレンドチェックサイトにもキーワード連動広告のスライダーを作ってありましたので、こちらもプログラムの修正をしておきました。

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

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で新着記事のお知らせもしています。宜しければフォロー下さい。