Yahooが提供する商品検索APIの仕様が変わり、これまでのようにYahooショッピングの人気キーワードランキングのデータを取れなくなってしまいました。
無料提供されるAPIに仕様変更は付きものですが、そんなAPIに依存してサイトを思いつきで作ってしまうと結構ダメージが大きくなってしまいます。こちらの「ECキーワードランキング」がまさにそれで、APIで取得したキーワードのランキングデータを推移グラフにしているサイトなので、データが取得できなくなったことで、サイトのコンテンツが成り立たなくなってしまいました。
取れなくなったことをいくら嘆いても仕方ないので、別のAPIや解決を模索していたところ、スクレイピングで回避を思い付きましたので、そのあたりの経緯をご紹介したいと思います。
Yahoo APIの仕様変更
Yahooが提供するAPIのうち、商品検索関連のAPIの仕様が変更されたという話を先日ご紹介しました。詳細はこちらの記事にまとめてあります。
商品検索部分が直ってほっとしていたのですが、このショッピングAPIの仕様変更により、どうやら運営しているサイトの一つ「ECキーワードランキング」が、機能的に終わってしまったことに今さら気が付きました。
APIデータを元に構成したサイト
以前トレンドチェックツールを作ってみたとご紹介した「ECキーワードランキング」では、APIで取得したキーワードのランキングデータを元に、キーワードのトレンド情報をグラフ化して見えるようにしておりました。サイトの概要はこちらの記事でご確認ください。
APIで取得できたキーワードランキング
Yahooが提供する商品検索APIのVersion1では、type=rankingといったパラメータを付けてAPIに投げてあげると、Yahooショッピングの人気検索キーワードを最大100件まで取得するといったことができておりました。Version1のマニュアルからはだいぶ前に削除されていた機能ですが、実は直近まで普通に動いてくれていました。
レスポンスデータでは、「マスク」「こども マスク 日本製」という商品系キーワードが、「700」「350」といったYahooショッピング内の検索スコア付きで取得することができていたので、これを日次で貯めることにより、chart.js用に成形するといったことが簡単にできておりました。
この豊富なキーワードデータが存在していたため、この「dtnキーワードツール」のようなサイトも簡単に作ることができました。
キーワードランキングデータ提供の終了
ところが、APIがVersion3に変わってからは、「query/string:UTF-8エンコードされた検索キーワード」を付けてAPIに投げてあげないと受け取ってもらえなくなってしまいました。
つまり、こちらから「マスク」といった単語を投げた結果の中で、おすすめ順の商品データを取ることはできますが、これまでのようなYahooショッピング全体の人気キーワードを一覧で取得するといったことはできなくなってしまったようです。
しかも、レスポンスデータも商品のランキングデータとなってしまったため、「不織布 マスク 50枚 3層構造 不織布マスク 使い捨て マスク 白 ウイルス 花粉 ハウスダスト 風邪 大掃除」といった売れ筋商品名しか取れなくなってしまい、キーワードのスコアでグラフ化をするといったことは、ほぼ不可能になってしまいました。
代わりとなるキーワードランキングデータ
サイト用のDBをみてみると、2020年8月6日まではデータ取得ができていたようですが、この日以降は0件となっておりました。この日が商品検索API Version1の終了日となったようです。
このAPIから受け取るデータでコンテンツが成り立っていたサイトですので、サイトを死なせないためには、何か他のAPIでキーワードランキングデータを探さないといけません。
が、探してもこれがなかなか存在していませんでした。
楽天にも「商品ランキングAPI」といったものは存在していましたが、こちらもYahoo同様に単品商品名のランキングを抽出するといったようですし、Google APIも、Google Ads APIでキーワードの検索スコアを取ることはできましたが、その元となる全キーワードのランキングというものは提供していないようですので、そろそろ詰んだ感がでてきました。
キーワードランキングを発見
何か良いデータ元がないのやら・・・・あちこちAPIのまとめサイトやWEBを眺めていたところ、見つかりました!
楽天サイトの中に、楽天の人気検索キーワードを一覧で表示しているページが存在しました。しかも、有難いことにキーワードをランキング形式で紹介までしてくれています。
おわりに
RSSデータでもない単なるWEBページとなりますので、スクレイピングでHTMLからデータ取得をすることが必要そうですが、多少蜘蛛の糸が見えた気はしました。
引き続き、色々と考えてみたいと思います。