mar 16 ott 07

Un plug-in per linkare termini contenuti in un post alle definizioni di Wikipedia

Categorie: BlogEngine.NET · Freeware e Open Source · Extensions
Tags: , , , ,
Technorati: View blog reactions

La WikipediaW è senz'altro uno dei progetti più affascinanti del mondo Open Source: l'enciclopedia libera di InternetW è stata protagonista di alterne vicende che l'hanno coinvolta in maniera più o meno significativa nel corso degli ultimi anni, prime fra tutte le critiche mosse sulla veridicità delle informazioni pubblicate è sull'affidabilità delle fonti.

Essendo un grande sostenitore della Wikipedia, mi piace farne spesso riferimento all'interno dei miei articoli, mediante link ai termini che giudico più significativi per un successivo approfondimento, e che evito di descrivere per non appesantire eccessivamente la trattazione.

L'inserimento di molti collegamenti ai termini della Wikipedia all'interno di un post però, può diventare abbastanza oneroso, soprattutto in termini di tempo, in quanto l'indirizzo dell'URLW necessario ad individuare ogni singola voce è abbastanza lungo da digitare; anche ricorrendo ad escamotage di "copia e incolla", si rischia di dedicare più tempo all'inserimento dei link che alla cura del testo del proprio articolo.

Per questo motivo, approfittando del nuovo "extension model" di BlogEngine.NET 1.2 che consente di far eseguire del codice allo scatenarsi di particolari eventi associati al rendering della varie componenti di una pagina, ho pensato di implementare un semplice plug-in che mi rendesse almeno parzialmente automatico il collegamento alle definizioni contenute in Wikipedia dei termini da me indicati.

Il formato dell'URL per la ricerca su Wikipedia

Anzitutto è necessario descrivere come si costruisce l'URL che consente il collegamento diretto ad una definizione della Wikipedia. Il formato è il seguente:

http://{loc}.wikipedia.org/wiki/{term}

dove {loc} corrisponde al codice associato alla localizzazione linguistica (ovverosia alla lingua in cui si richiede la definizione del termine cercato) e {term} naturalmente al termine richiesto, avendo cura di sostituire gli eventuali spazi bianchi con degli underscoreW (_), nel caso di termini composti da più parole. Il codice di localizzazione è rappresentato dagli standard a due lettere per le nazionalizzazioni dei domini geografici: it per Italia, es per Spagna, uk per Inghilterra, ecc.

La sintassi ed i parametri associati

Il plug-in è un semplicissimo parser che cerca all'interno del testo di un post o di una pagina, un tokenW con una determinata sintassi, e lo sostituisce con l'opportuno codice XHTMLW necessario per la creazione del link alla voce evidenziata. Inoltre aggiunge in coda al termine stesso un apice contente la lettera W, proprio per dare una indicazione immediata del fatto che il termine è collegato ad una definizione della Wikipedia. Per ottenere questo risultato, supponendo che sia {term} la parola per la quale vogliamo creare automaticamente il link, sarà sufficiente scrivere:

[W:{term}]

Per default, viene applicato il collegamento ipertestuale alla parola indicata, altrimenti è possibile applicarlo solo all'apice W aggiunto dopo lo parola stessa, inserendo in un punto qualunque all'interno del testo del post o della pagina, il comando:

[ WikiIcon ]

avendo cura di rispettare le maiuscole e le minuscole indicate e omettendo gli spazi. Se è necessario indicare, come nell'esempio di questa pagina, la sintassi da applicare al termine senza che questo venga trasformato in un link, è sufficiente sostituire {term} con {term}:0. Lo switch " :0" non sarà renderizzato dal parser, mentre il termine, completo di direttiva (W:) e parentesi quadre invece si. Se il termine è una parola composta contenente spazi, questi vengono sostituiti con l'underscore. Per consentire una formattazione personalizzata sia della parola che dell'apice identificativo, ho definito due specifiche classi di stile: wikiterm per il termine e wikiicon per l'apice W.

E' evidente che la procedura si limita ad aggiungere un collegamento ipertestuale ai termini indicati e non effettua alcun controllo sull'esistenza o meno degli stessi nel database di Wikipedia: la funzione di ricerca però, nel caso in cui non trovi la parola cercata, ne propone un elenco per assonanza fonetica o, nella peggiore delle ipotesi, reindirizza alla pagina standard di ricerca dell'enciclopedia libera.

Conclusioni

Questo plug-in è un semplice esperimento di utilizzo del nuovo "extension model" di BlogEngine 1.2: con l'usilio delle regular expressionW e poche linee di codice è stata realizzata una procedura che può essere usata come base di esercizio per implementare qualcosa di più complesso.

L'installazione è semplicissima: dopo aver scaricato il file, va decompresso e copiato nella cartella /App_Code/Extensions del proprio spazio web. Il sorgente è in C#W.

