module AccomTravelUrl
Build Google Travel hotel search URLs for browse / empty-result footers.
Constants
- BASE_URL
Public Instance Methods
Source
# File lib/accom_travel_url.rb, line 21 def build_search_url(location:, check_in:, check_out:, nights:) query = "Hotels in #{location.to_s.strip}" ts = build_ts_param(check_in, check_out, nights: nights) params = { "q" => query, "qs" => "CAE4AA", "ts" => ts, "ap" => "MAE" } "#{BASE_URL}?#{params.map { |key, value| "#{key}=#{CGI.escape(value)}" }.join('&')}" end
Source
# File lib/accom_travel_url.rb, line 13 def build_ts_param(check_in, check_out, nights: nil) _ = nights check_in_str = check_in.strftime("%Y-%m-%d") check_out_str = check_out.strftime("%Y-%m-%d") payload = encode_length_delimited(1, check_in_str) + encode_length_delimited(2, check_out_str) Base64.urlsafe_encode64(payload).delete("=") end
Source
# File lib/accom_travel_url.rb, line 33 def encode_length_delimited(field_number, value) tag = (field_number << 3) | 2 bytes = value.to_s.b encode_varint(tag) + encode_varint(bytes.bytesize) + bytes end
Source
# File lib/accom_travel_url.rb, line 39 def encode_varint(value) buffer = +"" n = value.to_i loop do byte = n & 0x7F n >>= 7 byte |= 0x80 if n.positive? buffer << byte.chr break unless n.positive? end buffer end