Class: GooglePlaces::Request

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/google_places/request.rb

Overview

This class performs the queries on the API

Constant Summary collapse

NEARBY_SEARCH_URL =
'https://maps.googleapis.com/maps/api/place/nearbysearch/json'
DETAILS_URL =
'https://maps.googleapis.com/maps/api/place/details/json'
TEXT_SEARCH_URL =
'https://maps.googleapis.com/maps/api/place/textsearch/json'
PAGETOKEN_URL =
'https://maps.googleapis.com/maps/api/place/search/json'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, options) ⇒ Request

Create a new Request for a given uri and the provided params

Parameters:

  • url (String)

    The uri to make the query on

  • options (Hash)

    A Hash providing options for the request

Options Hash (options):

  • :key (String)

    the provided api key. Note that this is a mandatory parameter

  • :radius (Integer)

    Defines the distance (in meters) within which to return Place results. The maximum allowed radius is 50,000 meters. Note that radius must not be included if :rankby is specified Note that this is a mandatory parameter

  • :sensor (Boolean)

    Indicates whether or not the Place request came from a device using a location sensor (e.g. a GPS) to determine the location sent in this request. Note that this is a mandatory parameter

  • :location ((Integer, Integer), String)

    The latitude/longitude around which to retrieve Spot information. This must be specified as latitude,longitude Note that this is a mandatory parameter

  • :types (String, Array)

    Restricts the results to Spots matching at least one of the specified types

  • :name (String)

    A term to be matched against the names of Places. Results will be restricted to those containing the passed name value.

  • :keyword (String)

    A term to be matched against all content that Google has indexed for this Spot, including but not limited to name, type, and address, as well as customer reviews and other third-party content.

  • :language (String)

    The language code, indicating in which language the results should be returned, if possible.

  • :exclude (String, Array<String>) — default: []

    A String or an Array of types to exclude from results

  • :retry_options (Hash) — default: {}

    A Hash containing parameters for search retries

  • :retry_options[:status] (Object) — default: []
  • :retry_options[:max] (Integer) — default: 0

    the maximum retries

  • :retry_options[:delay] (Integer) — default: 5

    the delay between each retry in seconds

See Also:



186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# File 'lib/google_places/request.rb', line 186

def initialize(url, options)
  retry_options = options.delete(:retry_options) || {}

  retry_options[:status] ||= []
  retry_options[:max]    ||= 0
  retry_options[:delay]  ||= 5

  retry_options[:status] = [retry_options[:status]] unless retry_options[:status].is_a?(Array)

  @response = self.class.get(url, :query => options)
  # puts "@response.request.last_uri.to_s"
  # puts @response.request.last_uri.to_s

  return unless retry_options[:max] > 0 && retry_options[:status].include?(@response.parsed_response['status'])

  retry_request = proc do
    for i in (1..retry_options[:max])
      sleep(retry_options[:delay])

      @response = self.class.get(url, :query => options)

      break unless retry_options[:status].include?(@response.parsed_response['status'])
    end
  end

  if retry_options[:timeout]
    begin
      Timeout::timeout(retry_options[:timeout]) do
        retry_request.call
      end
    rescue Timeout::Error
      raise RetryTimeoutError.new(@response)
    end
  else
    retry_request.call

    raise RetryError.new(@response) if retry_options[:status].include?(@response.parsed_response['status'])
  end
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



6
7
8
# File 'lib/google_places/request.rb', line 6

def options
  @options
end

#responseHTTParty::Response

Returns the retrieved response from the API.

Returns:

  • (HTTParty::Response)

    the retrieved response from the API



5
6
7
# File 'lib/google_places/request.rb', line 5

def response
  @response
end

Class Method Details

.spot(options = {}) ⇒ Spot

Search for a Spot with a reference key

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :key (String)

    the provided api key. Note that this is a mandatory parameter

  • :reference (String)

    The reference of a already retrieved Spot Note that this is a mandatory parameter

  • :sensor (Boolean)

    Indicates whether or not the Place request came from a device using a location sensor (e.g. a GPS) to determine the location sent in this request. Note that this is a mandatory parameter

  • :language (String)

    The language code, indicating in which language the results should be returned, if possible.

  • :retry_options (Hash) — default: {}

    A Hash containing parameters for search retries

  • :retry_options[:status] (Object) — default: []
  • :retry_options[:max] (Integer) — default: 0

    the maximum retries

  • :retry_options[:delay] (Integer) — default: 5

    the delay between each retry in seconds

Returns:



82
83
84
85
# File 'lib/google_places/request.rb', line 82

def self.spot(options = {})
  request = new(DETAILS_URL, options)
  request.parsed_response
end

.spots(options = {}) ⇒ Array<Spot>

