我正在构建一个API端点,该端点将使用express.js和Node.js client library for Google Maps API Web Services返回Google地方的详细信息和单张照片。下面的端点返回一个地方的详细信息,我无法检索照片的网址。以下是有问题的代码。
谷歌地图客户端有两个请求:
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);
})
}
知道如何从上面代码中名为photo
的响应中获取URL吗?
如果我尝试直接通过浏览器或邮递员访问API,则会将URL重定向到图像的实际源URL,这是我要添加到venue
对象的内容。
重定向到(这是我想要photo.url
返回的内容):https://lh3.googleusercontent.com/p/AF1QipPVD12HA5FBnjmiqVLphYgjfPtIPydn4Ie-xGKr=s1600-w200
感谢任何帮助。
P.S。我在这里的第一篇文章 - 抱歉,如果我对我的问题不够清楚。
答案 0 :(得分:3)
以下是我如何解决它。它似乎并不完美,但它确实起到了作用。
响应包含 req 部分,其中包含我可以用来构建URL的密钥。具体来说, response.req.socket._host
键和 response.req.path
键。
以下是我的代码中的内容(其中photo
是来自Google 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
构建的照片网址结果为:https://lh3.googleusercontent.com/p/AF1QipPVD12HA5FBnjmiqVLphYgjfPtIPydn4Ie-xGKr=s1600-w200
答案 1 :(得分:1)
以下代码适用于我的客户端JS项目。因此,我能够将地点数据及其照片检索为有用的链接,并将其推送到我的html上的img src中。也许它可能有用。
public boolean insertAlbum (Album alb)
{
boolean ok = ConnexionMySQL.getInstance().actionQuery("Insert into album (CodeA, TitreA, SortieA, IdentC) values ('" + alb.getCodeA() + "','" + alb.getTitreA() +
"'," + alb.getSortieA() + "," + alb.getCatApp().getIdentC());
return ok;
}
答案 2 :(得分:0)
成功的Place Photo请求的响应将是图像,而不是对象文字。
https://developers.google.com/places/web-service/photos
浏览知道如何重定向到照片的方式是通过标题。如果您检查响应,您将看到它返回302(重定向)并跟随响应标头location
。您应该能够通过以下方式在快递中获取该标题:
res.get('location');
// => "image url"
答案 3 :(得分:0)
如果您使用邮递员,则必须先进行设置->自动跟随重定向,然后您会看到类似的内容
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://lh3.googleusercontent.com/p/blahblah">here</A>.
</BODY></HTML>
按照网址查找图片。
答案 4 :(得分:0)
axios.get(url).then(res => {
console.log(res.request._redirectable._options.href));
});
fetch(url).then(res => {
console.log(res.url);
});
重要:确保已安装并需要使用所需的软件包,并确保所用的URL在浏览器中可用。