I risultati dei tuoi alunni, nel tuo Drive
Cinque minuti, una volta sola. Poi RitmoLab consegna a te e a nessun altro.
Perché ti chiedo questo passaggio
Nella prima versione di RitmoLab i risultati degli alunni arrivavano sul mio server. Funzionava, ma significava che io — una persona che non ha niente a che fare con la tua scuola — mi ritrovavo in casa i dati di ragazzi che non conosco, in numero imprevedibile.
Non mi sembra giusto né sicuro, per te e per me. Così ho ribaltato la cosa: adesso sei tu a pubblicare un piccolo script sul tuo account Google, e i risultati finiscono in un foglio nel tuo Drive. Dentro l’account della scuola, dove stanno già i compiti di Classroom e i moduli delle verifiche.
Come si fa
-
1
Apri Apps Script e crea un progetto
Vai su script.google.com con l’account Google della scuola e clicca Nuovo progetto. Non serve installare niente.
-
2
Incolla lo script e scegli la chiave
Cancella tutto quello che c’è nell’editor (c’è già dentro una funzione di esempio) e incolla il codice che trovi qui sotto. Già che ci sei, clicca su Progetto senza titolo in alto e dagli un nome: fra sei mesi non ti ricorderai cos’è.
Poi cambia la chiave, riga 6: al posto di
cambia-questa-chiavescrivi la tua.Sceglila difficile. Quella chiave è l’unica cosa che impedisce a un altro di scaricare i risultati dei tuoi alunni. Non usare il tuo nome, il nome della scuola o qualcosa che chiunque possa indovinare: prendi tre parole a caso e attaccale, tipo
tromba-quaderno-novembre-49. Non devi ricordarla a memoria, la incolli in RitmoLab una volta sola. -
3
Pubblicalo come applicazione web
Salva col dischetto. Non premere «Esegui»: quel pulsante serve a provare una funzione da sola, e qui darebbe solo un avviso. Quello che serve è il pulsante blu in alto a destra, «Esegui il deployment» → «Nuovo deployment».
Nella finestra che si apre, clicca l’ingranaggio accanto a «Seleziona tipo» e scegli App web. Poi compila così:
- Descrizione: quello che vuoi, per esempio
RitmoLab - Esegui come: Io (il tuo indirizzo)
- Chi ha accesso: Chiunque
Premi Esegui il deployment. A questo punto copia l’URL dell’app web, quello lungo che finisce con
/exec. - Descrizione: quello che vuoi, per esempio
La schermata che spaventa tutti
La prima volta Google ti chiede di autorizzare, e lungo la strada ti mostra un cartello rosso: «Google non ha verificato questa app». È normale e non c’è niente che non va: quel messaggio compare per tutti gli script scritti da una persona e non pubblicati su un negozio, compreso quello che stai scrivendo tu per te stesso.
Per proseguire: clicca Avanzate in basso a sinistra, poi «Apri <nome del progetto> (non sicuro)», e infine Consenti.
Stai autorizzando il tuo script ad accedere ai tuoi fogli Google: sei tu che dai il permesso a te stesso. Nessun altro entra in gioco.
-
4
Incollalo in RitmoLab
Nell’app, area insegnante, scheda 💾 Dati → Il tuo foglio Google: incolla l’indirizzo e la chiave, poi premi Salva e prova. Se risponde, sei a posto.
-
5
Rigenera i link delle classi
Questo è il passaggio che si dimentica. Vai in 🏫 Classi, ricopia i link (o i QR) e ridalli agli alunni: è il link che dice al loro dispositivo dove consegnare. Con il vecchio link continuerebbero a mandare i risultati alla vecchia destinazione.
“Chiunque”? Non è pericoloso?
È la domanda giusta, e la risposta breve è no. Ma vale la pena capire perché, perché quella parola messa lì fa paura a chiunque.
Cosa vuol dire davvero. “Chi ha accesso” non riguarda il tuo foglio né il tuo Drive: riguarda soltanto chi può bussare a quell’indirizzo. Con “Solo io”, Google accetterebbe la richiesta solo se arriva da un dispositivo connesso al tuo account Google. I telefoni e i computer dei tuoi alunni non lo sono — e non devono esserlo, visto che entrano in RitmoLab senza nessun account. Con “Solo io” non potrebbero consegnare niente.
Cosa può fare uno sconosciuto che venisse a sapere il tuo indirizzo /exec: può mandare dati, cioè far comparire qualche riga inutile nel tuo foglio. Fastidioso, si cancella. Cosa non può fare: leggere i risultati dei tuoi alunni, perché per leggere serve la chiave; entrare nel tuo Drive; vedere gli altri tuoi file; scriverti in altri fogli. Lo script sa fare due cose sole, ed è tutto scritto lì dentro in chiaro.
In una riga: chiunque può imbucare, solo tu puoi aprire la cassetta. La serratura è la chiave che hai scelto al passo 2 — ed è per questo che ti ho chiesto di sceglierla difficile.
Il codice da incollare
Selezionalo tutto e copialo. L’unica riga da cambiare è quella della chiave, la trovi evidenziata nel commento.
/**
* RitmoLab — raccolta dei risultati sul Drive del docente.
* Istruzioni complete: biscottodigitale.com/app/ritmolab/foglio-google/
*/
var CHIAVE = 'cambia-questa-chiave';
var NOME_FOGLIO = 'RitmoLab — risultati';
var INTESTAZIONE = ['Data', 'Classe', 'Alunno', 'N. risultati', 'Dati (non modificare)'];
function rispondi_(oggetto) {
return ContentService
.createTextOutput(JSON.stringify(oggetto))
.setMimeType(ContentService.MimeType.JSON);
}
function pulisciClasse_(valore) {
return String(valore || '').toUpperCase().replace(/[^A-Z0-9\-]/g, '');
}
function foglio_() {
var proprieta = PropertiesService.getScriptProperties();
var id = proprieta.getProperty('idFoglio');
var cartella;
if (id) {
try { cartella = SpreadsheetApp.openById(id); } catch (errore) { cartella = null; }
}
if (!cartella) {
cartella = SpreadsheetApp.create(NOME_FOGLIO);
proprieta.setProperty('idFoglio', cartella.getId());
}
var scheda = cartella.getSheets()[0];
if (scheda.getLastRow() === 0) {
scheda.appendRow(INTESTAZIONE);
scheda.setFrozenRows(1);
}
return scheda;
}
function doPost(e) {
var blocco = LockService.getScriptLock();
blocco.waitLock(20000);
try {
var dati = JSON.parse((e && e.postData && e.postData.contents) || '{}');
var classe = pulisciClasse_(dati.class);
if (!classe || !dati.payload) { return rispondi_({ err: 'dati mancanti' }); }
var carico = dati.payload;
var quanti = (carico.a && carico.a.length) || 0;
foglio_().appendRow([
new Date(), classe, String(carico.n || ''), quanti, JSON.stringify(carico)
]);
return rispondi_({ ok: true });
} catch (errore) {
return rispondi_({ err: String(errore) });
} finally {
blocco.releaseLock();
}
}
function doGet(e) {
var parametri = (e && e.parameter) || {};
if (parametri.ping === '1') { return rispondi_({ ok: true, versione: 2 }); }
if (parametri.key !== CHIAVE) { return rispondi_({ err: 'chiave errata' }); }
var classe = pulisciClasse_(parametri.class);
if (!classe) { return rispondi_({ ok: true, items: [] }); }
var scheda = foglio_();
var ultima = scheda.getLastRow();
if (ultima < 2) { return rispondi_({ ok: true, items: [] }); }
var righe = scheda.getRange(2, 2, ultima - 1, 4).getValues();
var risultati = [];
righe.forEach(function (riga) {
if (pulisciClasse_(riga[0]) !== classe) { return; }
try { risultati.push(JSON.parse(riga[3])); } catch (errore) { }
});
return rispondi_({ ok: true, items: risultati });
}Se qualcosa non torna
“Non risponde” quando premo Salva e prova
Quasi sempre è l’implementazione: ricontrolla che sia App web (non “Componente aggiuntivo”), con Chi ha accesso: Chiunque. E che l’indirizzo copiato finisca con /exec e non con /dev.
“Chiave sbagliata” quando scarico
La chiave in RitmoLab dev’essere identica, carattere per carattere, a quella scritta dentro lo script. Attenzione agli spazi copiati per sbaglio.
Gli alunni si esercitano ma non arriva niente
Stanno usando il vecchio link. Rigenera i link delle classi in 🏫 Classi e ridaglieli: è il passaggio 5.
Ho modificato lo script e non cambia niente
Apps Script serve la versione pubblicata, non quella nell’editor: dopo ogni modifica fai Implementa → Gestisci implementazioni → Modifica → Nuova versione.