첫 번째 API 호출하기

스트리트 뷰 게시 API를 기본적으로 호출하는 데 필요한 단계를 완료하려면 이 튜토리얼의 단계를 따릅니다.

HTTP 호출하기

Street View Publish API는 curl, wget, Postman과 같은 여러 도구를 사용하여 호출할 수 있습니다. 대부분의 경우 원하는 프로그래밍 언어를 사용하여 API를 사용하는 클라이언트 애플리케이션을 빌드하고자 하지만, 이 튜토리얼에서는 개별 명령어를 안내하여 기본사항을 안내합니다.

또한 직접 HTTP 호출을 하지 않으려는 경우 클라이언트 라이브러리를 제공합니다.

기본 요건

  1. Google API 콘솔에 액세스하고 API 키를 요청한 후 애플리케이션을 등록하려면 Google 계정이 필요합니다.

  2. Google Developers Console에서 프로젝트를 만들고 애플리케이션이 API 요청을 제출할 수 있도록 승인 사용자 인증 정보를 받습니다.

  3. 프로젝트를 만든 후에 Street View Publish API가 애플리케이션에서 등록된 서비스 중 하나인지 확인하세요.

    1. API 콘솔로 이동하여 방금 등록한 프로젝트를 선택합니다.
    2. 사용 설정된 API 페이지로 이동합니다. Google Street View API가 사용 설정된 API 목록에 있는지 확인합니다. 사용 설정되지 않았다면 API 라이브러리를 열고 API를 사용 설정합니다.
  4. OAuth 2.0 승인을 구현하는 방법은 인증 가이드를 참조하세요.

  5. 자바스크립트 객체 표기법 (JSON) 데이터 형식의 핵심 개념을 숙지합니다. JSON은 임의의 데이터 구조를 간단한 텍스트로 표현하는 언어 독립적인 일반 데이터 형식입니다. 자세한 내용은 json.org를 참조하세요.

API 키 가져오기

인증 및 할당량의 경우 Developers Console에서 생성된 사용자 인증 정보로 Google Street View Publish API를 사용해야 합니다.

  1. Developers Console에서 사용자 인증 정보 페이지로 이동합니다.
  2. 이미 API 키가 있는 경우 해당 값을 사용할 수 있습니다. 그렇지 않은 경우 새 사용자 인증 정보 메뉴에서 API 키를 선택하여 새 키를 만듭니다.

액세스 토큰 받기

  1. Google Developers OAuth 2.0 Playground로 이동합니다.
  2. 설정 메뉴 (오른쪽 상단의 톱니바퀴 아이콘)를 클릭하고 자체 OAuth 사용자 인증 정보 사용을 선택한 다음 Client IDClient secret을 해당 필드에 입력한 다음 닫기를 클릭합니다.
  3. 1단계: API 승인 선택에서 자체 범위 입력 필드에 API 범위 https://www.googleapis.com/auth/streetviewpublish를 입력한 다음 API 승인을 클릭합니다. API 승인 여부를 확인하는 새 페이지가 열립니다.
  4. 토큰에 대한 승인 코드 교환을 클릭합니다. 이렇게 하면 다음 단계에서 사용할 액세스 토큰이 포함된 액세스 토큰 필드가 채워집니다. 액세스 토큰은 60분 후에 만료됩니다. 토큰이 만료되기 전에 토큰을 자동 갱신하는 옵션을 선택하면 새 토큰이 생성됩니다.

HTTP 요청 보내기

API 키와 액세스 토큰이 있으면 셸에서 다음 명령어를 실행하여 서비스에 HTTP 호출을 수행할 수 있습니다. 아래 예에서는 /v1/photo:startUpload 메서드를 호출합니다.

    $ curl --request POST \
    --url 'https://streetviewpublish.googleapis.com/v1/photo:startUpload?key=YOUR_API_KEY' \
    --header 'authorization: Bearer YOUR_ACCESS_TOKEN' \
    --header 'Content-Length: 0'
  

샘플 요청

위의 HTTP 요청을 확인했으면 추가 메서드를 사용해 보세요. 다양한 통화가 아래에 표시됩니다.

