APIでGoogleスライドのスピーカーノートを取得したいが、スピーカーノートのフィールドが見つかりませんでした。参考のためAPIによってGoogleスライドから講演ノートを受け取ることはできますか?
これを行うには良い方法でしょうか?
APIでGoogleスライドのスピーカーノートを取得したいが、スピーカーノートのフィールドが見つかりませんでした。参考のためAPIによってGoogleスライドから講演ノートを受け取ることはできますか?
これを行うには良い方法でしょうか?
APIがない場合、私はこれが良い方法だとは思わないでしょう。実際には恐ろしいです。しかしここにそれがあります。あなたが絶対にそれをしなければならなかったら。それはあまりにも薄すぎる可能性があります。
手順は以下のとおりです。
醜いですか?ここでAppsスクリプトの例です:
は、スクリプト(リソース>高度なGoogleのサービス)内には、Advanced ServicesでドライブのAPIを有効にします。
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');
}
スピーカーノートのサポートは、スライドAPI v1のに利用できるようになりました。ドキュメントはこちらです:https://developers.google.com/slides/how-tos/notes