自分がよく利用するホテル検索サイトである Agoda にはアフィリエイトプログラムの機能としてホテルを検索するための API が用意されている。
API のエンドポイントは以下の URL となっている。
http://affiliateapi7643.agoda.com/affiliateservice/lt_v1
この URL に対して Authorization ヘッダーに API KEY を、Content-Type に application/json を、リクエストボディに JSON 形式で検索条件を追加し POST でアクセスする。
検索には cityId を指定した都市検索と、hotelId を指定したホテルリスト検索の二種類がある。
例えば cityId を指定した場合には以下のような感じになる。
require 'net/http'
require 'uri'
require 'json'
endpoint_url = 'http://affiliateapi7643.agoda.com/affiliateservice/lt_v1'
# 検索条件の指定
# cityId, checkInDate, checkOutDate は必須、ソレ以外はオプション。
params = {
"criteria": {
"additional": {
"currency": "JPY",
"dailyRate": {
"maximum": 10000,
"minimum": 1000
},
"discountOnly": false,
"language": "ja-jp",
"maxResult": 10,
"minimumReviewScore": 0,
"minimumStarRating": 0,
"occupancy": {
"numberOfAdult": 2,
"numberOfChildren": 1
},
"sortBy": "PriceAsc"
},
"checkInDate": "2018-10-02",
"checkOutDate": "2018-10-03",
"cityId": 16056 # プーケットの city id
}
}
url = URI.parse(endpoint_url)
req = Net::HTTP::Post.new(url.path)
req['Authorization'] = 'INPUT YOUR API KEY'
req['Content-Type'] = 'application/json'
req.body = params.to_json
res = Net::HTTP.new(url.host, url.port).start do |http|
http.request(req)
end
puts res.body
こうすると以下のようにプーケットで予約できるホテルの一覧が JSON 形式で表示される。
$ ruby agoda-api.rb
{"results":[
{
"hotelId":4974380,
"hotelName":"グランド ビュー パトン",
"starRating":2.0,
"reviewScore":7.1,
"reviewCount":18,
"currency":"JPY",
"dailyRate":1119.0,
"crossedOutRate":4475.0,
"discountPercentage":0.0,
"imageURL":"http://pix6.agoda.net/hotelImages/497/4974380/4974380_18052913390065902475.jpg?s=800x600",
"landingURL":"https://www.agoda.com/ja-jp/partners/partnersearch.aspx?cid=1809784&hid=4974380¤cy=JPY&checkin=2018-10-02&checkout=2018-10-03&NumberofAdults=2&NumberofChildren=1&Rooms=1&pcs=6",
"includeBreakfast":false,
"freeWifi":true,
"latitude":7.886117,
"longitude":98.30404099999998
},{
#以下省略
}
あとは JSON.parse して煮るなり焼くなりしよう。
ホテルを指定して検索する場合は cityId の代わりに hotelId を入れてアクセスすれば良い。
これはドキュメントに書いてあるレベルだが agoda の API を解説しているサイトはあまり見かけないのでメモ代わりに投稿しておこう。