楽天トラベルAPIを使ってみた

---
楽天トラベルAPIを使ってみた
---

**食べ頃のプリン**

友達の髪が茶髪から色が黒みを取り戻し、プリンみたいな感じになってました。

「食べ頃だね」

と私がいうと

「あ、いい感じの焦がしプリンでしょ」

と言いました。


甘い　プリンって　いいよね
API......。

<br>

**目次**
[1. 楽天トラベルAPIとは](#1-楽天トラベルapiとは)
[2. Go言語で簡単な実装してみた](#2-go言語で簡単な実装してみた)
[3. おわりに](#3-おわりに)

# 1. 楽天トラベルAPIとは

　APIでなんか遊んでみたいと思い、楽天トラベルAPIというものを使ってみました。

&emsp;楽天トラベルAPIは、楽天トラベルが提供するウェブサービスの一つで、開発者が楽天の旅行関連のデータや機能を自分のアプリケーションやウェブサイトに統合することができるプログラミングインターフェースです。

&emsp;まず、Rakuten Developersへアクセスし、アカウントを登録します。
[Rakuten Developers](https://webservice.rakuten.co.jp)


　次にアプリIDを発行します。

　アプリIDにはウェブサイトのURLが必要になります。

　私はGitHub Pagesを使い、作りました。
[GitHub Pages](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages)

　そしてアプリIDが取得できるので、それを使い色々と作業ができます。

# 2. Go言語で簡単な実装してみた

[楽天トラベルAPI](https://webservice.rakuten.co.jp/documentation/simple-hotel-search)

下記はコード例です。
`applicationId := "ここは任意のアプリケーションIDを入れてください" // アプリケーションIDを設定`

　ここは先ほど登録して取得した、アプリケーションIDを入力してください。

 また公式の例を使ってみます。
 ```php
 (1)田沢湖の宿を検索する場合
https://app.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426?
applicationId=[アプリID]
&format=xml
&largeClassCode=japan
&middleClassCode=akita
&smallClassCode=tazawa
 ```

<font color="low blue">**コード例**</font>

```go
package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

// 楽天トラベル施設検索APIのレスポンスを格納するための構造体
type HotelSearchResponse struct {
    // レスポンス構造に応じてフィールドを定義
    // 例:
    Hotels []struct {
        Hotel []struct {
            HotelBasicInfo struct {
                HotelName        string `json:"hotelName"`
                HotelInformationURL string `json:"hotelInformationUrl"`
            } `json:"hotelBasicInfo"`
        } `json:"hotel"`
    } `json:"hotels"`
}

func main() {
    applicationId := "ここは任意のアプリケーションIDを入れてください" // アプリケーションIDを設定
    // 楽天トラベル施設検索APIのURL
    url := "https://app.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426?" +
        "applicationId=" + applicationId +
        "&format=json" + // JSON形式を指定
        "&largeClassCode=japan" +
        "&middleClassCode=akita" +
        "&smallClassCode=tazawa"

    // HTTPリクエストを作成
    resp, err := http.Get(url)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    // レスポンスの内容を読み込み
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }

    // レスポンスのJSONを構造体にデコード
    var result HotelSearchResponse
    if err := json.Unmarshal(body, &result); err != nil {
        log.Fatal(err)
    }

    // 結果を出力
    for _, hotel := range result.Hotels {
        for _, h := range hotel.Hotel {
            fmt.Println("ホテル名:", h.HotelBasicInfo.HotelName)
            fmt.Println("ホテル情報URL:", h.HotelBasicInfo.HotelInformationURL)
        }
    }
}

```

そして
```go
go run main.go
```
と実行すると

<font color="low blue">**出力結果**</font>

```go
ホテル名: 亀の井ホテル　田沢湖
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=11222
ホテル名: 
ホテル情報URL: 
ホテル名: 日本の山岳温泉リゾート　新玉川温泉
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=15408
ホテル名: 
ホテル情報URL: 
ホテル名: グリーンホテル大曲
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=10867
ホテル名: 
ホテル情報URL: 
ホテル名: リバーサイドホテル大曲
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=162983
ホテル名: 
ホテル情報URL: 
ホテル名: 休暇村　乳頭温泉郷
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=72803
ホテル名: 
ホテル情報URL: 
ホテル名: 花心亭しらはま
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=139459
ホテル名: 
ホテル情報URL: 
ホテル名: あきた芸術村　温泉ゆぽぽ
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=5576
ホテル名: 
ホテル情報URL: 
ホテル名: 町家ホテル角館
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=161208
ホテル名: 
ホテル情報URL: 
ホテル名: ホテルフォルクローロ角館＜JR東日本ホテルズ＞
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=1720
ホテル名: 
ホテル情報URL: 
ホテル名: 大曲シティホテル
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=145044
ホテル名: 
ホテル情報URL: 
ホテル名: 田町武家屋敷ホテル
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=107856
ホテル名: 
ホテル情報URL: 
ホテル名: 心に和みが灯る宿　水沢温泉郷　青荷山荘
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=5387
ホテル名: 
ホテル情報URL: 
ホテル名: 大曲エンパイヤホテル
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=13886
ホテル名: 
ホテル情報URL: 
ホテル名: Ｔａｂｉｓｔ　ホテル富士
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=20646
ホテル名: 
ホテル情報URL: 
ホテル名: 乳頭温泉郷　大釜温泉
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=59623
ホテル名: 
ホテル情報URL: 
ホテル名: 角館温泉　花葉館
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=128566
ホテル名: 
ホテル情報URL: 
ホテル名: 湖畔浪漫の宿　かたくりの花
ホテル情報URL: https://img.travel.rakuten.co.jp/image/tr/api/hs/dQ4dX/?f_no=162793
```

　こんな感じで出てきます。

# 3. おわりに

今回は簡単な例でしたが、もっと活用していきたいです。