2017-08-14 10 views
0

私はマニュアルの「写真のアップロード」の下にリストされている手順を複製しようとすると、PHPを通じてAPIを公開ストリートビューでいくつかの問題を抱えているストリートは、PHPでAPIを公開 - アップロードの参照が見つからない

https://developers.google.com/streetview/publish/first-app

私は最初の部分が働いており、アップロードURLを変数$ upload_urlに取り出すことができます。

これは、ステップ2

$another = array(
     'upload-file' => curl_file_create($imagepath) 
    ); 
    $header = array (
     "Authorization: Bearer $accesstoken", 
     "Content-Type: multipart/form-data" 
    ); 
    $options = array(
     CURLOPT_URL => $upload_url, 
     CURLOPT_POST => true, 
     CURLOPT_POSTFIELDS => $another, 
     CURLOPT_HTTPHEADER => $header, 
     CURLOPT_SSL_VERIFYPEER => false 
    ); 
    $ch = curl_init(); 
    curl_setopt_array($ch, $options); 
    $response = curl_exec($ch); 


echo(curl_error($ch)); 
     curl_close($ch); 

var_dump($response); 

curl_errorための私のコードでは、何かを返す、と$response trueを返し、そう私は、ファイルが正常にアップロードされたと仮定していますされていません。ステップ3のために

I var_dump($result)は私がアップロードされたファイルが何かアドバイスは歓迎されるであろうuploadUrl

Array ([uploadReference] => Array ([uploadUrl] => https://streetviewpublish.googleapis.com/media/user/XXXX/photo/YYYY) [pose] => Array ([latLngPair] => Array ([latitude] => 53.59398125 [longitude] => -1.95349941)) [captureTime] => Array ([seconds] => 1502560132)) string(255) 
"{ 
    "error": { 
    "code": 404, 
    "message": "The upload reference cannot be found. Please make sure you have uploaded a file to the upload reference URL. If this error persists, request a new upload URL and try again.", 
    "status": "NOT_FOUND" 
    } 
} " 

ではないことを示唆している404を取得する場合、私は、

$data['uploadReference']['uploadUrl']=$upload_url; 
$data['pose']['latLngPair']['latitude']=$latitude; 
$data['pose']['latLngPair']['longitude']=$longitude; 

$data['captureTime']['seconds']=$timestamp;  


$data_string = json_encode($data); 

print_r($data); 
$ch = curl_init('https://streetviewpublish.googleapis.com/v1/photo?key='.$apikey); 

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");        
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(          
    'authorization: Bearer '.$accesstoken, 
    'Content-Type: application/json',            
    'Content-Length: ' . strlen($data_string))          
);                             
$result = curl_exec($ch); 

curl_close ($ch); 

を使用しています私の本能は、問題は3番目ではなく2番目のステップであるということですが、私はすべての提案に開放しています。前もって感謝します。

答えて

0

パノラマ写真をアップロードしようとしたときにこのエラーが発生しました。

"error": { 
    "code": 404, 
    "message": "The upload reference cannot be found. Please make sure you have uploaded a file to the upload reference URL. If this error persists, request a new upload URL and try again.", 
    "status": "NOT_FOUND", 
    "details": [ 
     { 
     "@type": "type.googleapis.com/google.rpc.DebugInfo", 
     "detail": "[ORIGINAL ERROR] generic::not_found: com.google.geo.ugc.streetview.publish.boq.service.util.ApiException: The upload reference cannot be found. Please make sure you have uploaded a file to the upload reference URL. If this error persists, request a new upload URL and try again. Code: NOT_FOUND [google.rpc.error_details_ext] { message: \"The upload reference cannot be found. Please make sure you have uploaded a file to the upload reference URL. If this error persists, request a new upload URL and try again.\" }" 
     } 
    ] 
    } 
} 

あなたは正しい360の写真をアップロードしていないようです。アップロードしている360画像にmetadataが含まれていることを確認してください。この画像を確認するにはExifToolをダウンロードしてください。

+0

ありがとうございます。イメージファイルは互換性があり、Streetview Androidアプリからアップロードすることで受け入れられました(結局、それは私がそれを改善しようとしている本当にひどいワークフローです)。 ステップ2のアップロードが失敗していることは間違いありません。curl_getinfo()を見れば、500 Internal Server Errorが返されますが、それ以上は役に立ちません。 –

+1

はい。 Streetviewアプリで直接撮影したパノラマ画像をStreetviewでアップロードしようとしました。カールを使って画像をアップロードしようとしたとき、私は上記のエラーを受け取りました。これは、[Photo Sphere XMPメタデータ](https://developers.google.com/streetview/spherical-metadata)に記載されているように、公開する画像に必要なメタデータがないためです。 ExifToolを使用して抽出されたサンプルメタデータは次のとおりです。http://imgur.com/L6MC8yd – abielita

+0

私はステップ2のカール操作を行うためにバッチファイルを出力するスクリプトを作りました。働くそれに基づいて、私は、この問題はjpgファイルとそのメタデータにあると敬意を表することに同意します。 API経由で手動でアップロードできます。この問題は、PHPを使用したカール操作のパラメータにはっきりとはっきりとしています。 –

0

私は私のために解決し、サーバー側のコールとカール・PHPの交換手順2 でカールのlibとPHPで同様の問題を持っていますが、つまり完全なファイルパスを知っておく必要があります。

$_SERVER['DOCUMENT_ROOT'].$webdir.$filename 

ここに私のステップ2です..

$result = exec('curl --request POST \--url "'. addslashes($upload_url) .'" \--upload-file "'.$file_name_with_full_path.'" \--header "Authorization: Bearer '. addslashes($_GOOGLE_API['access_token']) .'" '); 

サーバはクラウドのいくつかの並べ替えは、Linuxシステムをホストされているが、これは役立ちます願っています。

関連する問題