google-slides-api – 我可以通过API从谷歌幻灯片中获得演讲者笔记吗?

我想通过API从Google幻灯片中获取演讲者笔记,但我找不到演讲者笔记的任何字段.

供参考:方法:presentations.pages.get

这样做有什么好办法?

最佳答案 如果没有API,我不会建议这是一个很好的方法.事实上它太可怕了.但在这里.如果你绝对必须这样做.它也可能有点不稳定.

步骤是:

>通过Drive API将演示文稿导出为PowerPoint .pptx文件
>解压缩文件 – 它是一个包含XML文件的目录结构的zip文件.
>识别发言人备注文件并根据您的要求处理它们(例如,提取所有文本,或处理XML等).

丑陋吧?以下是Apps脚本中的示例:

>在脚本中的高级服务中启用Drive API(资源>高级Google服务).

function example() {
  // Print out the speaker notes
  Logger.log(getNotes('123abc......asd'));
}

// Returns an array of strings, one string per slide
// representing the speaker notes.
function getNotes(presentationId) {
  //DriveApp.createFile();
  var notesRegex = /ppt\/notesSlides\/notesSlide\d+\.xml/;

  var url = 'https://www.googleapis.com/drive/v2/files/' + presentationId +
    '/export?mimeType=application%2Fvnd.openxmlformats-officedocument.presentationml.presentation';
  var options = {
    headers: {
      Authorization : 'Bearer ' + ScriptApp.getOAuthToken()
    }
  };
  var response = UrlFetchApp.fetch(url, options);

  var zipBlob = Utilities.newBlob(response.getContent(), 'application/zip');
  var data = Utilities.unzip(zipBlob);

  var notes = [];
  for (var i = 0; i < data.length; i++) {
    if (notesRegex.test(data[i].getName())) {

      // Example simply extracts text from speaker notes
      // You could do something more complex.
      notes.push(extractTextFromXml(data[i].getDataAsString()));
    }
  }
  return notes;
}

function extractTextFromXml(xml) {
  var doc = XmlService.parse(xml);
  var root = doc.getRootElement();
  var ns = root.getNamespace('a');

  var text = [];

  function walkNode(node) {
    if (node.getText()) {
      text.push(node.getText());
    }
    var children = node.getChildren();
    if (children.length) {
      children.forEach(function(child) {
        walkNode(child);
      });
    }
  }
  walkNode(root);
  return text.join('\n');
}
点赞