2017-11-25 145 views
2

我正在構建一個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

回答

1

以下是我如何解決這個問題。它看起來並不完美,但是它完成了這項工作。

該響應包含一個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

0

一個成功的地方照片請求的響應將是一個圖像,而不是一個對象文字。

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