Моя цель - рассчитать общую длину (в секундах) всех видео во всех подкаталогах папки Google Диска.
Я следовал ответу отсюда: Перебирайте папки / подпапки / файлы на Google Диске , чтобы попытаться создать скрипт, который перебирает все каталоги в папке и захватывает количество файлов, а также имя файла и продолжительность видео, если файл является видео.
В настоящее время я использую:
function testTraverse(){
var originFolder = DriveApp.getFoldersByName('All Media').next();
var totalCount = traverseFolder(originFolder,0);
Logger.log('total files = '+totalCount);
}
function getVideoDuration(folder,folderId, files) {
var q = "'" + folderId + "' in parents and trashed=false";
var fields = "files(mimeType,name,videoMediaMetadata)";
var url = "https://www.googleapis.com/drive/v3/files?q=" + encodeURIComponent(q) + "&fields=" + encodeURIComponent(fields) + "&access_token=" + ScriptApp.getOAuthToken();
var res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
var obj = JSON.parse(res);
for (var i = 0; i < obj.files.length; i++) {
sum += obj.files[i].videoMediaMetadata.durationMillis / 1000;
}
Logger.log("Total duration: " + sum);
}
function traverseFolder(folder,total) {
var name = folder.getName();
var count = 0;
var files = folder.getFiles();
var folderId = folder.getId();
while (files.hasNext()) {
count++;
getVideoDuration(folderId, files);
}
var subs = folder.getFolders();
while (subs.hasNext()) {
total+=traverseFolder(subs.next(),count);
}
return total;
}
Выполнение вышеуказанного выдает ошибку из строки: for (var i = 0; i < obj.files.length; i++)
:
Cannot read property 'length' of undefined
Что сбивает с толку, потому что я в каталоге с несколькими файлами.
И функция, с которой я далеко ухожу, - это getVideoDuration, которую я использовал из примера сценария из ответа здесь: Как программно получить продолжительность файла (видео) файла Google Drive? .
Мой желаемый результат - рассчитать общую продолжительность (в секундах) всех видео во всех подкаталогах.
Есть ли более простой способ сделать это?