Sincronizzare i dati di Discourse Data Explorer con Google Sheets
Questa guida spiega come automatizzare l’importazione dei risultati delle query di Data Explorer in Google Sheets utilizzando Google Apps Script.
Livello utente richiesto: Amministratore
Panoramica
Collegando Google Sheets al plugin Data Explorer del tuo sito Discourse, puoi importare automaticamente i risultati delle query secondo una pianificazione. Questo è utile per creare dashboard, monitorare metriche o condividere report con i membri del team che non dispongono dell’accesso amministrativo a Discourse.
Prerequisiti
Prima di iniziare, assicurati di avere:
- Il plugin Data Explorer abilitato sul tuo sito Discourse
- Una query di Data Explorer salvata che desideri sincronizzare
- Accesso amministrativo al tuo sito Discourse
- Un account Google con accesso a Google Sheets
Passo 1: Preparare Discourse
Ottenere l’ID della query
- Vai al pannello di amministrazione del tuo sito Discourse
- Vai su Plugin → Data Explorer
- Apri la query che desideri sincronizzare
- Guarda l’URL nella barra degli indirizzi del tuo browser: sarà simile a
.../queries/123. Il numero alla fine è il tuo ID query
Generare una chiave API
-
Vai su Admin → Avanzate → Chiavi API
-
Clicca su Nuova chiave API
-
Configura la chiave:
- Descrizione: Inserisci qualcosa di descrittivo come “Sincronizzazione Google Sheets”
- Livello utente: Seleziona “Utente singolo” e scegli un utente amministratore, oppure seleziona “Tutti gli utenti”
- Ambito: Seleziona “Granulare”, quindi spunta esegui query nella sezione Data Explorer
L’utilizzo dell’ambito granulare “esegui query” limita questa chiave API alla sola esecuzione di query di Data Explorer, il che è più sicuro rispetto all’utilizzo di una chiave globale. -
Clicca su Salva e copia immediatamente la chiave API: non potrai piĂą vederla
Per maggiori dettagli sulle chiavi API, consulta: Crea e configura una chiave API
Passo 2: Configurare Google Apps Script
Google Apps Script include UrlFetchApp come servizio integrato: non è necessario installare nulla. Basta digitarlo nell’editor di codice e il motore di script lo riconosce automaticamente.
- Apri il tuo Google Sheet
- Vai su Estensioni → Apps Script
- Elimina qualsiasi codice esistente in
Code.gse incolla quanto segue:
function syncDiscourseData() {
// ============ CONFIGURAZIONE ============
const DISCOURSE_URL = "https://your-forum.com"; // Il tuo URL di Discourse (senza barra finale)
const QUERY_ID = "123"; // Il tuo ID della query di Data Explorer
const API_KEY = "your_api_key_here"; // La tua chiave API
const API_USERNAME = "system"; // Nome utente per le richieste API
// ========================================
const url = `${DISCOURSE_URL}/admin/plugins/explorer/queries/${QUERY_ID}/run.csv`;
const options = {
"method": "post",
"headers": {
"Api-Key": API_KEY,
"Api-Username": API_USERNAME
}
};
try {
const response = UrlFetchApp.fetch(url, options);
const csvData = response.getContentText();
const data = Utilities.parseCsv(csvData);
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Cancella i dati esistenti e scrivi i nuovi dati
sheet.clear();
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
// Aggiunge un timestamp "Ultimo aggiornamento" due colonne dopo i dati
const timestampCell = sheet.getRange(1, data[0].length + 2);
const now = new Date();
timestampCell.setValue("Ultimo aggiornamento: " + Utilities.formatDate(now, Session.getScriptTimeZone(), "yyyy-MM-dd HH:mm:ss"));
timestampCell.setFontWeight("bold");
Logger.log("Sincronizzate con successo " + (data.length - 1) + " righe");
} catch (e) {
Logger.log("Errore: " + e.toString());
}
}
- Aggiorna i valori di configurazione all’inizio dello script:
- Sostituisci
https://your-forum.comcon il tuo URL di Discourse - Sostituisci
123con il tuo ID query - Sostituisci
your_api_key_herecon la tua chiave API
- Sostituisci
Passo 3: Eseguire e autorizzare lo script
-
Clicca sull’icona Salva (
) e assegna un nome al tuo progetto (es. “Sincronizzazione Discourse”) -
Clicca sul pulsante Esegui (
) -
Apparirà un popup che richiede l’autorizzazione:
- Clicca su Rivedi autorizzazioni
- Seleziona il tuo account Google
- Se vedi “Google non ha verificato questa app”, clicca su Avanzate → Vai a [Nome Progetto] (non sicuro)
- Clicca su Consenti
-
Controlla il tuo Google Sheet: i dati dovrebbero apparire ora
Se riscontri errori, clicca su Visualizza → Log nell’editor di Apps Script per vedere i messaggi di errore dettagliati.
Passo 4: Impostare la sincronizzazione automatica (facoltativo)
Per eseguire la sincronizzazione automaticamente secondo una pianificazione:
-
Nell’editor di Apps Script, clicca sull’icona Trigger (
) nella barra laterale sinistra -
Clicca su + Aggiungi trigger (in basso a destra)
-
Configura il trigger:
- Funzione da eseguire:
syncDiscourseData - Origine evento: Basato sul tempo
- Tipo di trigger basato sul tempo: Scegli la frequenza preferita (es. Timer giornaliero, Timer orario)
- Ora del giorno/intervallo: Seleziona quando vuoi che venga eseguita la sincronizzazione
- Funzione da eseguire:
-
Clicca su Salva
Gestione delle query con parametri
Se la tua query di Data Explorer utilizza parametri, aggiungili al payload della richiesta:
const options = {
"method": "post",
"headers": {
"Api-Key": API_KEY,
"Api-Username": API_USERNAME
},
"payload": {
"params": JSON.stringify({
"start_date": "2024-01-01",
"category_id": "5"
})
}
};
Tutti i valori dei parametri devono essere stringhe, anche per i parametri numerici.
Per maggiori dettagli sull’esecuzione di query parametrizzate, consulta: Esegui query di Data Explorer con l’API di Discourse
Gestione di set di dati di grandi dimensioni
Le esportazioni CSV sono limitate a un massimo di 10.000 righe per impostazione predefinita. Per set di dati piĂą grandi, implementa la paginazione nella tua query utilizzando i parametri LIMIT e OFFSET:
--[params]
-- integer :limit = 1000
-- integer :page = 0
SELECT *
FROM your_table
OFFSET :page * :limit
LIMIT :limit
Quindi modifica lo script per ciclare tra le pagine finché non vengono restituiti più risultati.
Risoluzione dei problemi
| Problema | Soluzione |
|---|---|
| Errore 403 Forbidden | Verifica che la tua chiave API abbia l’ambito “esegui query” e che il nome utente abbia accesso amministrativo |
| Errore 404 Not Found | Verifica che l’ID della query sia corretto e che la query esista |
| Risultati vuoti | Verifica che la query restituisca dati quando viene eseguita direttamente in Data Explorer |
| Errori di limitazione della frequenza | Discourse limita le richieste API di Data Explorer a 2 ogni 10 secondi per impostazione predefinita. Aggiungi ritardi tra le richieste se necessario |