簡體   English   中英

將 google 位置 api 照片保存到我的服務器

[英]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 來獲取圖像資源:

https://maps.googleapis.com/maps/api/place/photo?maxwidth=[width]&photoreference=[photo_reference]&key=[apiKEY]

它應該在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 地圖內容與文本轉語音服務一起使用。

更多幫助:

https://cloud.google.com/maps-platform/terms/#3-license

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM