Google Apps Script: Cómo usar ContinuationToken con el iterador de carpeta recursivo
Debido a las cuotas de API de Drive,Cuotas de servicios y límite de tiempo de ejecución del script6 min
a menudo es crítico dividir las manipulaciones de archivos de Google Drive en fragmentos.
Nosotros podemos usarPropiedades de servicio AlmacenarcontinuationToken
paraFolderIterator oFileIterator. De esta forma podemos detener nuestro script y en la próxima ejecución continuar desde el lugar donde nos detenemos.
// Logs the name of every file in the User's Drive
// this is useful as the script may take more that 5 minutes (max execution time)
var userProperties = PropertiesService.getUserProperties();
var continuationToken = userProperties.getProperty('CONTINUATION_TOKEN');
var start = new Date();
var end = new Date();
var maxTime = 1000*60*4.5; // Max safe time, 4.5 mins
if (continuationToken == null) {
// firt time execution, get all files from Drive
var files = DriveApp.getFiles();
} else {
// not the first time, pick up where we left off
var files = DriveApp.continueFileIterator(continuationToken);
}
while (files.hasNext() && end.getTime() - start.getTime() <= maxTime) {
var file = files.next();
Logger.log(file.getName());
end = new Date();
}
// Save your place by setting the token in your user properties
if(files.hasNext()){
var continuationToken = files.getContinuationToken();
userProperties.setProperty('CONTINUATION_TOKEN', continuationToken);
} else {
// Delete the token
PropertiesService.getUserProperties().deleteProperty('CONTINUATION_TOKEN');
}
Problema (iterador recursivo)Para recuperar la estructura de carpeta en forma de árbol y obtener sus archivos, tenemos que usar la función recursiva. Algo así:
doFolders(DriveApp.getFolderById('root folder id'));
// recursive iteration
function doFolders(parentFolder) {
var childFolders = parentFolder.getFolders();
while(childFolders.hasNext()) {
var child = childFolders.next();
// do something with folder
// go subfolders
doFolders(child);
}
}
Sin embargo, en este caso no tengo idea de cómo usarcontinuationToken
.
Cómo utilizarContinuationToken
con el iterador recursivo de carpetas, cuando necesitamos lanzar toda la estructura de carpetas?
¿Tiene sentido construir muchos tokens con nombre basado en elid
de cadaparent
¿carpeta?