Street View Publish API PHP - ссылка на загрузку не найдена после загрузки метаданных
Я использую PHP для публикации панорамных изображений. Я выполняю 3 шага в Документе Google и успешно получил PhotoID после загруженных метаданных, но когда я использую эти photoID для другого запроса, он возвращает "Ссылка для загрузки не найдена. Убедитесь, что вы загрузили файл на URL ссылки для загрузки.. Если эта ошибка повторяется, запросите новый URL-адрес для загрузки и повторите попытку ".
Вот мой код:
Получить URL для загрузки
$cur_upload_url = curl_init();
curl_setopt_array($cur_upload_url, array(
CURLOPT_URL => "https://streetviewpublish.googleapis.com/v1/photo:startUpload?key=$api_key",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "" ,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer $access_token",
"content-type: application/json",
"Content-Length: 0"
),
));
$response = curl_exec($cur_upload_url);
echo $response;
$re = '/https?:\/\/[^"]*/';
$str = $response;
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
$upload_url = $_SESSION['UploadRef'] = $matches[0][0];
Отклик:
{
"uploadUrl":"https://streetviewpublish.googleapis.com/media/user/104039888676357869012/photo/2857577503984652262"
}
Загрузить фото для загрузки URL:
$cmd = exec("curl --request POST \
--url '$upload_url' \
--upload-file '$imagePath' \
--header 'Authorization: Bearer $access_token'"
, $outputAndErrors, $return_value);
Это ничего не вернуть.
Загрузить метаданные
$curl_meta = curl_init();
curl_setopt_array($curl_meta, array(
CURLOPT_URL => "https://streetviewpublish.googleapis.com/v1/photo?key=$api_key",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => '{
"uploadReference":
{
"uploadUrl": "'.$upload_url.'"
},
"pose":
{
"heading": 95.0,
"latLngPair":
{
"latitude": '.$latVal.',
"longitude": '.$langVal.'
}
},
"captureTime":
{
"seconds": '.$time_stamp.'
},
}',
CURLOPT_HTTPHEADER => array(
"authorization: Bearer $access_token",
"content-type: application/json"
),
));
$response_meta = curl_exec($curl_meta);
отклик
{
"photoId":{
"id":"CAoSLEFGMVFpcE4wTDEycFl6S2xVOWtUWmlRVHZCSm90bHp6QUpRWVZ5QlNoWnF4"
}
}
И когда я пытаюсь обновить соединение или запустить photo.create API:
$curl_meta = curl_init();
curl_setopt_array($curl_meta, array(
CURLOPT_URL => "https://streetviewpublish.googleapis.com/v1/photo?key=$api_key",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => '{
"photoId": {
"id": "'.$photoID.'"
},
"uploadReference": {
"uploadUrl": "'.$upload_url.'"
},
"captureTime": "'.(new DateTime())->format('Y-m-d\TH:i:s\Z').'",
"connections": [],
"places": [],
"pose": {
"heading": 0
}
}',
CURLOPT_HTTPHEADER => array(
"authorization: Bearer $access_token",
"content-type: application/json"
),
));
$response_meta = curl_exec($curl_meta);
Это ответ
{
"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"
}
}
Получить фотографию с возвращенным идентификатором photoID
exec('curl --request GET \
--url "'. addslashes('https://streetviewpublish.googleapis.com/v1/photo/'.$photoID.'?key='.$api_key) .'" \
--header "Authorization: Bearer '. addslashes($access_token) .'" ',
$outputAndErrors, $return_value);
отклик
"error":{
"code":404,
"message":"Image not found for id: CAoSLEFGMVFpcE9faE52aG95TTYtaENjd1NRX3BCU2l4czcwVnVXQS1jd3dxMGxO",
"status":"NOT_FOUND"
}
Я так застрял, и мне нужно найти решение.
Большое спасибо!
1 ответ
Я также попробовал ваш запрос, используя раздел Try this API, и обнаружил ту же ошибку. Как я заметил, photo.create
используется для публикации загруженной фотографии, как и 3. Загрузка метаданных фотографии. Когда я повторил это и удалил photoId
параметр,
{
"uploadReference": {
"uploadUrl": "https://streetviewpublish.googleapis.com/media/user/1234567890/photo/1234567890"
},
"connections": [],
"places": [],
"pose": {},
}
Я успешно получил 200 и photoID (тот же вывод, который вы получите с помощью 3. Загрузите метаданные фотографии).
Что касается "Получить фотографию с возвращенным идентификатором photo", я не думаю, что это необходимо поставить addslashes
в вашем запросе.
$ curl --request GET \
--url 'https://streetviewpublish.googleapis.com/v1/photo/PHOTO_ID?key=YOUR_API_KEY' \
--header 'authorization: Bearer YOUR_ACCESS_TOKEN'