2017-11-25 1 views
2

express.jsとNode.js client library for Google Maps API Web Servicesを使用して詳細とGoogleプレイスの写真を返すAPIエンドポイントを構築しています。以下のエンドポイントは場所の詳細を返し、写真のURLを取得するのに問題があります。以下は問題のコードです。Google Place PhotoのURLをGoogleMapsClientレスポンスから取得する

  1. は、場所の詳細はreq.params.idに基づいて取得し、詳細が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); 
    }) 
    } 
    
  2. 使用して写真を入手 photos配列
  3. が含まれている:Googleマップクライアントへの2つの要求があります

レスポンスからURLを取得する方法上記のコードでhはphotoと呼ばれていますか?

ブラウザまたはPostmanを通じて直接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が見つかりました: //stackoverflow.com/questions/39508823/how-process-response-object-from-google-places-api-placesphoto)、回答はありません – boomer4you

答えて

1

ここで私はそれをどのように解決しましたか?それは完璧に見えませんが、仕事をします。

レスポンスには、reqセクションが含まれています。このセクションには、URLを作成するためのキーがあります。具体的には、response.req.socket._hostキーとresponse.req.pathキーです。ここで

venue.photoURL = "https://" + photo.req.socket._host + photo.req.path;

photo.req.socket._hostは私にlh3.googleusercontentを与える(photoは、GoogleのAPIからの応答である場合)、それは私のコードのように見えるものです。comの

photo.req.pathは写真に私/P/AF1QipPVD12HA5FBnjmiqVLphYgjfPtIPydn4Ie-xGKr = S1600-W200構築されたURLの

結果を与えている:https://lh3.googleusercontent.com/p/AF1QipPVD12HA5FBnjmiqVLphYgjfPtIPydn4Ie-xGKr=s1600-w200

0

PlacePlayのリクエストが成功した場合の応答は、オブジェクトリテラルではなく画像になります。

https://developers.google.com/places/web-service/photos

閲覧が写真にリダイレクトする方法を知っている方法は、ヘッダを経由しています。応答をチェックアウトすると、302(リダイレクト)が返され、応答ヘッダlocationが続きます。エクスプレスのヘッダをつかむことができるはずです:

res.get('location'); 
// => "image url" 
+0

残念ながらそれはしませんでした。私の最終的な応答は 'status:200'を返し、' .get'は認識されません。さらに、私はそれが "場所"と呼ばれることがわかったという応答には何もありません。 – boomer4you

+0

レスポンスに含まれるヘッダーの例を示します(上のコードの写真参照): https://codepad.co/snippet/eoXu0bzS#_=_ – boomer4you

関連する問題