Search for Spots at the provided location

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :key (String)

    the provided api key. Note that this is a mandatory parameter

  • :radius (Integer)

    Defines the distance (in meters) within which to return Place results. The maximum allowed radius is 50,000 meters. Note that radius must not be included if :rankby is specified Note that this is a mandatory parameter

  • :sensor (Boolean)

    Indicates whether or not the Place request came from a device using a location sensor (e.g. a GPS) to determine the location sent in this request. Note that this is a mandatory parameter

  • :location ((Integer, Integer), String)

    The latitude/longitude around which to retrieve Spot information. This must be specified as latitude,longitude Note that this is a mandatory parameter

  • :types (String, Array)

    Restricts the results to Spots matching at least one of the specified types

  • :name (String)

    A term to be matched against the names of Places. Results will be restricted to those containing the passed name value.

  • :keyword (String)

    A term to be matched against all content that Google has indexed for this Spot, including but not limited to name, type, and address, as well as customer reviews and other third-party content.

  • :language (String)

    The language code, indicating in which language the results should be returned, if possible.

  • :exclude (String, Array<String>) — default: []

    A String or an Array of types to exclude from results

  • :retry_options (Hash) — default: {}

    A Hash containing parameters for search retries

  • :retry_options[:status] (Object) — default: []
  • :retry_options[:max] (Integer) — default: 0

    the maximum retries

  • :retry_options[:delay] (Integer) — default: 5

    the delay between each retry in seconds

Returns:

See Also:



56
57
58
59
# File 'lib/google_places/request.rb', line 56

def self.spots(options = {})
  request = new(NEARBY_SEARCH_URL, options)
  request.parsed_response
end

.spots_by_pagetoken(options = {}) ⇒ Array<Spot>

Search for Spots with a page token

Parameters:

  • pagetoken (String)

    the next page token to search for

  • api_key (String)

    the provided api key

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :exclude (String, Array<String>) — default: []

    A String or an Array of types to exclude from results

  • :retry_options (Hash) — default: {}

    A Hash containing parameters for search retries

  • :retry_options[:status] (Object) — default: []
  • :retry_options[:max] (Integer) — default: 0

    the maximum retries

  • :retry_options[:delay] (Integer) — default: 5

    the delay between each retry in seconds

Returns:

See Also:



140
141
142
143
# File 'lib/google_places/request.rb', line 140

def self.spots_by_pagetoken(options = {})
  request = new(PAGETOKEN_URL, options)
  request.parsed_response
end

.spots_by_query(options = {}) ⇒ Array<Spot>

Search for Spots with a query

Parameters:

  • query (String)

    the query to search for

  • api_key (String)

    the provided api key

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :lat (String, Integer)

    the latitude for the search

  • :lng (String, Integer)

    the longitude for the search

  • :radius (Integer)

    Defines the distance (in meters) within which to return Place results. The maximum allowed radius is 50,000 meters. Note that radius must not be included if :rankby is specified Note that this is a mandatory parameter

  • :sensor (Boolean)

    Indicates whether or not the Place request came from a device using a location sensor (e.g. a GPS) to determine the location sent in this request. Note that this is a mandatory parameter

  • :types (String, Array)

    Restricts the results to Spots matching at least one of the specified types

  • :language (String)

    The language code, indicating in which language the results should be returned, if possible.

  • :exclude (String, Array<String>) — default: []

    A String or an Array of types to exclude from results

  • :retry_options (Hash) — default: {}

    A Hash containing parameters for search retries

  • :retry_options[:status] (Object) — default: []
  • :retry_options[:max] (Integer) — default: 0

    the maximum retries

  • :retry_options[:delay] (Integer) — default: 5

    the delay between each retry in seconds

Returns:

See Also:



120
121
122
123
# File 'lib/google_places/request.rb', line 120

def self.spots_by_query(options = {})
  request = new(TEXT_SEARCH_URL, options)
  request.parsed_response
end

Instance Method Details

#executeObject



226
227
228
# File 'lib/google_places/request.rb', line 226

def execute
  @response = self.class.get(url, :query => options)
end

#parsed_responseString

Parse errors from the server respons, if any

Returns:

  • (String)

    the response from the server as JSON

Raises:

  • (OverQueryLimitError)

    when server response object includes status ‘OVER_QUERY_LIMIT’

  • (RequestDeniedError)

    when server response object includes ‘REQUEST_DENIED’

  • (InvalidRequestError)

    when server response object includes ‘INVALID_REQUEST’

  • (UnknownError)

    when server response object includes ‘UNKNOWN_ERROR’

  • (NotFoundError)

    when server response object includes ‘NOT_FOUND’



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
# File 'lib/google_places/request.rb', line 237

def parsed_response
  case @response.parsed_response['status']
  when 'OK', 'ZERO_RESULTS'
    @response.parsed_response
  when 'OVER_QUERY_LIMIT'
    raise OverQueryLimitError.new(@response)
  when 'REQUEST_DENIED'
    raise RequestDeniedError.new(@response)
  when 'INVALID_REQUEST'
    raise InvalidRequestError.new(@response)
  when 'UNKNOWN_ERROR'
    raise UnknownError.new(@response)
  when 'NOT_FOUND'
    raise NotFoundError.new(@response)
  end
end