Google Drive API V3:获取修订内容

时间:2017-05-17 21:07:15

标签: google-drive-api

Google Drive API从V2更改为V3,从响应中删除revision.items。这些项目有一个url列表,是.txt,.pdf等文件。(我使用的是直接的HTTP协议,没有包装器)。 在V3中似乎没有办法做到这一点。但是有一个?alt = media参数,它应该返回一个文件,但尝试403时会出错403。

任何线索?

https://developers.google.com/drive/v3/reference/revisions/get

3 个答案:

答案 0 :(得分:2)

甲。 Google文档

对于Google文档,由于无法使用Drive API v3检索修订文件,因此我使用新的解决方法对其进行了修改。新的解决方法是使用Drive API v2。 Drive API v2的drive.revisions.get不仅可以检索修订列表,还可以检索导出链接。我想到了导出链接的使用。这成为当前形势的新解决方案。

此示例使用修订版ID下载电子表格。

1。检索修订列表和导出链接

curl -sSLG \
    -H 'Authorization: Bearer ### Access token ###' \
    "https://www.googleapis.com/drive/v2/files/### FileID ###/revisions?fields=items(exportLinks%2Cid)"

2。从导出链接检索修订文件

curl -sSLG \
    -H 'Authorization: Bearer ### Access token ###' \
    "https://docs.google.com/spreadsheets/export?id=### FileID ###&revision=### revision number ###&exportFormat=xlsx" \
    -o outputfilename.xlsx

参考:https://developers.google.com/drive/v2/reference/revisions/get

B中。 Google Docs除外

在Google文档除外的情况下,修订ID只是文件ID。因此,您不仅可以使用修订版ID下载(模式1),还可以下载普通文件(模式2)。

模式1:

curl -sSLG \
    -H 'Authorization: Bearer ### Access token ###' \
    "https://www.googleapis.com/drive/v3/files/### FileID ###/revisions/### RevisionID ###?alt=media" \
    -o outputfilename

模式2:

curl -sSLG \
    -H 'Authorization: Bearer ### Access token ###' \
    "https://www.googleapis.com/drive/v3/files/### RevisionID ###?alt=media" \
    -o outputfilename

参考:https://developers.google.com/drive/v3/reference/revisions/get

答案 1 :(得分:0)

目前在驱动器v3上似乎不可行。

修订API适用于非谷歌文档/幻灯片/表格(二进制文件),如上所述。对于原生谷歌文档文件,如果你尝试它会抱怨使用导出端点(文件/ id / export)。尝试导出结束点会导致错误,例如

"error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidParameter",
    "message": "Invalid field selection revisions=11175",
    "locationType": "parameter",
    "location": "fields"
   }
  ],
  "code": 400,
  "message": "Invalid field selection revisions=11175"
 }

我试过像“rev”,“revision”,“revisions”这样的字段而没有运气。 我在这里打开了一个功能请求https://issuetracker.google.com/u/1/issues/62825716

答案 2 :(得分:0)

我使用 this sample app 处理 OAUTH2 任务。

然后我添加了这个功能来进行驱动器调用。 exportLinks 是否为空无关紧要;只需构建如下 URL。

private async Task GetRevisionRedirect(string accessToken, string fileId, string revId)
{
    Log("Making API Call to get revision binary stream...");

    // builds the  request
    string userinfoRequestUri = "https://docs.google.com/feeds/download/documents/export/Export?id=" + fileId + "&revision=" + revId + "&exportFormat=docx";

    // sends the request
    HttpWebRequest userinfoRequest = (HttpWebRequest)WebRequest.Create(userinfoRequestUri);
    userinfoRequest.Method = "GET";
    userinfoRequest.Headers.Add(string.Format("Authorization: Bearer {0}", accessToken));
    userinfoRequest.ContentType = "application/x-www-form-urlencoded";
    userinfoRequest.Accept = "Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

    // gets the response
    WebResponse userinfoResponse = await userinfoRequest.GetResponseAsync();
    using (StreamReader userinfoResponseReader = new StreamReader(userinfoResponse.GetResponseStream()))
    {
        // reads response body
        System.IO.Stream streamDoc = userinfoResponseReader.BaseStream;
        var fileStream = File.Create("d:\\test.docx");
        streamDoc.CopyTo(fileStream);
        fileStream.Flush();
        fileStream.Close();
    }
}