进行首次 API 调用

要完成对 Street View Publish API 进行基本调用所需的步骤,请按照本教程中的步骤操作。

进行 HTTP 调用

您可以使用多种工具(例如 curl、wget 和 Postman)调用 Street View Publish API。 在大多数情况下,您需要使用自己选择的编程语言来构建使用 API 的客户端应用,但本教程将指导您逐步完成各个命令的学习。

如果您不想进行直接 HTTP 调用,我们还提供了一些客户端库

前提条件

  1. 您需要拥有 Google 帐号才能访问 Google API 控制台、请求 API 密钥和注册您的应用。

  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. 熟悉 JavaScript 对象表示法 (JSON) 数据格式的核心概念。JSON 是一种与语言无关的常见数据格式,可通过简单的文本方式来表示任意数据结构。如需了解详情,请参阅 json.org

获取 API 密钥

出于身份验证和配额目的,您需要将 Google Street View Publish API 与从 Developers Console 生成的凭据结合使用。

  1. 导航到 Developers Console 中的凭据页面。
  2. 如果您已有 API 密钥,则可以使用该密钥中的值。否则,请从 New credentials 菜单中选择 API key 创建新 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 密钥和访问令牌后,您可以在 shell 上运行以下命令以对服务执行 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'
  

上传照片

创建照片需要三次单独的调用。第一个调用会返回一个上传网址,第二次调用中会使用该 ID 来上传照片字节。照片字节上传后,第三次调用会上传照片的元数据并返回照片 ID。

  1. 请求上传网址
            $ 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. 将照片字节上传到上传网址
            $ 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,系统会清除您照片的 poseupdateMask 的一些可能值包括:places, pose.heading, pose.latlngpair, pose.level, connections。您可以在 updateMask 中输入多个以英文逗号分隔的值。