【问题标题】:Google Drive API call to insert Public Share permissions on Fusiontables causes Internal ErrorGoogle Drive API 调用在 Fusiontables 上插入公共共享权限导致内部错误
【发布时间】:2018-12-27 06:23:10
【问题描述】:

我一直在尝试使用 Google Drive API 使 Fusiontable 公开可读,但无法使其正常工作。我可以使用 OAuth 2.0 Playground 为其他 Google Drive 文档插入公共共享权限,但对于 Fusiontables,我收到 HTTP 500 错误“内部错误”。请注意,我已尝试包含“Drive API v2”和“Fusion Tables API v1”下可用的所有范围。

我知道 Google 不再开发和支持 Fusiontables,但我想知道是否有人找到了解决此问题的解决方法?我也没有尝试过 API 的旧版/已弃用版本。

以下是实际的 API 请求格式和来自 OAuth Playground 的对 Fusiontable 权限插入 (HTTP 500) 和 Doc 权限插入 (HTTP 200) 的响应。请求之间的唯一区别是请求 URI 中的 fusiontable_id 或 document_id:

请求:

POST /drive/v2/files/<fusiontable_id or document_id>/permissions HTTP/1.1
Host: www.googleapis.com
Content-length: 33
Content-type: application/json
Authorization: Bearer <access_token>

{"role":"reader","type":"anyone"}

Fusiontable 响应:

HTTP/1.1 500 Internal Server Error
Content-length: 180
X-xss-protection: 1; mode=block
X-content-type-options: nosniff
Expires: Tue, 04 Nov 2014 23:51:58 GMT
Vary: Origin,Referer,X-Origin
Server: GSE
Cache-control: private, max-age=0
Date: Tue, 04 Nov 2014 23:51:58 GMT
X-frame-options: SAMEORIGIN
Content-type: application/json; charset=UTF-8
{
  "error": {
    "code": 500, 
    "message": "Internal Error", 
    "errors": [
      {
        "domain": "global", 
        "message": "Internal Error", 
        "reason": "internalError"
      }
    ]
  }
}

文档回复:

HTTP/1.1 200 OK
Content-length: 281
X-xss-protection: 1; mode=block
X-content-type-options: nosniff
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Vary: Origin,Referer,X-Origin
Server: GSE
Etag: "M4l5RvCt2StP2jOGfgyJPGdTZTc/dgFZz37LrQjIXplUkmnh3VtemzQ"
Pragma: no-cache
Cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Wed, 05 Nov 2014 15:35:56 GMT
X-frame-options: SAMEORIGIN
Content-type: application/json; charset=UTF-8
{
  "kind": "drive#permission", 
  "etag": "\"M4l5RvCt2StP2jOGfgyJPGdTZTc/dgFZz37LrQjIXplUkmnh3VtemzQ\"", 
  "role": "reader", 
  "type": "anyone", 
  "id": "anyone", 
  "selfLink": "https://www.googleapis.com/drive/v2/files/<document_id>/permissions/anyone"
}

【问题讨论】:

  • 澄清一下:“Google 不再开发和支持 Fusiontables”并非如此,我很想知道这个想法的来源:-) 如果您将此问题发送给 googletables-如果使用实际的 Fusion Tables 文档 ID,我们可以通过 feedback@google.com 查看我们的日志以找出问题所在。
  • 谢谢罗德,我会按照你的建议跟进。我认为 Fusion Tables 的开发已经停止,因为 Fusion Tables API Users Group 不再受到监控,并且因为 the issue with reloading Google Spreadsheets 似乎足够老且足够重要,如果 Fusion Tables 仍在开发中,它就会得到修复。
  • 我可能应该改写“不受监控”的措辞,以澄清 FT 处于活动状态,只是不在该列表中。至于电子表格导入问题,在此期间所有 Drive 应用程序都存在一般问题,其症状相同但原因不同。电子表格导入现在很稳定。
  • 算我松了一口气,我们有一个围绕 Fusion Tables 构建的高流量应用程序,如果它采用 Google Reader 的方式,将会出现严重问题。

标签: google-drive-api google-fusion-tables


【解决方案1】:

这似乎是由于 Drive API 中的错误所致。我已经找到了内部错误,并向工程团队提出了这个问题。目前没有已知的解决方法。

【讨论】:

  • 几个月后,内部错误似乎仍然存在?而且现在基于 XML 的 GData API 已经关闭,确实似乎没有任何解决方法......
【解决方案2】:

我有一个好消息!

我收到了一封来自 googletables-feedback 的电子邮件。他们说它现在应该可以工作了。

我在 Google Client JS API 上的代码运行良好

var setAccess = function setAccessF() {
    gapi.client.request({
        path : '/drive/v2/files/{fileID}/permissions',
        method : 'post',
        body : {
            'value' : 'anyone',
            'type' : 'anyone',
            'role' : 'reader'
        }
    }).then(opt_onFulfilled, opt_onRejected);
}

function opt_onRejected(e) {
    console.log(e)
}

function opt_onFulfilled(e) {
    console.log(e)
}

【讨论】:

  • 我没有使用 Google Client JS API,但我确认我现在可以自动公开 FusionTable。谢谢!
【解决方案3】:

如果您同意临时解决方法,插入 Fusion Table 公共共享权限仍然适用于较旧的基于 XML 的 GData API。您可以查看here,但请注意页面顶部的红色横幅,上面写着“Google Documents List API 第 3 版的弃用期即将结束。 2015 年 4 月 20 日,我们将停止为此 API 提供服务。'

因此,如果您现在需要解决该问题,那么您将一直持续到 4 月,然后我们希望 Drive API 错误在此之前得到修复...

【讨论】:

  • 我将解决方法添加到我的一个 GitHub 项目中,因此您可以查看那里的代码:goo.gl/NDxHIr 第 165 行的方法,它是 Objective-C,尽管大部分只是形成一个POST 请求应该易于阅读。
【解决方案4】:

就个人而言,我尝试添加权限的文档已失效。这也可能是其他人的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多