사진 목록 가져오기

    $ curl --request GET \
    --url 'https://streetviewpublish.googleapis.com/v1/photos?key=YOUR_API_KEY' \
    --header 'authorization: Bearer YOUR_ACCESS_TOKEN'
  

사진 가져오기

    $ curl --request GET \
    --url 'https://streetviewpublish.googleapis.com/v1/photo/PHOTO_ID?key=YOUR_API_KEY' \
    --header 'authorization: Bearer YOUR_ACCESS_TOKEN'
  

사진 업로드

사진을 만들려면 별도의 호출 3개가 필요합니다. 첫 번째 호출은 두 번째 호출에서 사진 바이트를 업로드하는 데 사용되는 업로드 URL을 반환합니다. 사진 바이트가 업로드되면 세 번째 호출은 사진의 메타데이터를 업로드하고 사진 ID를 반환합니다.

  1. 업로드 URL 요청
            $ curl --request POST \
            --url 'https://streetviewpublish.googleapis.com/v1/photo:startUpload?key=YOUR_API_KEY' \
            --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
            --header 'Content-Length: 0'
          
  2. 사진 바이트를 업로드 URL에 업로드합니다.
            $ curl --request POST \
            --url 'UPLOAD_URL' \
            --upload-file 'PATH_TO_FILE' \
            --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'
          
  3. 사진
            $ curl --request POST \
            --url 'https://streetviewpublish.googleapis.com/v1/photo?key=YOUR_API_KEY' \
            --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
            --header 'Content-Type: application/json' \
            --data '{
                      "uploadReference":
                      {
                        "uploadUrl": "UPLOAD_URL"
                      },
                      "pose":
                       {
                         "heading": 105.0,
                         "latLngPair":
                         {
                           "latitude": 46.7512623,
                           "longitude": -121.9376983
                         }
                      },
                      "captureTime":
                      {
                        "seconds": 1483202694
                      },
                    }'
          
    의 메타데이터 업로드

사진 업데이트

   $ curl --request PUT \
    --url 'https://streetviewpublish.googleapis.com/v1/photo/PHOTO_ID?key=YOUR_API_KEY&updateMask=pose.latLngPair' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
     --header 'Content-Type: application/json' \
     --data '{
               "pose":
               {
                 "latLngPair":
                 {
                   "latitude": 46.7512624,
                   "longitude": -121.9376982
                 }
               }
             }'
  

여러 장의 사진을 일괄 업데이트

   $ curl --request POST \
    --url 'https://streetviewpublish.googleapis.com/v1/photos:batchUpdate?key=YOUR_API_KEY' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
     --header 'Content-Type: application/json' \
     --data '{
              "updatePhotoRequests": [
                  {
                      "photo": {
                          "photoId": {
                              "id": "FIRST_PHOTO_ID"
                          },
                          "pose": {
                              "latLngPair": {
                                  "latitude": 37.1701638,
                                  "longitude": -122.3624387
                              }
                          }
                      },
                      "updateMask": "pose.latLngPair"
                  },
                  {
                      "photo": {
                          "photoId": {
                              "id": "SECOND_PHOTO_ID"
                          },
                          "pose": {
                              "latLngPair": {
                                  "latitude": 37.1685704,
                                  "longitude": -122.3618021
                              }
                          }
                      },
                      "updateMask": "pose.latLngPair"
                  }
              ]
          }'
  

사진 삭제

    $ curl --request DELETE \
    --url 'https://streetviewpublish.googleapis.com/v1/photo/PHOTO_ID?key=YOUR_API_KEY' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'
  

updateMask란 무엇인가요?

updateMask을 사용하면 사진 전체가 아닌 일부 사진을 업데이트하려는 경우 요청을 작게 유지할 수 있습니다. updateMask를 사용하지 않으면 요청이 전체 사진을 업데이트합니다. 즉, updateMask를 설정하지 않고 요청에 pose이 없으면 사진의 pose가 삭제됩니다. 가능한 updateMask 값은 places, pose.heading, pose.latlngpair, pose.level, connections입니다. updateMask에 쉼표로 구분된 값을 여러 개 입력할 수 있습니다.