Можно ли получать заметки докладчика из Google Slides по API?
Я хочу получать заметки докладчиков из Google Slides по API, но не смог найти поля для заметок докладчиков.
Для справки: Метод: Presentations.pages.get
Что было бы хорошим способом сделать это?
2 ответа
Поддержка заметок докладчиков теперь доступна в Slides API v1. Документация находится здесь: https://developers.google.com/slides/how-tos/notes
В отсутствие API я бы не сказал, что это хороший способ сделать это. На самом деле это ужасно. Но вот оно. Если бы ты был абсолютно обязан это сделать. Это, вероятно, немного ненормальный тоже.
Шаги:
- Экспортируйте презентацию с помощью Drive API в файл PowerPoint .pptx.
- Распакуйте файл - это zip-файл, содержащий структуру каталогов с XML-файлами в.
- Определите файлы заметок докладчика и обработайте их в соответствии с вашими требованиями (например, извлеките весь текст или поработайте с XML и т. Д.).
Некрасиво, верно? Вот пример в приложении Script:
Включите 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'); }