Можно ли получать заметки докладчика из Google Slides по API?

Я хочу получать заметки докладчиков из Google Slides по API, но не смог найти поля для заметок докладчиков.

Для справки: Метод: Presentations.pages.get

Что было бы хорошим способом сделать это?

2 ответа

Поддержка заметок докладчиков теперь доступна в Slides API v1. Документация находится здесь: https://developers.google.com/slides/how-tos/notes

В отсутствие API я бы не сказал, что это хороший способ сделать это. На самом деле это ужасно. Но вот оно. Если бы ты был абсолютно обязан это сделать. Это, вероятно, немного ненормальный тоже.

Шаги:

  1. Экспортируйте презентацию с помощью Drive API в файл PowerPoint .pptx.
  2. Распакуйте файл - это zip-файл, содержащий структуру каталогов с XML-файлами в.
  3. Определите файлы заметок докладчика и обработайте их в соответствии с вашими требованиями (например, извлеките весь текст или поработайте с XML и т. Д.).

Некрасиво, верно? Вот пример в приложении Script:

  1. Включите Drive API в Advanced Services в вашем скрипте (Ресурсы> Advanced Google Services).

    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');
    }
    
Другие вопросы по тегам