从GoogleMapsClient响应中获取Google Place Photo的URL

从GoogleMapsClient响应中获取Google Place Photo的URL

问题描述:

我正在构建一个API端点,它将使用express.js和Node.js client library for Google Maps API Web Services返回Google地点的详细信息和单张照片。以下端点会返回某个地点的详细信息,因此无法检索照片的网址。以下是有问题的代码。从GoogleMapsClient响应中获取Google Place Photo的URL

有两个请求发送到谷歌地图的客户端:

  1. 获得基于req.params.id地点的详细信息和细节包含photos阵列
  2. 使用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); 
    }) 
    } 
    
  3. 获取照片

任何想法如何从响应中获取URL h在上面的代码中被称为photo

如果我尝试通过浏览器或邮递员直接访问API,则URL将重定向到图像的实际源URL,这是我想要添加到我的venue对象中的内容。

API请求,例如:https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=CmRaAAAA8NPP1nJJ7RCzcQDGUrpBHJXlzlQkN74dcyQJ2ytVpeYIu47sR-8dfCjke1J5exP-HpkayaXOc26ShsVKkXOaJZBOdpmExUfCzUTIBN3x0uPfR5Nt3PnN-a3GoRVZ7YxKEhBvqXF356Tn9mBJ7lA_JQ_7GhQMKvZkOk-Rs9knsansx5yuhfIvsQ&sensor=false&key=mykeyhere

重定向到(这是我想photo.url回到什么):https://lh3.googleusercontent.com/p/AF1QipPVD12HA5FBnjmiqVLphYgjfPtIPydn4Ie-xGKr=s1600-w200

任何帮助表示赞赏。

P.S.我在这里的第一篇文章 - 抱歉,如果我不清楚我的问题。

+0

我发现了一个类似的问题[这里](HTTPS: //sackoverflow.com/questions/39508823/how-process-response-object-from-google-places-api-placesphoto),但它没有回答 – boomer4you

以下是我如何解决这个问题。它看起来并不完美,但是它完成了这项工作。

该响应包含一个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" 
+0

不幸的是,没有做到这一点。在我的结束响应返回'状态:200'和'.get'无法识别。而且,我的答复中没有任何内容被称为“地点”。 – boomer4you

+0

以下是响应中的标题示例(在上面的代码中称为照片): https://codepad.co/snippet/eoXu0bzS#_=_ – boomer4you