Yahoo!ショッピング商品検索(v3)APIで取得したjsonから利用したい情報だけ取得する方法
Yahoo!ショッピングAPIで商品検索して取得したデータの中から、利用したいデータだけ取得する方法のメモ。
前提
java 14.0.1
jackson 2.9.10
ショッピング:商品検索(v3) - Yahoo!デベロッパーネットワーク
↑は結構単純な内容なので、公式ドキュメントに苦手意識があっても理解しやすいと思います。
jsonデータを取得する
公式で紹介されている、以下のURLをリクエストURLに指定します。
https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?appid=<あなたのアプリケーションID>&query=nike
すると、以下のようなデータが取得できます。
(正確には「結果を読み取ってJsonNodeに変換する処理」を実装する必要がありますが、実装方法については省略します)
また、正確なデータだと文字数多すぎて見にくいので一部省略しています。
{ "totalResultsAvailable": 482351, "request": { "query": "nike" }, "hits": [ { "index": 1, "name": "Nike ナイキ ウィメンズ エアフォース 1 ", "description": "ナイキの顔であり、世界中で絶大な人気を誇るエアフォース1。", "url": "https://store.shopping.yahoo.co.jp/topcrept/nike240.html", "image": { "small": "https://item-shopping.c.yimg.jp/i/c/topcrept_nike240", "medium": "https://item-shopping.c.yimg.jp/i/g/topcrept_nike240" } }, { "index": 2, "name": "ナイキ NIKE スニーカー Nike Air Force 1", "description": "海外輸入商品となりますので、外箱にキズやヘコみ等がある場合がございます。", "url": "https://store.shopping.yahoo.co.jp/topcrept/nike220.html", "image": { "small": "https://item-shopping.c.yimg.jp/i/c/topcrept_nike220", "medium": "https://item-shopping.c.yimg.jp/i/g/topcrept_nike220" } } ] }
利用したい情報だけ取り出す
JsonNode json = 読み取ったjsonデータ; // 総検索ヒット件数を取得したい int allHitCnt = json.get("totalResultsAvailable").asInt(); // 検索クエリを取得したい String serchedQuery = json.get("request").get("query").asText(); // 検索結果1件目の名前を取得したい String serchedQuery = json.get("hits").get(0).get.("name").asText(); // 検索結果2件目の画像(小)を取得したい String serchedQuery = json.get("hits").get(1).get.("image").get("small").asText();
おわりに
jsonはただのデータフォーマットだから、他のAPIから取得したり自作のjsonデータを取得したりする時に応用できるな。
でもまだ課題があって、
jsonNodeオブジェクトのアクセサメソッドget,pash,withの違いと、 asTextとtextValueの違いを調べないと。