
Security News
New Website “Is It Really FOSS?” Tracks Transparency in Open Source Distribution Models
A new site reviews software projects to reveal if they’re truly FOSS, making complex licensing and distribution models easy to understand.
= Google Places
This gem provides a Ruby wrapper around the Google Places API, using HTTParty. At this moment the gem does not support OAuth authentication and will only work with an API key.
== Obtaining an API key
To be able to use this gem, you'll need a Google Places API key. To request an API key, point your browser to https://developers.google.com/places/web-service/get-api-key and follow the instructions there.
== Installing the gem
To use this gem, install it with gem install google_places or add it to your Gemfile:
gem 'google_places'
And install it with bundle install
== Usage
=== The spot
Each of the API methods below returns a GooglePlaces::Spot or a collection of those. Each of these objects has these attributes:
However address_components, city, country, formatted_address, region and url are nil.
=== Retrieving a list of spots
First register a new Client:
@client = GooglePlaces::Client.new(API_KEY)
Then retrieve a list of spots:
@client.spots(-33.8670522, 151.1957362)
Search by a specific type:
@client.spots(-33.8670522, 151.1957362, :types => 'restaurant')
Search by multiple types:
@client.spots(-33.8670522, 151.1957362, :types => ['restaurant','food'])
Search by multiple types but exclude one type:
@client.spots(-33.8670522, 151.1957362, :types => ['restaurant','food'], :exclude => 'cafe')
Search by multiple types but exclude multiple types:
@client.spots(-33.8670522, 151.1957362, :types => ['restaurant','food'], :exclude => ['cafe', 'establishment'])
Search by name:
@client.spots(-33.8670522, 151.1957362, :name => 'italian')
Search by name and type:
@client.spots(-33.8670522, 151.1957362, :name => 'italian', :types => 'restaurant')
Search in a radius (in meters):
@client.spots(-33.8670522, 151.1957362, :radius => 100)
Get results in specific language:
@client.spots(-33.8670522, 151.1957362, :language => 'en')
Get detailed spots (this makes an extra call for each spot and returns a collection of the detailed spots):
@client.spots(-33.8670522, 151.1957362, :detail => true)
=== Retrieving spots based on query
@client.spots_by_query('Pizza near Miami Florida')
Search by multiple types and exclude multiple types
@client.spots_by_query('Pizza near Miami Florida', :types => ['restaurant', 'food'], :exclude => ['cafe', 'establishment'])
=== Retrieving a collection of spots with complete details
Google limits the details that are returned in any API calls for a collection, so you'll often find that details such as phone numbers are missing in a collection of spots, but are filled in when retrieving a single spot.
If you require these extra details to be completed when retrieving a number of results, you can pass in the detail: true option to any method that returns a collection of spots.
This option should be used with care, as it adds an additional API call for EACH spot in the collection. E.g. a spots collection of 100 spots will use 101 API calls when the detail: true option is set.
=== Retrieving a single spot
First register a new Client:
@client = GooglePlaces::Client.new(API_KEY)
Then retrieve the spot:
@client.spot('CmRYAAA...upoTH3g')
=== Retrieving a single photo's url
First register a new Client:
@client = GooglePlaces::Client.new(API_KEY)
Then retrieve the spot:
@spot = @client.spot('CmRYAAA...upoTH3g')
Then request one of the photos url with a max width:
url = @spot.photos[0].fetch_url(800)
=== Places Autocomplete
https://developers.google.com/places/documentation/autocomplete
Note: Autocomplete is often used and better suited on client side (browser/javascript). The Autocomplete API is rate limited, so make sure you check the usage limits before deciding on whether to call the API server/client side.
https://developers.google.com/maps/documentation/business/articles/usage_limits
==== Example usage
Register a new Client:
@client = GooglePlaces::Client.new(API_KEY)
Then request a prediction based on partial match:
@client.predictions_by_input( 'San F', lat: 0.0, lng: 0.0, radius: 20000000, types: 'geocode', language: I18n.locale, )
The response will be an array of predictions.
== Development
You're very welcome to add functionality to this gem. To do so, follow these steps:
Feel free to send me a pull request but please make sure your changes are sufficiently covered by RSpec.
== Important Note
Concerning the reference field, the Google Places API documentation states:
"You can store this token and use it at any time in future to refresh cached data about this Place, but the same token is not guaranteed to be returned for any given Place across different searches."
Please be aware that the reference field in spot details may differ from the reference used to retrieve that spot.
FAQs
Unknown package
We found that google_places demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A new site reviews software projects to reveal if they’re truly FOSS, making complex licensing and distribution models easy to understand.
Security News
Astral unveils pyx, a Python-native package registry in beta, designed to speed installs, enhance security, and integrate deeply with uv.
Security News
The Latio podcast explores how static and runtime reachability help teams prioritize exploitable vulnerabilities and streamline AppSec workflows.