楽天トラベルランキングAPIをJavascriptで叩いてサンプルページを作ってみる

スポンサーリンク

このページではソースコードの一部分を簡単な解説をしています。

作成したサンプルページはコチラから
完成品のソースコードはgithubにあります

スポンサーリンク

概要

APIを叩く練習として、楽天APIを利用してサンプルページを作成しました。 楽天APIにはいろいろなAPIがあるのですが、今回は楽天トラベルランキングAPIを利用して温泉宿TOP10のページを作ってみました。

Fetch APIで楽天トラベルランキングAPIからデーターを取得する

callApi関数はAPIを叩きデーターを取得しjsonを返す関数です。

// 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には先ほどと同じページに記載されている入力パラメーターから必要なパラメーターを連想配列で渡します。下記のようにして引数を設定しました。

 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にレンダリングする関数です。

// 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操作で表示させています。

最後までお読みいただきありがとうございました。

タイトルとURLをコピーしました