Scarica il plugin: WikiPedia.zip (1,16 kb)

Altre estensioni (More extensions) ...

Voto: 4.0 · Votanti: 14 · Assegna il tuo voto:

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Commenti: 12

01.
Inviato il 16 ott 2007 alle 17.10 da Daniele Salamina
Daniele Salamina
Interessante... me lo salvo!

02.
Inviato il 16 ott 2007 alle 20.10 da Cristiano
Cristiano
Ho aggiunto un controllo di consistenza sulla costruzione dell'URI. La localizzazione del dominio viene fatta in base all'host di residenza del blog: se la localizzazione non è compresa fra le lingue supportate da Wikipedia, viene impostata come standard la lingua inglese.
Ti consiglio di scaricare il file aggiornato.

03.
Inviato il 18 ott 2007 alle 10.10 da eyeonweb
eyeonweb
Molto interessante! soprattutto perchè, lato utente, l'effetto grafico dà subito l'idea di un link approfondito su Wiki.
Sarebbe bello averne uno per wordpress.

04.
Inviato il 18 ott 2007 alle 12.10 da Cristiano
Cristiano
Non è molto complesso fare un porting in php: se riceverò un sufficiente numero di richieste non ne escludo una futura implementazione.

05.
Inviato il 19 ott 2007 alle 16.10 da traffyk.com
pingback
Pingback from traffyk.com

Traffyk: i link segnalati » Blog Archive » links for 2007-10-19

06.
Inviato il 31 dic 2007 alle 11.12 da BlogEngine.NET
trackback
Trackback from BlogEngine.NET

Extensions

07.
Inviato il 27 gen 2008 alle 06.01 da Dan
Dan
Cristiano:

Questa è un'ottima idea e la realizzazione. Sono entusiasta di vedere come funziona sul mio sito.

Grazie!


(Nota: anche grazie a Google per tradurre la pagina!)

08.
Inviato il 27 gen 2008 alle 13.01 da Cristiano
Cristiano
@ Dan:
Thanks a lot!
You could also write in English, of course Wink

09.
Inviato il 14 mar 2008 alle 16.03 da sanghino
sanghino
Ciao Cristiano, per riepilogare, il plug-in funziona impostando la localizzazione di residenza del sito/blog in alternativa viene usato l'inglese.
Ma potrebbe essere possibile usare una localizzazione ancora diversa magari passando un parametro ?

Ciao
Francesco

10.
Inviato il 14 mar 2008 alle 17.03 da sanghino
sanghino
Ciao Cristiano,
sto usando proficuamente il tuo plug-in per wikipedia, ho avuto la necessità però di linkare una voce sull'edizione spagnola, ho così fatto una piccola modifica al sorgente della tua extension:

string Culture = BlogSettings.Instance.Culture.Substring(0, 2);

if (e.Body.Contains("|"Wink)
Culture = e.Body.Substring(e.Body.IndexOf("|"Wink+1,2);
e.Body = e.Body.Replace("|"+Culture, ""Wink;

// if not exist URI then assign Culture = "en" (english Wikipedia)


in pratica scrivendo per esempio [W:Firenze|es] ottengo la voce prelevata dall'edizione spagnola, non esistendo continua a prendere quella inglese, senza specificare "|es" prende la voce italiana.
Che ne pensi ?

11.
Inviato il 14 mar 2008 alle 22.03 da Cristiano
Cristiano
@ sanghino:
L'idea è buona, ma il codice che hai usato per implementarla non mi sembra corretto, anche se "dovrebbe" funzionare.
Il filtro va applicato sul termine da linkare a wikipedia una volta individuato tramite l'applicazione della regular expression: al posto del "pipe" (|), sarebbe meglio usare il ":", se non altro perchè nel codice c'è già una procedura che individua appunto i termini che finiscono con ":0".
Ti consiglio di riferti a quella per migliorare il codice. Wink
Inoltre non vedo il codice di controllo per il link alla wikipedia in inglese in caso di assenza della voce nella lingua indicata: la riga di codice che hai indicato è un commento !

Ad ogni modo sto provvedendo all'aggiornamento delle estensioni che avevo realizzato per la versione 1.2 di BlogEngine: apporterò senz'altro la modifica che hai proposto perchè mi sembra indiscutibilmente utile Smile

12.
Inviato il 15 mar 2008 alle 00.03 da Sanghino
Sanghino
@ Cristiano:
Giusta l'osservazione del "pipe" e dei due punti ... modificherò in tal senso l'estensione in attesa della prossima release.
La parte che gestisce il link al wiki inglese c'è sempre, la porzione di codice era solo per indicare dove avevo inserito la mia aggiunta, tutto il resto è rimasto invariato.

Saluti.

Aggiungi commento


(Crea la tua icona Gravatar)  






Annunci

AutoRoll