Uso WordPress quotidianamente per tenere aggiornati i miei blog tecnici e personali.
Non ho installato WP sul mio spazio web, ma utilizzo i blog via web, nella configurazione classica di questa piattaforma di blog.
Mi sembrava corretto e interessante importare i feed del mio blog tecnico, dentro al mio sito personale, perchè anche questa è un’attività che un potenziale cliente e/o datore di lavoro dovrebbe considerare tra gli skills utili per una risorsa di alto livello.
A parte questa considerazione, molto personale, vorrei mostrarvi la mia soluzione per importare i feed di WP e risolvere un bug riconosciuto ma ancora non risolto alla radice.
Importare i feed su WordPress
di Alessandro D’agnano
Per l’importazione, abbiamo bisogno di un semplice script che va a leggere la url dei feed, fa il parsing dell’alberatura XML dei post, e ci restituisce i contenuti corrispondenti.
Grazie ad Asp “stampo” i contenuti dei feed e il markup Xhtml (che avevo pensato in versione statica della pagina) per poi dargli la presentazione voluta tramite Css.
Quindi il risultato non sarà un semplice porting di dati, ma grazie ai Css, i post saranno perfettamente integrati nel mio design, come se fossero presi da un Cms che gestisce il sito.
Innanzi tutto pensiamo al markup.
In situazione statica io voglio visualizzare solo alcuni contenuti del feed e non tutti (ricordo che il feed genera per ogni post diversi contenuti, a noi la scelta di “stampare” quello che vogliamo).
In particolare mi serve:
- Titolo del post (con relativo link al post originale su WP);
- Testo del post;
- Data del post;
In termini Xhtml avrò:
<div class="postBlog"> <h6>Data post</h6> <h3><a href="Link post" title="Leggi: Titolo post - Autore: Alessandro D'agnano">Titolo post</a></h3> <p>Contenuto post</p> </div>
Questo DIV sarà ripetuto per ogni post.
Posso impostare dal mio script quanti post devono apparire durante l’importazione (nel mio caso 3).
Volendo anche da WP si può impostare il numero di “record” che vengono inviati al feed.
Quindi in pratica devo popolare con i contenuti dei feed importati questi tag Xhtml.
Con Asp però oltre che a prelevare i contenuti del feed, creo, come stringhe, anche il markup.
Ecco il codice che importa e “cicla” sul feed:
'Utilizzo oggetto DOM per caricare il file xml (feed rss) Set objXML = Server.CreateObject("msxml2.DOMDocument.3.0") objXML.async = false objXML.setProperty "ServerHTTPRequest", True objXML.validateOnParse =false objXML.preserveWhiteSpace = false ' Carico news di WebMasterPoint.org caricoFile = objXML.Load ("http://freedance.wordpress.com/feed") ' Controllo se e' stato caricato il file If Not caricoFile Then ' In caso di errore avviso quale errore si e' verificato Response.write "<p><strong>Errore</strong><br>: " & objXML.parseError.errorCode & "<br>" Response.Write "Linea: " & objXML.parseError.line & "/" Response.Write "Colonna: " & objXML.parseError.linepos & "</p>" Else ' In caso non vi sia nessun errore, proseguo e carico le info del file xml (feed rss) Set Nodo = objXML.getElementsByTagName("item") dim cont cont = 1 For Each objNodi In Nodo ' Sfoglio i nodi For Each objNodo In objNodi.childNodes Select Case objNodo.nodeName Case "title" titolo = objNodo.firstChild.nodevalue Case "link" link = objNodo.firstChild.nodevalue Case "description" descrizione = objNodo.firstChild.nodevalue Case "pubDate" data = objNodo.firstChild.nodevalue dataIt=mid(data,6,11) End Select Next
In queste righe c’è da evidenziare il link alla url che genera i feed.
Poi “item” che sarebbe ogni post del feed. Di seguito vado ad assegnare delle variabili associandole ai tag Xml generiche per ogni post.
Quindi alla variabile “descrizione” associo il tag “desctiption“.
Per la data faccio un doppio passaggio.
Associo alla variabile “data” il tag “pubDate“.
Siccome vi viene restituito un formato che non mi piace, creo la variabile “dataIt” a cui applico un “mid” per estrarre una porzione di stringa.
Quindi ora la variabile da utilizzare durante la “stampa” del post sarà “dataIt” e non più “data”.
Ora ho tutti i contenuti che mi interessano disponibili.
Ecco il codice che stampa contenuti e markup.
Il tutto fatto per 3 volte, ossia il numero di post che voglio far vedere nel mio sito.
response.Write("<div class=""postBlog"">") response.Write("<h6>"& dataIt &"</h6>") Response.write ("<h3><a href="""& link & """ title=""Leggi: " & titolo & " - Autore: Alessandro D'agnano"">"&titolo&"</a></h3>") Response.Write ("<p>" & descrizione & "</p>") response.Write("</div>") if cont = 3 then exit for cont = cont + 1 Next set Nodo = Nothing End if
Come potete notare, stampo tramite Asp sia il markup che ricrea quello statico mostrato prima, che i contenuti del post associate alle variabili (si vedono evidenziate in grassetto).
L’istruzione condizionale if, cicla per 3 volte.
Arrivata la variabile “cont” a 3 si esce dal for iniziale (primo pezzo di codice).
Ora se testate la pagina nel browser (ricordate che la pagina deve apere estensione Asp e vi serve IIS per testarlo, oppure caricate la pagina sul vostro hosting remoto), vedrete i 3 post perfettamente importati nel vostro sito o pagina personale.
Noterete che nel markup il post è racchiuso da un div con classe “postBlog“.
La classe mi serve come aggancio per i Css e per formattare i miei post a piacimento, integrandoli con la grafica del sito.
Potete vedere il risultato finale nella spalla destra del mio sito www.alessandrodagnano.com
C’è però un problema che ho facilmente risolto grazie all’aiuto e al suggerimento di un mio amico/collega pogrammatore, ossia Raffaele Fazio.
In pratica WordPress, esporta i feed inserendo dentro il tag “description” quindi dentro il contenuto del nostro post, un tag <img>.
Questo tag ha come sorgente dell’immagine un link riferito al sistema di statistiche di WP.
Dal pannello di controllo di WP non sono riuscito a eliminare questa impostazione, ma sono certo che non si possa fare.
Questo tag <img> ha come codice esattamente questo:
<img alt=”” border=”0″ src=”http://stats.wordpress.com/b.gif?host=freedance.wordpress.com&blog=2607179&post=119&subd=freedance&ref=&feed=1″ />
Il mio sito è stato pensato per essere validato Xhtml Strict, ma a causa di questo tag mi venivano segnalati diversi errori, con il risultato di invalidare il codice e rendere vano tutto il mio lavoro.
Ho cercato sui forum italiani e inglesi di WP, ho chiesto al supporto, ma nessuna soluzione.
Ingenuamente tramite Jquery pensavo di risolvere la cosa, ma javascript funziona lato client, quindi la rimozione era solo apparente.
Il markup presentava cmq questo tag, e il validatore W3C mi dava un bel “cartellino rosso”.
Unica soluzione possibile era tramite codice server side.
Siccome lo stript è in Asp, bisogna intervenire in questa direzione sulla variabile “descrizione”.
Ho chiesto aiuto e consulenza a Raffaele.
Un programmatore esperto ha la soluzione pronta in 2 minuti.
Sostituiendo:
Response.Write ("<p>" & descrizione & "</p>")
con
Response.Write ("<p>" & left (descrizione, instr(descrizione," < img alt="""" border=""0"" src=")-1) & "</p>")
si va ad intercettare nel contenuto “descrizione” (che ricordo a tutti che Asp in questo caso vede come stringa), il testo “<img alt=”””” border=””0″” src=” ignettato da WP.
Con le funzioni stringa “left” e “instr“, Raffaele pulisce la stringa generata dentro “descrizione” dandomi cosi solo il contenuto del post.
La pagina, potete testarla, è finalmente tornata ad essere XHTML Strict VALID !
EVVIVA !!!
Possibili implementazioni
Ho già utilizzato gli Rss per tenere aggiornati diversi siti contemporaneamente.
Un sistema come quello descritto, può permettere a chi non mastica molta programmazione di struttare WP come Cms per aggiornare le proprie pagine personali.
Immaginate di dover gestire un portfolio lavori.
Possiamo utilizzare i feed per mostrare i nostri lavori sulla pagina personale.
Voi che ne pensate?