[英]Save copy of a photo from Google Places API Place Photos using curl
[英]Saving google places api photos to my server
我需要將從谷歌地點 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 編寫代碼。
任何幫助都會很棒
您應該了解服務條款中的限制。 特別是,第 10.5 (d) 段說:
您不會預取、緩存、索引或存儲要在服務之外使用的任何內容,除非您可以存儲有限數量的內容,但由於網絡延遲(和不是為了阻止 Google 准確跟蹤使用情況),並且僅當此類存儲: 是臨時的(並且在任何情況下都不會超過 30 個日歷日); 是安全的; 不操縱或聚合內容或服務的任何部分; 並且不會以任何方式修改歸屬。
https://developers.google.com/maps/terms#10-license-restrictions
此時看起來 ToS 不允許在您的服務器上保存圖像。
您首先需要使用 Google Places Photo API 來獲取圖像資源:
它應該在status:200返回一個實際的圖像資源,您可以使用以下方法保存:
file_put_contents({{path}}, {{image resource}});
回答您的問題時,我嘗試做一些與您類似的事情,但使用重定向 url(第二個)。 如您所知,當您想從 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/
我所做的是首先獲取第二個 url,然后嘗試從 cURL 獲取文件,但結果與您相似,一個空文件(0 字節),我嘗試了不同的格式(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();
}
也許這可以給你一些想法。 如果有人知道怎么做,那將不勝感激。
非常感謝,
這對我有用。
$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]);
}
我們必須首先了解Google 許可條件:
3.2.4 對濫用服務的限制。
No Scraping 客戶不得提取、導出或以其他方式抓取 Google 地圖內容以供在服務之外使用。 例如,客戶不會:(i) 在服務之外預取、索引、存儲、轉發或重新托管 Google 地圖內容; (ii) 批量下載 Google 地圖圖塊、街景圖像、地理編碼、方向、距離矩陣結果、道路信息、地點信息、海拔值和時區詳細信息; (iii) 復制並保存企業名稱、地址或用戶評論; 或 (iv) 將 Google 地圖內容與文本轉語音服務一起使用。
更多幫助:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.