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'
Другие вопросы по тегам