【问题标题】:Google API returns a response 200 empty JSONGoogle API 返回响应 200 空 JSON
【发布时间】:2019-08-23 11:44:12
【问题描述】:

我正在尝试在 Google Apps 脚本脚本中向 Google Street View Publish API 发出 HTTP GET 请求,以获取照片列表并将有关它们的元数据保存到 Google 电子表格中。

我在脚本中用来联系 API 的代码:

var url = 'https://streetviewpublish.googleapis.com/v1/photos?fields=nextPageToken%2Cphotos&key=' + API_KEY;

var response = UrlFetchApp.fetch(url, {
    muteHttpExceptions: true,
    headers: {
        //the accessToken is borrowed from the Apps Script Infrastructure `ScriptApp.getOAuthToken()`
        //source: https://www.youtube.com/watch?v=aP6pxK3jexc
        Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    }
});
console.log('API response:\n' + response);

并在脚本的清单 oauthscopes.json 文件中包含街景身份验证:

...
"oauthScopes": [
  "https://www.googleapis.com/auth/streetviewpublish", 
  "https://www.googleapis.com/auth/script.external_request", 
  "https://www.googleapis.com/auth/spreadsheets"
]
...

使用基于时间的触发器每 15 分钟运行一次脚本,它已经工作了几个小时,并返回一个 JSON 对象以及帐户上的照片,直到API 停止返回响应,现在它只是返回一个空的 JSON 对象{}

我认为我没有消耗 API 使用的报价,我的 GCP 仪表板中的数字如下:

尝试创建另一个API KEY 并在脚本中使用它,但仍然没有成功。

此外,当尝试从 Google APIs Explorer 测试 API、授权并执行时,它也会给我一个带有空 JSON 对象的响应代码 200。 以前可以,现在不行了!

这可能是什么问题?


编辑:

按照 cmets 的建议,我尝试:

  • 使用或不使用 API 密钥和其他参数调用 API 端点,如下所示:

https://streetviewpublish.googleapis.com/v1/photos?fields=nextPageToken%2Cphotos&key=' + API_KEY

https://streetviewpublish.googleapis.com/v1/photos?key=' + API_KEY

https://streetviewpublish.googleapis.com/v1/photos

  • 此外,还尝试从 account security checkup 撤消对 Google API 资源管理器和 Google Apps 脚本上的脚本的访问权限。正因为如此,当尝试再次运行它时,它会打开一个弹出窗口来再次请求授权/许可,我也同意了。

  • 尝试退出 Google 帐户并清除浏览器缓存。

然而,仍然是相同的空 JSON 对象响应!


编辑 2:

  • 2 天前还停止了脚本的基于时间的触发器,仍然没有运气!

【问题讨论】:

  • 您已经通过此 API 上传照片了吗?如果不是,则响应为 200 的空 JSON 将是正常的。
  • @Erich,我不是要上传照片,而是使用 API 端点 GET https://streetviewpublish.googleapis.com/v1/photos?fields=nextPageToken%2Cphotos&key={YOUR_API_KEY} 来获取我之前上传的照片列表。在 API 资源管理器中,它是 streetviewpublish.photos.list。是的,我现在已经在帐户中保存了照片。
  • 你的代码?每个用户的配额是 60。你还没用完吗?
  • 当您从请求中删除 nextPageToken%2C 时会发生什么?
  • @TheMaster 我更新了问题以包含我在脚本中用于联系 API 的代码,请注意我每 15 分钟运行一次基于时间的触发器。

标签: google-apps-script google-cloud-platform google-api google-street-view google-streetview-publish


【解决方案1】:

文档说pageSize 默认为 100。事实并非如此。如果您指定pageSize 参数,它会返回带有照片的响应。

【讨论】:

  • 感谢您指出这一点!手动将pageSize 设置为100,就像一个魅力。
  • 确实是这个问题,谢谢!
猜你喜欢
  • 2019-12-12
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2021-06-24
  • 2015-06-03
  • 2011-10-27
  • 1970-01-01
  • 2021-04-02
相关资源
最近更新 更多