28 agosto 2007  3

Blog Ping: come implementare un servizio di notifica automatica

ASP.NET 2.0 / Web 2.0 

Chiunque abbia un certa dimestichezza con l'uso dei principali sistemi operativi di rete conosce  certamente l'applicazione Ping: è un tool diagnostico che consente di misurare il tempo di risposta, espresso in millisecondi, impiegato da uno o più pacchetti ICMP a raggiungere un host remoto ed a tornare all'origine.

Generalmente è il primo sistema di test che viene utilizzato per verificare la presenza di una macchina in rete (sia essa una lan, una wan o internet): infatti il termine PING è stato definito come l'acronimo di Packet InterNet Groper, ovvero ricercatore di pacchetti internet. In soldoni effettuare un ping significa chiamare un host inviandogli un pacchetto di dati e ricevere da questo una risposta contenente lo stesso pacchetto: Si potrebbe assimilare il funzionamento del ping a quello del radar, anche se con esiti ed applicazioni differenti.

Blog Ping

Con la diffusione delle blog directory ovvero degli aggregatori di contenuti si è diffusa la procedura del blog ping.

Quando si scrive un articolo sul proprio sito (o un post in un blog) il CMS utilizzato aggiorna automaticamente il proprio feed notificando in automatico agli iscritti i nuovi contenuti: è utile notificare contemporaneamente l'evento anche ai principali motori di ricerca e blog directory per "invitarli" a rilasciare i loro spider sul sito aggiornato per effettuarne la reindicizzazione.

Il meccanismo è sostanzialmente lo stesso: si notifica ad un host, ad esempio Google, la propria presenza sulla rete e l'host risponde analizzando il sito di provenienza.
La chiamata all'host remoto viene effettuata utilizzando una codifica standard mediante il protocollo XML-RPC: si crea un file XML con una determinata sintassi (sempre la stessa) e lo si invia mediante una chiamata HTTP con metodo POST ad una procedura remota (RPC o se volete web service). La stessa procedura remota (RPC: Remote Procedure Call), una volta acquisita la chiamata ed analizzato il pacchetto XML risponde con un altra chiamata HTTP con cui notifica l'esatta aquisizione del primo pacchetto o l'eventuale presenza di errori. Successivamente l'host remoto effettua una scansione dell'URI contenuto all'interno del pacchetto XML-RPC, verifica la presenza di un feed e si comporta di conseguenza.

La maggior parte dei CMS o Sistemi per la gestione di Blog è già dotata della funzionalità di Blog Ping: ogni qualvolta si pubblica un post, l'applicazione oltre ad aggiornare il proprio feed effettua il ping ad una lista di Ping Service (generalmente liberamente aggiornabile e modificabile dall'utente) notificando l'evento. Nel caso in cui il proprio CMS non sia dotato della funzionalità di blog ping è possibile utilizzare dei servizi sul web come ad esempio ping-o-matic che permettono di effettuare la stessa operazione in maniera del tutto gratuita: sfortunatamente è necessario compilare manualmente un form indicando il nome del proprio blog, l'indirizzo ed eventualmente anche l'URI del proprio feed (normalmente non è necessario in quanto tutti hanno un sistema di autodiscovery).

Come sviluppare il servizio

La tecnica del blog ping può essere utilizzato però anche dai siti che vengono aggiornati regolarmente e che non sono necessariamente dei blog. A tal proposito può essere interessante sviluppare alcuni piccoli script che consentano di confezionare il pacchetto XML codificato ad hoc per poi inoltrarlo ai servizi remoti abilitati alla lettura.

Anzitutto descriviamo il formato del pacchetto XML che deve essere inviato al servizio remoto:

<?xml version="1.0"?>
<methodCall>
    <methodName>weblogUpdates.Ping</methodName>
        <params>
            <param>
                <value>{Nome del sito}</value>
            </param>
            <param>
                <value>http://{URI assoluto del sito}</value>
            </param>
     </params>
</methodCall>

Come potete osservare i parametri da passare sono essenzialmente due: il nome del sito ed il suo indirizzo assoluto. E' necessario indicare l'URI assoluto della root del sito e non l'indirizzo relativo al nuovo articolo/post/contenuto aggiornato.

Vediamo quindi adesso come realizzare la procedura che consenta l'invio del pacchetto XML al servizio RPC. Il linguaggio di riferimento è VBScript in ambiente ASP.NET 2.0:

