Estrarre un log giornaliero dei file modificati nelle ultime 24 ore
Monitorare i File in Google Drive con Google Apps Script
Lo script proposto di seguito si avvale del metodo DriveApp.searchFiles(parametro) il quale ottiene una raccolta di tutti i file nell'unità dell'utente che corrispondono ai criteri di ricerca specificati come parametro.
I criteri di ricerca sono dettagliati nella documentazione delle Google Drive API alla voce 'Search for Files and Team Drives'. Considerando che il parametro sarà tradotto dal sistema come una querystring è bene fare attenzione al corretto utilizzo delle virgolette onde evitare errori e male interpretazioni della stringa passata.
Il funzionamento del codice si basa sulla ricerca all'interno del proprio Google Drive dei file in cui l'ultima modifica vi è stata effettuata nell'arco delle ultime 24 ore. Lo script poi, una volta recuperate le informazioni di tali file le scriverà, appendendole, all'interno del foglio dello Spreadsheet al quale lo script è stato associato (bound-script).
Avvalendosi di un trigger dovutamente impostato dall'interfaccia dell'editor di script di Google Apps Script è possibile far eseguire la funzione in modo automatico a cadenza giornaliera.
Il risultato è qualcosa di simile al seguente, Fig. 1:
Come intuibile dall'intestazione delle colonne il contenuto, da sinistra verso destra, rappresenta la data di creazione, quella di ultima modifica, il nome del file, il suo URL e (e qui la sfida dello script proposto) l'informazione se il file modificato è stato poi spostato nel cestino (e quale era la sua cartella di origine).
Il codice Apps Script da inserire come script incorporato è il seguente:
// Per attivare o disattivare la ricerca dei file modificati all'interno del cestino
var blnTrashed = true;
function driveActivityReport() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// Recupera il timezone dello Spreadsheet
var timezone = ss.getSpreadsheetTimeZone();
var today = new Date();
var oneDayAgo = new Date(today.getTime() - 1 * 24 * 60 * 60 * 1000);
var startTime = oneDayAgo.toISOString();
// Trova i file modificati nelle ultime 24 ore
var search = 'modifiedDate > "' + startTime + '"';
var files = DriveApp.searchFiles(search);
// Effettua un ciclo su tutti i file recuperati dal criterio di ricerca utilizzato
while( files.hasNext() ) {
var file = files.next();
var fileName = file.getName();
var fileURL = file.getUrl();
var dateCreated = Utilities.formatDate(file.getDateCreated(), timezone, "yyyy-MM-dd HH:mm");
var dateModified = Utilities.formatDate(file.getLastUpdated(), timezone, "yyyy-MM-dd HH:mm");
// Appende una riga allo Spreadsheet con le info del file
sheet.appendRow([dateCreated, dateModified, fileName, fileURL]);
}
// Se la variabile blnTrashed è true controlla in tutti i file nel cestino quelli modificati nelle ultime 24 ore
if (blnTrashed == true) {
var files = DriveApp.searchFiles("trashed = true");
while (files.hasNext()) {
var file = files.next();
if (Utilities.formatDate(file.getLastUpdated(), "GMT", "yyyy-MM-dd hh:mm:ss") > Utilities.formatDate(oneDayAgo, "GMT", "yyyy-MM-dd hh:mm:ss")) {
var parentFolder = file.getParents();
if(parentFolder.hasNext()){
var fileName = file.getName();
var fileURL = file.getUrl();
var dateCreated = Utilities.formatDate(file.getDateCreated(), timezone, "yyyy-MM-dd HH:mm");
var dateModified = Utilities.formatDate(file.getLastUpdated(), timezone, "yyyy-MM-dd HH:mm");
var trashInfo = "TRASHED (was located inside '" + parentFolder.next().getName()+"' folder)";
// Appende una riga allo Spreadsheet con le info del file ed il nome della cartella
// dove si trovava originariamente il file prima di essere spostato nel cestino
sheet.appendRow([dateCreated, dateModified, fileName, fileURL, trashInfo]);
}
}
}
}
}
La query è basata appunto sul criterio modifiedDate qualora fosse maggiore del contenuto della variabile startTime che contiene il valore del lasso di tampo definito come le ultime 24 ore.
Ad inizio codice è presente la variabile blnTrashed il cui scopo è quello di attivare o disattivare la ricerca dei file modificati all'interno del cestino, questo è stato necessario in quanto (per motivi non particolarmente evidenti) il criterio 'trashed = true' per la ricerca dei file all'interno del cestino viene ignorato qualora si trova unito alla ricerca sulla base della data dell'ultima modifica.
L'ideale sarebbe stato appunto utilizzare il seguente criterio:
var search = '(trashed = true or trashed = false) and (modifiedDate > "' + startTime + '")';
Tuttavia non risulta funzionante non restituendo i file modificati spostati nel cestino.
Per ovviare a questo inconveniente ho inserito nello script un ciclo a se stante, sicuramente non performante in termini di tempo di esecuzione, che verifica la data di ogni file all'interno del cestino e nel caso corrisponda ai criteri desiderati lo appende allo Spreadsheet.
Non ci sono commenti
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
scrivi un commento