楽天トラベルAPIを3分で叩いてみた♪

#APIとは？

他社が提供するサービス内の**"情報"**or**"機能"**を扱えるようにする仕組み

![スクリーンショット 2021-03-30 10.59.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/126732a9-cf3a-e96c-215a-d934fd1e5a7e.png)


#０：Rakuten Developersにアクセス

https://webservice.rakuten.co.jp/api/simplehotelsearch/

**①Rakuten Developersにログイン**
(楽天アカウントがない方は登録をお願いします。)

**②"アプリID"を発行**

![スクリーンショット 2021-03-30 12.54.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/f930febe-f20e-0f1c-b82d-07ac379933f1.png)


![スクリーンショット 2021-03-30 12.41.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/e878c648-54d0-6ce4-d99a-9fe7d6c014f5.png)




**③"API一覧"をクリック**

**④"楽天トラベル系API"の中にある"楽天トラベル施設検索API"をクリック**
![スクリーンショット 2021-03-30 12.44.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/05019e86-ac52-dfb2-85cb-fcb3afd39df5.png)

![スクリーンショット 2021-03-30 13.22.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/fbfea2fd-fb7b-3bcd-169e-28c49fadea84.png)

上図のページに楽天トラベルAPIの仕様が細かく書かれているので、ざっと目を通してみて下さい。
**（良く分からない方は以下のソースコードをみて感覚を掴んでみてください!）**

#１：ソースコード

```py
import pandas as pd
import requests
```

```py
REQUEST_URL = "https://app.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426"
#0-②でコピーしたIDを貼り付けてください
APP_ID = "？？？？？？？？？？？？？？？？？？？？"
```


今回は**日本・沖縄・那覇市**にある施設を検索してみたいと思います。

```py
params = {
    "format":"json",
    "largeClassCode":"japan",
    "middleClassCode":"okinawa",
    "smallClassCode":"nahashi",
    "applicationId":APP_ID
}

res = requests.get(REQUEST_URL, params)

print(res)
```
ここで、**< Response [200] >**
と出力されれば、リクエストに対してのレスポンスが成功しています!

次に**取得したjson形式のレスポンス**をみましょう。

```py
print(result)
```

![スクリーンショット 2021-03-30 13.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/1e95d5c1-7794-c327-3bbd-178c3e258cbf.png)

上図から、
**・全ページ数は15ページ**
**・今回は1ページ目だけを取得**
**・今回は1~30の施設情報を取得**
(このソースコードではpageを指定していないので、1ページ目だけ取得することになっています。)




以上より、
**"15ページの情報"**があることが分かったので、全てを取得してデータフレームに格納していきます!

```py
def rakuten_api():
    df = pd.DataFrame()
    index_num = 0
    
    #ページ数(1~15ページ)
    for page in range(1,16):    
        
        params = {
        "format":"json",
        "largeClassCode":"japan",
        "middleClassCode":"okinawa",
        "smallClassCode":"nahashi",
        "page": page,
        "applicationId":APP_ID
        }
        
        res = requests.get(REQUEST_URL, params)

        #レスポンスの中身を取得
        result = res.json()

        hotels = result["hotels"]

        for hotel in hotels:
            hotel_info = hotel["hotel"][0]["hotelBasicInfo"]
            _df = pd.DataFrame(hotel_info, index=[index_num])
            index_num+=1
            df = df.append(_df)
            
    return df

df = rakuten_api()
```
これで、前15ページの施設情報をデータフレームに格納できました!

ここで、データフレームに格納されている**カラム名の一覧**をみましょう

```py
print(df.columns)
出力結果>>>
Index(['hotelNo', 'hotelName', 'hotelInformationUrl', 'planListUrl',
       'dpPlanListUrl', 'reviewUrl', 'hotelKanaName', 'hotelSpecial',
       'hotelMinCharge', 'latitude', 'longitude', 'postalCode', 'address1',
       'address2', 'telephoneNo', 'faxNo', 'access', 'parkingInformation',
       'nearestStation', 'hotelImageUrl', 'hotelThumbnailUrl', 'roomImageUrl',
       'roomThumbnailUrl', 'hotelMapImageUrl', 'reviewCount', 'reviewAverage',
       'userReview'],
      dtype='object')
```
ここから、**自分が必要なカラム名だけを抽出します。**
そして、**csvファイルに出力**させて完成です!!

```py
df[['hotelName','hotelInformationUrl','hotelMinCharge','telephoneNo','reviewAverage']].to_csv("hotel.csv",index=False)
```

![スクリーンショット 2021-03-30 13.21.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449715/ec3f3b88-fc8f-3bd2-4fe8-2d3c20c31540.png)

#２：最後に

今回は楽天トラベル系APIを利用しましたが、
**楽天ブックス系API**や**楽天レシピ系API**なども豊富にあるので、それらを組み合わせて自分好みのアプリケーションも作れそうです！

その際にはまた、記事にしたいと思います!!