Questa funzione crea la richiesta HTTP necessaria all'invio
' del flusso XML-RPC.
'
' In ingresso:
'   url = URI del servizio RPC a cui notificare l'aggiornamento
'   WebSiteName = Nome del sito che effettua il ping
'   WebSiteUrl  = URI assoluto del sito che effettua il ping
'
Public Sub Ping(ByVal url As String, ByVal WebSiteName As String,_
               ByVal WebSiteUrl As String)
    Dim request As Net.HttpWebRequest = Net.WebRequest.Create(url)
        Try
            request.Method = "POST"
            request.ContentType = "text/xml"
            request.Timeout = 3000
            AddXmlToRequest(request, WebSiteName, WebSiteUrl)
            request.GetResponse()
        Catch ex As Exception
            ' Gestione LOG errori
            '...
        End Try
End Sub

' Questa funzione crea il flusso XML da inoltrare
' con la richiesta HTTP passata mediante il parametro
' request

Public Sub AddXmlToRequest(ByRef request As Net.HttpWebRequest, _
      ByVal WebSiteName As String, ByVal WebSiteUrl As String)
        Dim s As IO.Stream = request.GetRequestStream
        Dim xml As System.Xml.XmlTextWriter = _
            New System.Xml.XmlTextWriter(s, Encoding.ASCII)
        With xml
            .WriteStartDocument()
            .WriteStartElement("methodCall")
            .WriteElementString("methodName", "weblogUpdates.ping")
            .WriteStartElement("params")
            .WriteStartElement("param")
            .WriteElementString("value", WebSiteName)
            .WriteEndElement()
            .WriteStartElement("param")
            .WriteElementString("value", WebSiteUrl)
            .WriteEndElement()
            .WriteEndElement()
            .WriteEndElement()
            .Flush()
            .Close()
        End With
End Sub

La procedura indicata è meramente accademica: manca infatti la parte relativa alla gestione degli errori ed all'analisi del file XML di risposta che indica se la segnalazione di ping è stata accetta con successo oppure no.

E' poi naturalmente compito dello sviluppatore gestire il ciclo di chiamate alla funzione con gli indirizzi relativi ai vari servizi RPC a cui effettuare le notifiche. Tale elenco potrebbe essere conservato in una tabella di un database o in un file xml opportunamente confezionato. Un'ultima annotazione riguarda il formato di tutti cli indirizzi URI passati alla procedura che vanno sempre indicati completi di prefisso http://.

Per completezza potrete trovare un elenco di tutti i principali servizi di ping service all'indirizzo http://www.dailyblogtips.com/ping-list/.

Se masticate l'inglese, vi consiglio inoltre la lettura del post di Mads Kristensen su .NET slave a cui mi sono ispirato per la redazione di questo articolo: il codice da lui proposto è analogo al mio solo che è sviluppato in C# e pone le basi per  tutto il core di gestione dei ping services di BlogEngine.NET.

Esprimi il tuo giudizio

Commenti (3) -

Traffyk
Traffyk
26 set 2007 alle 15:22  02
Un ottima entry non c'è che dire, utilissima per coloro che non usano wordpress e sistemi con ping automatico. Come hai letto nel mio blog technorati ormai ha messo a disposizione lo strumento di ping automatico basandosi sul feed rss da un bel po è quindi un risparmio di lavoro non indifferente ;)

Ciao e grazie per la visita!
cristiano
cristiano
26 set 2007 alle 15:54  03
Ad ogni modo ti consiglio (se non lo hai già fatto) di mettere anche il tuo blog tra i Favorites del tuo profilo Technorati: in questo modo ti accorgi subito se i tuoi feed non vengono acquisiti correttamente o con ritardo.

Un saluto !
Traffyk
Traffyk
26 set 2007 alle 21:24  04
Sisi fu la prima cosa che feci :d
Ho aggiunto il tuo feed nel reader così ci teniamo in contatto, in fin dei conti non conta il linguaggio utilizzato ma i metodi che si possono applicare un po su tutte le cose! ;)

Ciao Laughing

Pingbacks and trackbacks (1)+

Aggiungi Commento

biucitecode
  • Commento
  • Anteprima
Loading


| |   |  

Codice QR

Codice QR - cristianofino.net

Ultimi Commenti