2016-06-21 46 views
3

google places APIから返された画像をサーバーに保存する必要があります。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)); 

をしかし、それは働いていない - それは空のファイルではなく、画像を保存し保存だとき - 私はそれがファイルの拡張子が欠落していると思いますが、私はそれを取得するかどうかはわかりません: 私が試してみました。誰もGoogleの場所の写真を保存するための任意の方法を知っていますか?

私は自分のコードを書くためにPHPを使用しています。

すべてのヘルプは素晴らしいことだ

答えて

1

利用規約には制限があります。特に、パラグラフ10.5(d)は言う:

あなたがプリフェッチません

、キャッシュ、インデックス、またはあなたは単に目的のためのコンテンツの限られた量を格納することができることを除いて、サービス外で使用するすべてのコンテンツを保存しますネットワークの待ち時間に起因するMaps API実装のパフォーマンスの向上(Googleが正確に使用状況を追跡できないようにする目的ではない)、およびというストレージが30日以上の一時的なものである場合に限ります。安全です。 は、コンテンツまたはサービスのいかなる部分も操作または集約しません。 は、帰属を何ら変更しません。この時点で

https://developers.google.com/maps/terms#10-license-restrictions

TOSは、サーバー上の画像を保存することはできませんように見えます。

+0

これは興味深い点です。私の知る限り、Google Maps APIのリクエスト数は限られているので、リクエストを減らして(たとえば)1か月に1回しかコンテンツを更新しないようにすることが目的です。だから私のユーザーにコンテンツを表示するたびに、イメージをロードする要求をする必要はありません。 –

0

ご質問にお答えします私はリダイレクトURL(secon one)を使用してあなたと似たようなことを試みます。

$url = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=$maxwidth&photoreference=$reference&key=$api_key"; 

しかし、それはそれにリダイレクトします:あなたはGoogleプレイスからの写真のURLを取得したいとき、このURLを送信する必要が知っているよう

https://lh6.googleusercontent.com/-n5VUsX_0WSA/VU3vvlOKX3I/AAAAAAAAEN8/yg9TAhSbvCwC8lA3bB56SjcUcAx3zXYtQCLIB/s1600-w800/ 

私は何が第2の最初に取得されますその後、URLカールからのファイルが、(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(); 

    } 

は多分これはそれはあなたを与えることができますいくつかのアイデア。誰かがそれをする方法を知っていれば、それは感謝します。

ありがとう、

関連する問題