我需要将从google places API返回的图像保存到我的服务器。 我试过了:
$url= 'https://maps.googleapis.com/maps/api/place/photo?key=API_KEY_HERE&photo_reference=CoQBcwAAAAtXfnhO3WCagOlY4p4Px7N8Pcks_N-cLbMQzruT-AdWRZoyJgABVUUcuZ_4bbcUdReloBl2zGd80W4E4w-N_kyab4xz4S3ZZIRVECCJP1u7JsXOfxEsx4XQbL-HeMBRKzNul0XSdy-Dv4495i_8-SqYqTBZMaLvn1YLaVM3aAzOEhBgLV4lpKeM39L6gb9wBbU6GhSmCkYp8djpm9_iaqkS93z4ekLnNg&maxheight=200'
$target = md5($array['result']['photos'][0]['photo_reference']);
$newname = 'img/googlephotos/newimage'.$target;
file_put_contents($newname,file_get_contents($url));
但是它无法正常工作 - 当它保存它时会保存一个空文件而不是图像 - 我认为它缺少文件扩展名但我不确定如何获取它。有谁知道保存谷歌地方照片的任何方法?
我使用PHP编写代码。
任何帮助都会很棒
答案 0 :(得分:2)
您应该了解服务条款中的限制。特别是,第10.5(d)段说:
您不会预先获取,缓存,索引或存储要在服务之外使用的任何内容,但您可以存储有限数量的内容,仅用于提高由于网络而导致的Maps API实施的性能延迟(而不是为了阻止Google准确跟踪使用情况),并且仅在此类存储时: 是暂时的(在任何情况下都不超过30个日历日);是安全的; 不会操纵或汇总内容或服务的任何部分;和 不以任何方式修改归属地。</ p>
https://developers.google.com/maps/terms#10-license-restrictions
此时看起来ToS不允许在您的服务器上保存图像。
答案 1 :(得分:0)
您首先需要使用Google Places Photo API来获取图片资源:
它应该返回状态:200 一个可以使用以下方式保存的实际图像资源:
file_put_contents({{path}},{{image resource}});
答案 2 :(得分:0)
回答你的问题我尝试做一些类似于你的事情但是使用重定向网址(secon one)。如您所知,当您想从Google地方信息中获取照片网址时,您必须发送此网址:
$url = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=$maxwidth&photoreference=$reference&key=$api_key";
然后它重定向到:
https://lh6.googleusercontent.com/-n5VUsX_0WSA/VU3vvlOKX3I/AAAAAAAAEN8/yg9TAhSbvCwC8lA3bB56SjcUcAx3zXYtQCLIB/s1600-w800/
我做的是先获取第二个网址,然后尝试从cURL获取文件,但结果与你相似,一个空文件(0bytes),我尝试使用不同的格式(jpg,png和gif)
function get_photos_from_google_places($reference){
$api_key = "YOUR API KEY";
$maxwidth = 800;
$url = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=$maxwidth&photoreference=$reference&key=$api_key";
$furl = false;
// First check response headers
$headers = get_headers($url);
// Test for 301 or 302
if(preg_match('/^HTTP\/\d\.\d\s+(301|302)/',$headers[0]))
{
foreach($headers as $value)
{
if(substr(strtolower($value), 0, 9) == "location:")
{
$furl = trim(substr($value, 9, strlen($value)));
}
}
}
// Set final URL
$furl = ($furl) ? $furl : $url;
//Save the photo file to directory
$ch = curl_init($furl);
$fp = fopen('./files/media/image.png', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
echo $furl;
echo "<br><hr>";
echo $fp; die();
}
也许这可以给你一些想法。如果有人知道怎么做,那就会感激不尽。
非常感谢,
答案 3 :(得分:0)
这对我有用。
$query = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=800&photoreference=PHOTO_REF&key=API_KEY";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $query);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$a = curl_exec($ch);
$url = Null;
if(preg_match('#Location: (.*)#', $a, $r)) {
$url = trim($r[1]);
}
答案 4 :(得分:0)
我们必须首先了解 Google许可条件:
3.2.4禁止滥用服务的限制。
禁止刮刮客户将不会提取,出口或刮刮 在服务之外使用的Google Maps Content。例如, 客户不会:(i)预取,索引,存储,转发或重新托管 服务之外的Google Maps Content; (ii)批量下载Google 地图图块,街景图像,地理编码,方向,距离矩阵 结果,道路信息,地点信息,高程值和 时区详细信息; (iii)复制并保存公司名称,地址或 用户评论;或(iv)通过文字转语音使用Google Maps Content 服务。
更多帮助: