Aggregatore di feed con Google Gadgets
Scritto da Gabriele Rocca il 09 Ago 2006 | Categoria: API How to
Anche se la maggior parte delle persone ormai sono al mare o in montagna a divertirsi, noi teniamo duro e continuiamo a lavorare alacremente fino all’ultimo.
“Ronzando” un pò qua e la tra i vari siti legati a Google ho trovato delle “API” che potrebbero essere molto interessanti: quelle di Gooogle Gadgets.
Chi segue il nostro Blog ormai saprà benissimo che queste Application Program Interfaces permettono di integrare su un sito delle vere e proprie applicazioni che nel caso specifico di Google Gadgets, consistono nel creare dei Gadgets personalizzati che chiunque può inserire nella propria pagina personale di Google. Per farlo è sufficiente selezionare “Aggiungi contenuto” e successivamente “Aggiungi da URL” dalla homepage personale di Google ed inserire l’indirizzo del file XML che conterrà il nostro Gadget.
Tra le varie funzioni disponibili in queste API, mi hanno particolarmente colpito quelle che permettevano di leggere dei file XML. Così ho pensato di realizzare un Gadget che permettesse a coloro che possiedono più Feed RSS di integrarli in un unico oggetto, dando inoltre la possibilità di indicare quanti items visualizzare per Feed.
Ecco le righe di codice necessarie con tutti i commenti:
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Esempio di aggregatore di feed RSS" author="Gabriele Rocca" title_url="http://etech.top-ix.org/" height="200" scrolling="true" />
<Content type="html">
<![CDATA[
<!--Parte di HTML//-->
<div id="content__MODULE_ID__"></div>
<!--Script che costruisce il Gadget//-->
<script type="text/javascript">
function repeater()
{
_IG_FetchXmlContent(rssUrl,
function parser(response)
{// effettua un controllo verificando che il feed esista
if (response == null || typeof(response) != "object" || response.firstChild == null)
{
document.write("Feed non trovato");
return;
}
// Cerca in channel il titolo del feed
var itemChannel=response.getElementsByTagName("channel");
var nodeChannel=itemChannel.item(0).childNodes;
for (var j = 0; j < nodeChannel.length ; j++) {
var nodeTitle=nodeChannel.item(j);
if (nodeTitle.nodeName == "title") {
var tit=nodeTitle.firstChild.nodeValue;
}
}
// aggiunge il titolo del feed impostandone lo stile
html += "<div style='text-align:center; font-size: 120%; font-weight: 700;'>" + tit + "</div><br>"
// ottiene gli elementi items
var itemList = response.getElementsByTagName("item");
// se il numero di items e' inferiore a quelli
// che vogliamo visualizzare mostra solo quelli esistenti
if(itemList.length < numItem)
{numItem=itemList.length;}
for (var i = 0; i < numItem ; i++)
{
//per ogni item estrapolo i figli
var nodeList = itemList.item(i).childNodes;
//ogni figlio contiene a sua volta un insieme di tag
for (var j = 0; j < nodeList.length ; j++)
{
var node = nodeList.item(j);
if (node.nodeName == "title")
{var titolo=node.firstChild.nodeValue;}
if (node.nodeName == "description")
{var descr=node.firstChild.nodeValue;}
if (node.nodeName == "link")
{var collegam=node.firstChild.nodeValue;}
}
// variabili per rappresentare il target e gli apici
var blank="_blank";
var ap='"';
// aggiunge alla variabile che sara' stampata i vari items
html += "<a href="+ap+collegam+ap+" target="+ap+blank+ap+"> "+titolo+"</a><br>";
}
// verifica se il feed analizzato e' l'ultimo
if (indRss == (rssList.length-1))
{// se e' l'ultimo chiude il div e stampa i feed
html += "</div>";
_gel('content__MODULE_ID__').innerHTML = html;
}
else
{// incrementa l'indice del feed e richiama la funzione repeater()
indRss=indRss+1;
rssUrl=rssList[indRss];
html += "<br>";
repeater();
}
}// chiude "function parser()"
);
}// chiude "function repeater()"
// Impostazioni Utente
var prefs=new _IG_Prefs(__MODULE_ID__);
// definisce il numero di feed
var nMaxRss=2;
// dimensiona l'array di feed
var rssList=new Array(nMaxRss);
// inserire i feed!
rssList[0]="inserisci-Url-feed";
rssList[1]="inserisci-Url-feed";
// specifico il numero di items che voglio vedere per ogni feed
var numItem=10;
// definisco lo stile del gadget
var html="<div style='padding:5px;background-color: #ccf;font-family:Arial,Helvetica;text-align:left;font-size:90%'><br>";
// azzero l'indice dei feed e passo la prima url
var indRss=0;
var rssUrl=rssList[indRss];
// chiamo la funzione repeater() che fa il parser di tutti i feed
repeater();
</script>
]]>
</Content>
</Module>
Se volete provare ad integrare questo Gadget nella vostra home page usate l’URL: http://etech.top-ix.org/etech/aggregatore_feed.xml
Popularity: 14% [?]