dcts-google-places-api
v1.0.3
Published
Node client for Google Places API (placeSearch, placeDetails, placePhoto). Written by dcts.
Downloads
2
Maintainers
Readme
Google Places API (for node)
Node client to run the basic google places API requests (using axios). Published on NPM.
Installing
$ npm install dcts-google-places-api
Examples
Initialzation
const apiKey = "INSERT_YOUR_API_KEY"; // define API key
const GooglePlacesApi = require('dcts-google-places-api');
const googleapi = new GooglePlacesApi(apiKey); // initialize
Place Search
const searchQuery = "Pizza New York"; // example search
// with promises
googleapi.runPlaceSearch(searchQuery).then(placeId => {
console.log(placeId); // returns placeId (as string) or null
});
// with async await
(async () => {
let placeId = await googleapi.runPlaceSearch(searchQuery);
console.log(placeId);
})();;
Place Details
Get place details by place_id
.
const placeId = "ChIJHegKoJUfyUwRjMxaCcviZDA"; // placeId of "Pizza Chicken New York"
// with promises
googleapi.runPlaceDetails(placeId).then(placeDetails => {
console.log(`place found: ${placeDetails.name}`);
})
// with async await
(async () => {
let placeDetails = await googleapi.runPlaceDetails(placeId);
console.log(`place found: ${placeDetails.name}`);
})();
Get place details by cid
. This is a deprecated endpoint and not documented in the official google api documentation, but it still works. See also this answer on stackoverflow
const cid = "10056734717913051463"; // cid of "Brooklyn Boulders Chicago"
// with promises
googleapi.runPlaceDetailsCid(cid).then(placeDetails => {
console.log(`place found: ${placeDetails.name} (${placeDetails.cid})`);
});
// with async await
(async () => {
let placeDetails = await googleapi.runPlaceDetailsCid(cid);
console.log(`place found: ${placeDetails.name} (${placeDetails.cid})`);
})();
Place Photos
⚠️ Be Aware: this function returns only the photoUrl, not the image itself.
const photoReference = 'CmRaAAAAqYV1efHXXLX3UB1msekeprgOUD362n4-8lxwYI3aSFANLw51oE1_KeNziEgnnbr5WQzJtQo9SbNnZFRfymg594T9h7yRWnLQL8w1n_ekN6BbyJzg1k0hadSJ4N0i63TmEhA3NIzf_JWUEZcW3VgXJ5FqGhRq7ij6D2Vl8DOSF2yHY1iuTYuAKA';
// with promises
googleapi.runPlacePhotos(photoReference).then(photoUrl => {
console.log(`photo url: ${photoUrl}`);
});
// with async await
(async () => {
let photoUrl = await googleapi.runPlacePhotos(photoReference);
console.log(`photo url: ${photoUrl}`);
})();
Full Example
- Search for a place by textquery
- get place details from that place
- fetch all photo urls from that place
const textSearch = "Nolita Pizza New York";
// with promises
googleapi.runPlaceSearch(textSearch).then(placeId => {
console.log(`place id found: ${placeId}`);
return googleapi.runPlaceDetails(placeId);
}).then(placeDetails => {
console.log(`place details fetched for ${placeDetails.name} (${placeDetails.place_id})`);
const promises = [];
placeDetails.photos.map(photo => {
promises.push(googleapi.runPlacePhotos(photo.photo_reference));
});
return Promise.all(promises);
}).then(placePhotoUrls => {
console.log(`${placePhotoUrls.length} photo urls fetched:`);
console.log(placePhotoUrls);
});
// with async await
(async () => {
let placeId = await googleapi.runPlaceSearch(textSearch)
console.log(`place id found: ${placeId}`);
let placeDetails = await googleapi.runPlaceDetails(placeId);
console.log(`place details fetched for ${placeDetails.name} (${placeDetails.place_id})`);
const placePhotoUrls = [];
for (const photo of placeDetails.photos) {
placePhotoUrls.push(await googleapi.runPlacePhotos(photo.photo_reference));
}
console.log(`${placePhotoUrls.length} photo urls fetched:`);
console.log(placePhotoUrls);
})();
Run Tests (written with AVA js)
npm run test
ToDo's
- [ ] run
npm run test
to see missing tests. - [ ] escape queries with
encodeURI()
orencodeURIComponent
-> write tests for them first. - [ ] why some request work on google maps webinterface but not with the API, like this one:
Bartleby’s Ice Cream Cakes
-> no results from the API, but finds it on webinterface. I think it could be something with the top appostroph.
Credits
Written by dcts for personal use only. Check my portfolio website. Or go play tetris.