正在忽略驱动器PDF修订ID

时间:2014-11-13 22:23:22

标签: google-apps-script google-drive-api

之前出现过,与Google Drive SDK相关:How do I get exportLinks for revisions in Google Drive API

我的问题不在于获取exportLinks - 只是API提供的那些不起作用。

以下是Advanced Drive Service文档中“清单修订”示例的修改版本,该示例记录了给定exportLinks的每个修订版本的fileId

function listRevisions(fileId) {
  var revisions = Drive.Revisions.list(fileId);
  if (revisions.items && revisions.items.length > 0) {
    for (var i = 0; i < revisions.items.length; i++) {
      var revision = revisions.items[i];
      var date = new Date(revision.modifiedDate);
      Logger.log('Date: %s, PDF exportLink: %s',
          date.toLocaleString(),
          revision.exportLinks[MimeType.PDF] );
    }
  } else {
    Logger.log('No revisions found.');
  }
}

日志

以下是具有两个“主要”修订版的测试文档的示例日志。修订号在exportLinks中明确提供。

[14-11-13 16:40:50:511 EST] Date: November 13, 2014 4:35:55 PM EST,
 PDF exportLink: https://docs.google.com/feeds/download/documents/export/Export?id=1V2zkXfyRGh_6gnCXtWlII6sxMQEDcLApRrEk-giIE2s&revision=28&exportFormat=pdf
[14-11-13 16:40:50:512 EST] Date: November 13, 2014 4:37:51 PM EST,
 PDF exportLink: https://docs.google.com/feeds/download/documents/export/Export?id=1V2zkXfyRGh_6gnCXtWlII6sxMQEDcLApRrEk-giIE2s&revision=32&exportFormat=pdf

到目前为止,这么好。除了这些链接打开文档的SAME版本...最新。 (来吧,尝试一下 - 文件是公开的。)

问题:是否有某种格式的exportLinks会实际下载指定的修订版? (也就是说'revision'参数应该被命名为其他东西)

1 个答案:

答案 0 :(得分:7)

Google工程师使用下面显示的代码重现了该问题,并针对此提出了内部错误报告。虽然示例代码位于Google Apps脚本中,但问题出在Google云端硬盘中。

您可以通过访问Issue 4008问题跟踪器上的来跟踪任何进度。

function test() {
  var content = Utilities.newBlob('Apple', 'text/plain');
  var file = {
    title: 'Test Document'
  };
  file = Drive.Files.insert(file, content, {
    convert: true
  });

  var doc = DocumentApp.openById(file.id);
  doc.getBody().appendParagraph('Banana');
  doc.saveAndClose();

  var oauthToken = ScriptApp.getOAuthToken();

  var revisions = Drive.Revisions.list(file.id).items;
  revisions.forEach(function(revision) {
    // revision = revisions[];
    Object.keys(revision.exportLinks).forEach(function(mimeType) {
      var link = revision.exportLinks[mimeType];
      var response = UrlFetchApp.fetch(link, {
        headers: {
          Authorization: 'Bearer ' + oauthToken
        }
      });
      var blob = response.getBlob();
      var parts = blob.getName().split('.');
      blob.setName(parts[0] + '-' + revision.id + '.' + parts[1]);
      DriveApp.createFile(blob);
    });
  });
}