https://github.com/dcts/dcts-google-places-api
Node client for Google Places API (placeSearch, placeDetails, placePhoto). Published as NPM package.
https://github.com/dcts/dcts-google-places-api
Last synced: over 1 year ago
JSON representation
Node client for Google Places API (placeSearch, placeDetails, placePhoto). Published as NPM package.
- Host: GitHub
- URL: https://github.com/dcts/dcts-google-places-api
- Owner: dcts
- License: mit
- Created: 2020-03-17T19:00:16.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-04T06:53:28.000Z (over 3 years ago)
- Last Synced: 2025-03-06T11:13:15.735Z (over 1 year ago)
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/dcts-google-places-api
- Size: 488 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Google Places API (for node)
Node client to run the basic google places API requests (using axios). Published on [NPM](https://www.npmjs.com/package/dcts-google-places-api).
- [**Place Search**](https://developers.google.com/places/web-service/search)
- [**Place Details**](https://developers.google.com/places/web-service/details)
- [**Place Photos**](https://developers.google.com/places/web-service/photos)
## Installing
```bash
$ npm install dcts-google-places-api
```
## Examples
### Initialzation
```js
const apiKey = "INSERT_YOUR_API_KEY"; // define API key
const GooglePlacesApi = require('dcts-google-places-api');
const googleapi = new GooglePlacesApi(apiKey); // initialize
```
### Place Search
```js
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`.
```js
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](https://stackoverflow.com/a/49374036/6272061)
```js
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.
```js
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
1. Search for a place by textquery
2. get place details from that place
3. fetch all photo urls from that place
```js
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)
```js
npm run test
```
## ToDo's
- [ ] run `npm run test` to see missing tests.
- [ ] escape queries with `encodeURI()` or `encodeURIComponent` -> 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](www.github.com/dcts) for personal use only. Check my [portfolio website](https://dcts.github.io/CV/). Or go play [tetris](https://dcts-tetris-spheres.firebaseapp.com/).