从GoogleMapsClient响应中获取Google Place Photo的URL
我正在构建一个API端点,它将使用express.js和Node.js client library for Google Maps API Web Services返回Google地点的详细信息和单张照片。以下端点会返回某个地点的详细信息,因此无法检索照片的网址。以下是有问题的代码。从GoogleMapsClient响应中获取Google Place Photo的URL
有两个请求发送到谷歌地图的客户端:
- 获得基于
req.params.id
地点的详细信息和细节包含photos
阵列 -
使用
photo_reference
从上面var googleMapsClient = require('@google/maps').createClient({ key: 'mykeyhere', Promise: Promise }); exports.getGglPlace = function(req, res) { googleMapsClient.place({ placeid: req.params.id }).asPromise() .then((response) => { var venue = response.json.result if (venue.photos[0]) { googleMapsClient.placesPhoto({ photoreference: venue.photos[0].photo_reference, maxwidth: 200 }).asPromise() .then((photo) => { console.log("Photo:", photo); // this returns a massive chunk of data which I think contains the actual image object also venue.photoURL = photo.url; // this doesn't work res.send(venue); }) .catch((err)=>{ console.log("Error Getting Photo!", err); res.send(venue); }) } else { res.send(venue); } }) .catch((err) => { res.send(404); }) }
获取照片
任何想法如何从响应中获取URL h在上面的代码中被称为photo
?
如果我尝试通过浏览器或邮递员直接访问API,则URL将重定向到图像的实际源URL,这是我想要添加到我的venue
对象中的内容。
重定向到(这是我想photo.url
回到什么):https://lh3.googleusercontent.com/p/AF1QipPVD12HA5FBnjmiqVLphYgjfPtIPydn4Ie-xGKr=s1600-w200
任何帮助表示赞赏。
P.S.我在这里的第一篇文章 - 抱歉,如果我不清楚我的问题。
以下是我如何解决这个问题。它看起来并不完美,但是它完成了这项工作。
该响应包含一个req部分,其中包含可用于构建URL的关键字。具体而言,密钥为response.req.socket._host
密钥,并且密钥为response.req.path
。
这里是什么样子在我的代码(其中photo
是从谷歌API的响应)
venue.photoURL = "https://" + photo.req.socket._host + photo.req.path;
photo.req.socket._host
给我lh3.googleusercontent。COM
photo.req.path
给我/P/AF1QipPVD12HA5FBnjmiqVLphYgjfPtIPydn4Ie-xGKr = S1600-W200
构造的URL到照片的结果是:https://lh3.googleusercontent.com/p/AF1QipPVD12HA5FBnjmiqVLphYgjfPtIPydn4Ie-xGKr=s1600-w200
一个成功的地方照片请求的响应将是一个图像,而不是一个对象文字。
https://developers.google.com/places/web-service/photos
浏览知道如何重定向到照片的方式是通过一个头。如果检出响应,您将看到它会返回302(重定向),并在响应标题location
后面。您应该可以通过以下方式快速获取该标头:
res.get('location');
// => "image url"
不幸的是,没有做到这一点。在我的结束响应返回'状态:200'和'.get'无法识别。而且,我的答复中没有任何内容被称为“地点”。 – boomer4you
以下是响应中的标题示例(在上面的代码中称为照片): https://codepad.co/snippet/eoXu0bzS#_=_ – boomer4you
我发现了一个类似的问题[这里](HTTPS: //sackoverflow.com/questions/39508823/how-process-response-object-from-google-places-api-placesphoto),但它没有回答 – boomer4you