← RitmoLab Guida

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.

“Il vantaggio non è solo mio: i dati dei tuoi alunni restano sotto il contratto che la tua scuola ha già con Google, e non passano da un terzo che nessuno ha autorizzato.”

Come si fa

  1. 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. 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-chiave scrivi 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. 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.

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.

  1. 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.

  2. 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.