Eventi condivisi e in opendata con WordPress: how to
Tempo fa lanciai con un amico, Enzo Scasciamacchia, un’idea ambiziosa: avere una piattaforma partecipativa e alimentata dalla comunità materana, circa gli eventi presenti sul territorio; Detto fatto 🙂
Oggi ogni associazione culturale, il Comune, la Fondazione (allora Comitato) 2019 e chiunque voglia può inserire tramite un google form un proprio evento. Che sia sportivo, che sia istituzionale, che sia amatoriale..insomma tutto ciò che un territorio offre. L’esperimento è poi stato “istituzionalizzato” all’interno del portale open data del Comune di Matera e da lì, ci sono stati tanti casi di riuso. Il più famoso è MateraEvents.it. in pratica non c’è una redazione, ma chiunque inserisce un evento e il portale dei bravi professionisti di materaevents.it rendono questa banca dati fruibile in una grafica accattivante e organizzata con filtro tematico e temporale. In due anni ci sono oltre 500 eventi “autocensiti”.
A Lecce siamo andati oltre ispirandoci all’idea; Il Comune ha creato un sito web, www.lecce-events.it che fa entrambe le cose: l’utente inserisce in maniera assistita il proprio evento, una redazione lo valida e il sito stesso visualizza gli eventi. Anche qui viene generato poi un output in opendata con un file csv riusabile dalla comunità. Esperimento stilisticamente migliore di quello di Matera ma meno usato dalla comunità, per scelta. Infatti sono presenti quasi esclusivamente gli eventi istituzionali.
Ho pensato di fare un tutorial su come creare con un sito WordPress, come questo blog, una sezione di eventi condivisi e con contestuale rilascio di un file in formato aperto. Per la licenza, consiglio la CC_BY_SA perchè cosi anche le opere derivate, devono mantenere lo stesso spirito di diffusione della conoscenza originario, concedendo anche il diritto di farlo a livello di lucro.
In ordine vanno installati alcuni plug in, va creato un form pubblico da inserire in una pagina come questa e infine va condiviso il file che si alimenterà su google sheet automaticamente, nel formato csv. da qui si può anche agganciare qualche altro automa che genera feed rss o rdf ect. insomma ora vi espongo gli ingredienti base poi migliorate le ricetta come volete 🙂
Installate questi plugin:
Contact Form 7
Contact Form 7 – Dynamic Text Extension
Contact Form 7 Datepicker
Contact Form 7 Map Field
NS Google Sheets Connector
Really Simple CAPTCHA
Nella versione 4.6 di WP funzionano tutti ma <CF Map Field non è configurabile. Funziona ma dovrete copiare-incollare il form che ora vi elenco, ma non avreste potuto personalizzarlo.
Cliccate su Contatti -> Aggiungi nuovo dalla bacheca di amministrazione di WP. Creiamo un form simile a questo:
il form come vedete è fatto da tag html come <p> oppure </br> e da delle frasi del tipo [text * nomeevento]. cliccando in alto nelle varie label text, number, data ect si possono configurare i vari nomi delle variabili. per esempio cliccando text e scrivendo nomeevento e poi ok, vi trovate proprio [text * nomeevento] nel corpo del modulo. il carattere * è presente se cliccate “obbligatorio” cioè se volete che il campo che l’utente deve compilare, sia un campo obbligatorio. Eccovi il mio modulo contatto usato per la pagina eventi:
<div><p>Selezionalo sulla mappa (richiesto)</p></div><br />
[map* coordinate id:mappacord]<br />
<p>Luogo (richiesto)</p><br />
[text* luogo id:luuuogo]<br />
<p>Email contatto (richiesto)</p><br />
[email* email-95 id:emailcontatto]<br />
<p>Nome Evento (richiesto) (massimo 20 caratteri)</p><br />
[text* nomeevento id:titoloev]<br />
<p>Organizzatore (richiesto) </p><br />
[text* organizzatore id:organizzatore]<br />
<p>Categoria(richiesto)</p><br />
[select* tipologia id:selectcategoRi include_blank “Arte” “Artigianato” “Attualità” “Beneficenza” “Cultura e Libri” “Danza e Sport” “Enogastronomia” “Innovazione” “Moda e Benessere” “Musica” “Shopping” “Teatro e Cinema”]<br />
<p>Descrizione Evento</p><br />
[textarea dettagli id:descritaliano]<br />
<p>Data e ora inizio</p><br />
[datetime* dataorainizio date-format:mm/dd/yy time-format:HH:mm first-day:1 change-month id:startdateora]
<p>Data e ora fine</p><br />
[datetime* dataorafine date-format:mm/dd/yy time-format:HH:mm first-day:1 change-month id:finedateora]
<p>E’ a pagamento? (richiesto)</p><br />
[select* pagamento id:paggh include_blank “Si” “No”]<br />
<p>Link all’evento</p><br />
[url linkevento]<br />
<p>Link Immagine Evento</p><br />
[url linkimg id:linkim]<br />
<p>Copia questo codice</p>[captchac captcha-105]
[captchar captcha-105]
[submit “invia”]
il form termina con il [submit “invia”] e prima ho inserito il captcha per evitare inserimenti fake. Ho inserito per primo il campo mappa, che come ho detto non è personalizzabile:
<div><p>Selezionalo sulla mappa (richiesto)</p></div><br />
[map* coordinate id:mappacord]<br />
rendendo obbligatorio il posizionamento del pin sul luogo dell’evento..(cosi magari potete creare mappe dinamiche come questa)
Le altre sezioni del plugin CF riguardano l’email che il sistema invia in automatico all’utente piuttosto che la grafica del calendario per la scelta della data inizio e fine dell’evento e la pagina che deve essere caricata dopo l’invio del form:
potete personalizzare il testo dell’email usando le variabili usate nel form. tipo nell’oggetto dell’email ho usato [nomeevento] che è il valore che l’utente avrà inserito nel campo nome evento ect.
Il sistema quando salviamo, genera un codice da inserire in qualsiasi pagina o articolo di wp per poter visualizzare il form. nel mio caso:
a voi sarà differente per l’id e title ma il senso è questo.
Ora dobbiamo configurare il plugin che alimenta un google sheet con le risposte che l’utente inserisce nel form. Quindi trascrivete con estrema attenzione i vari campi che avete creato nel form, devono essere la prima riga di un google sheet.
- aprite un nuovo google sheet dando un nome ad esempio “eventiwordpress”. Cliccate in basso a sinistra “Aggiungi foglio” dal tasto + e createne due. cancellate il “Foglio 1” che di default è stato creato. Poi vi spiego il perché. Chiamate il primo foglio “master” e il secondo “eventi”.
- scrivete nella prima riga tutti nomi delle variabili, mettendole come colonne (sia nel foglio “master” che “eventi”)
- cliccate a destra condividi –> ottieni link condivisibile
ora torniamo al nostro WP e andiamo nella sezione del plugin NS Sheet che trovate in impostazioni:
cliccando su “here” dovrete autorizzare il plugin ad accedere al vostro profilo Google. Vi verrà comunicato un codice da incollare nel primo campo del plugin. Nel secondo campo inserite eventi ( è il nome dello sheet che abbiamo creato prima nel punto 1) ) , inserite il nome del foglio sempre del punto 1) ed infine l’ID del plugin CF che vi è stato assegnato prima. Nel mio caso è 970.
Teoricamente dovrebbe già funzionare tutto. Provate ad aprire una nuova pagina o articolo nel vostro WP includendo il codice del plugin CF, come ad esempio indicato sopra nel mio caso:
Dopo l’inserimento di tutto con una prova, dovreste vedere “magicamente” compilato il google sheet. Se qualche colonna non viene compilata, allora avete sbagliato a trascrivere nella prima riga le intestazioni (tipo nome evento e non nomeevento) ect.
Ora apriamo il google sheet, clicchiamo su “File -> Pubblica sul web” selezioniamo il foglio che ci interessa pubblicare, nell’esempio “eventi” e clicchiamo nel menu a tendina il formato CSV. Questo link, per comodità vi suggerisco di accorciarlo tramite i vari servizi bit.ly o goo.gl e renderlo pubblico con licenza cc-by-sa. Avete il vostro output opendata (in formato e licenza) che tutti possono riusare per farci mappe, apps, siti web ect…. 🙂
La parte di tutorial base è finita 🙂
Esigenza diffusa: vorrei fare un filtro preventivo e autorizzare solo alcuni eventi.
In questo caso si può usare questo metodo. Quando l’utente inserisce un evento, si alimenta il foglio master (quindi nel plugin NS Sheet non inserite “eventi” ma “master” nel campo corrispondente). Nel foglio “eventi” dobbiamo creare un filtro. Cioè dobbiamo prendere tutto il foglio “master” che abbia per esempio una colonna nominata “approvato” con un carattere qualsiasi
Quindi la “redazione” basta che mette un carattere nella cella dell’evento da approvare, e nel foglio “eventi” appare l’evento. altrimenti non appare.
Nel foglio eventi quindi si fa un filtro inserendo nella cella A2 (la prima riga è l’intestazione e lasciamola stare) questa formula:
=query(master!A2:O,“select * where O is not null”) in questo caso la colonna O è quella che io ho chiamato “approva” e controlla se c’è qualsiasi cosa scritta.
Quindi ora eventi (e relativo csv che abbiamo creato prima) ha solo gli eventi autorizzati.
Altra esigenza: io vorrei che tutti gli eventi in automatico andassero sul CSV pubblico tranne alcuni che a posteriori vorrei bloccare…
Rispetto a prima cambia solo la formula da mettere nella cella A2 del foglio eventi:
=query(master!A2:O,“select * where O is null”) cioè per bloccare l’evento, nella cella O devo scrivere qualcosa. Dato che di default è vuota, l’evento viene inserito nel CSV.
Approfondimento anti hacking: quando generate il file CSV facendo pubblica, avrete notato il link del tipo:
https://docs.google.com/spreadsheets/d/YYYYYYYYYYY-KEY-YYYYYYY/pub?gid=111111111111111&single=true&output=csv
che vi ho consigliato di ridurre tramite goog.le. Questo per non far leggere il gid= e la key che permetterebbe a chiunque di arrivare al file originale sul vostro sheet (anche se non ci vuole molto per uno smanettore arrivarci). Non può modificarlo (a meno che voi non condividiate il file in modalità modifica pubblica..). ma se vi avessi lasciato il “foglio 1” e magari l’aveste rinominato in “master”, chiunque mettendo gid=0 sarebbe arrivato al “master” e quindi agli eventi che magari non avete ancora approvato ect. Insomma è una forma di sicurezza. E’ impossibile risalire al gid= che il vostro master ha.
Per esempio supponiamo che non vogliate pubblicare l’email di chi compila il form (facciamo teoria), allora nella query del foglio “eventi” al posto di mettere select * (cioè tutte le colonne) potreste mettere A,B,D,F ect insomma solo alcune colonne. In questo caso è comprensibile perché non sia opportuno far risalire a foglio “master” l’eventuale hacker.
Ora amici magari più corazzati di me potrebbero prendere il CSV e trasformarlo in RDF 🙂
ciao a tutti
Piersoft
ps: la mappa di default punta su Londra. se modificate il plugin con l’editor dei plugin, dovete modificare le coordinate di base e mettere quelle della città che vi interessa (nell’esempio è Lecce):
Articolo in lic CC-BY-SA 🙂