このページではソースコードの一部分を簡単な解説をしています。
作成したサンプルページはコチラから
完成品のソースコードはgithubにあります
概要
APIを叩く練習として、楽天APIを利用してサンプルページを作成しました。 楽天APIにはいろいろなAPIがあるのですが、今回は楽天トラベルランキングAPIを利用して温泉宿TOP10のページを作ってみました。
Fetch APIで楽天トラベルランキングAPIからデーターを取得する
callApi関数はAPIを叩きデーターを取得しjsonを返す関数です。
1 2 3 4 5 6 7 8 9 |
// APIを叩く async function callApi(url, params) { // URLSearchParamsは連想配列からクエリパラメータを作成してくれる標準APIです。 const query = new URLSearchParams(params); const response = await fetch(url + query); const data = await response.json(); return data; } |
callApi関数は二つの引数を必要とします。一つ目の引数urlにはAPIエンドポイントを渡します。今回はこちらのページに記載されているリクエストURLを引数urlとして渡しています。二つ目の引数paramasには先ほどと同じページに記載されている入力パラメーターから必要なパラメーターを連想配列で渡します。下記のようにして引数を設定しました。
1 2 3 4 5 6 |
const url = "https://app.rakuten.co.jp/services/api/Travel/HotelRanking/20170426?"; const params = { applicationId: "ご自身のアプリIDを入力してください", // アプリID genre: "onsen", // ジャンル指定 }; |
入力パラメーターapplicationIdは必須項目になりますこちらのページから各自取得をお願い致します。もう一つの 入力パラメーターgenreには取得したいランキングのジャンルを指定しています。今回は温泉宿のランキングを取得したかったのでonsenとしています。
引数paramsはURLSearchParamsインターフェイスでクエリパラメータを作成してurlと一緒にfetchAPIPへ渡し、jsonメソッドでjsonを取得しています。非同期処理にはasync/awaitを使っています。
DOM操作を行いページに表示させる
renderHtml関数はcallApi関数から受け取ったデータをhtmlにレンダリングする関数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// callApi関数から受け取ったデータをhtmlにレンダリングする async function renderHtml() { const url = "https://app.rakuten.co.jp/services/api/Travel/HotelRanking/20170426?"; const params = { applicationId: "ご自身のアプリIDを入力してください", // アプリID genre: "onsen", // ジャンル指定 }; const data = await callApi(url, params); const fragment = document.createDocumentFragment(); const template = document.getElementById("template"); for (let i = 0; i < data.Rankings[0].Ranking.hotels.length; i++) { const hotel = data.Rankings[0].Ranking.hotels[i].hotel; const clone = template.content.cloneNode(true); clone.querySelector("h3").textContent = hotel.rank + "位" + " " + hotel.middleClassName; // 順位 + 施設の所在都道府県 clone.querySelector("img").src = hotel.hotelImageUrl; // 施設画像URL clone.querySelector("a").textContent = hotel.hotelName; // 施設名 clone.querySelector("a").href = hotel.hotelInformationUrl; // 施設情報ページURL clone.querySelector("p").innerHTML = hotel.userReview; // お客様の声 fragment.appendChild(clone); } document.querySelector("ul").appendChild(fragment); } |
callApi関数から受け取ったデータの中から必要なパラメーターをDOM操作で表示させています。
最後までお読みいただきありがとうございました。