Script do Google Apps: como usar o ContinuationToken com o iterador recursivo de pastas
Devido às cotas da API do Drive,Cotas de serviços e limite de tempo de execução do script6 min
geralmente é fundamental dividir as manipulações de arquivos do Google Drive em pedaços.
Podemos usarPropertiesService armazenarcontinuationToken
paraFolderIterator ouFileIterator. Dessa forma, podemos parar nosso script e, na próxima execução, continuar do local em que paramos.
// 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 a estrutura de pastas em forma de árvore e obter seus arquivos, precisamos usar a função recursiva. Algo assim:
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);
}
}
No entanto, neste caso, não tenho idéia de como usarcontinuationToken
.
Como usarContinuationToken
com o iterador de pasta recursivo, quando precisamos ir jogar toda a estrutura de pastas?
Faz sentido construir muitos tokens com nome com base noid
De cadaparent
pasta?