3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-03-30

#APIとは?

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

スクリーンショット 2021-03-30 10.59.39.png

#0:Rakuten Developersにアクセス

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

②"アプリID"を発行

スクリーンショット 2021-03-30 12.54.59.png

スクリーンショット 2021-03-30 12.41.27.png

③"API一覧"をクリック

④"楽天トラベル系API"の中にある"楽天トラベル施設検索API"をクリック
スクリーンショット 2021-03-30 12.44.34.png

スクリーンショット 2021-03-30 13.22.34.png

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

#1:ソースコード

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

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

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

res = requests.get(REQUEST_URL, params)

print(res)

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

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

print(result)

スクリーンショット 2021-03-30 13.03.46.png

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

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

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ページの施設情報をデータフレームに格納できました!

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

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ファイルに出力させて完成です!!

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

スクリーンショット 2021-03-30 13.21.31.png

#2:最後に

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

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

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?