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

Schermata 2016-08-23 alle 09.03.50

 

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.

Schermata 2016-08-23 alle 09.18.20

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 ūüôā

Schermata 2016-08-23 alle 09.30.28

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:

Schermata 2016-08-23 alle 09.16.59

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:

Schermata 2016-08-23 alle 09.27.07 Schermata 2016-08-23 alle 09.27.02 Schermata 2016-08-23 alle 09.26.56

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:

Schermata 2016-08-23 alle 10.07.00

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.

  1. 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”.
  2. scrivete nella prima riga tutti nomi delle variabili, mettendole come colonne (sia nel foglio “master” che “eventi”)
  3. cliccate a destra condividi –> ottieni link condivisibile

Schermata 2016-08-23 alle 09.32.45

ora torniamo al nostro WP e andiamo nella sezione del plugin NS Sheet che trovate in impostazioni:

Schermata 2016-08-23 alle 09.36.24

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:

Schermata 2016-08-23 alle 10.07.00

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):

Schermata 2016-08-23 alle 10.16.59

Articolo in lic CC-BY-SA ūüôā

 

 

Potrebbero interessarti anche...

Rispondi