Servizi esterni tramite YQL
Se vogliamo effettuare semplici prove o importare rapidamente informazioni o feed da siti esterni, possiamo anche bypassare la creazione del proxy e utilizzare YQL, un servizio di Yahoo che ci permette di effettuare query sul Web sfruttando una sitassi SQL-like.
Possiamo ottenere le risposte sia in formato JSON, sia in XML. Vediamo un semplice esempio di richiesta verso un feed RSS:
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%27http%3A%2F%2Fwww.altroserver.it%2Fguide.xml%27%0A&format=xml
Se convertiamo i caratteri dall'url encoding leggiamo meglio il contenuto del parametro q
:
select * from xml where url='http://www.altroserver.it/guide.xml'
Notiamo anche che abbiamo richiesto i dati in formato XML (format=xml
).
Infine proviamo a scrivere il codice per la lettura di un feed:
$(document).ready(function() {
$.ajax({ type: "GET",
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%27http%3A%2F%2Fwww.altroserver.it%2Fguide.xml%27%0A&format=xml",
dataType: "xml",
success: function(xml) {
$(xml).find('item').each(function() {
var titolo = $(this).find('title').text();
var link = $(this).find('link').text();
var link_markup = '<li><a href="'+link+'" title="'+titolo+' - HTML.it">'+titolo+'</a></li>';
$(link_markup).appendTo('#post');
});
},
error: function(request, error, tipo_errore) { alert(error+': '+ tipo_errore); }
});
});
Alla fine predisponiamo come al solito la lista che sarà popolata dallo script.
<ul #id="guide"></ul>
Interrogazioni Cross-Domain
Ci sono diverse metodologie per eludere la "same orgin policy" ed effettuare l'accesso ai dati da e verso domini diversi: si può sfruttare JSONP, c'è un workaround che sfrutta iframe annidati, un'altro che utilizza l'url-rewriting oppure possiamo utilizzare una stringa HTTP nell'header delle nostre pagine per renderle visibili anche all'esterno.
Quest'ultimo metodo è sicuramente interessante, ma possiamo utilizzarlo solo se siamo noi a servire i documenti. In questo caso, infatti, occorre modificare il livello di accesso alle nostre pagine utilizzando la direttiva Access-Control-Allow-Origin ad esempio inserendo:
Access-Control-Allow-Origin: *
Anche in questo caso bisogna stare attenti a temi come la compatibilità con i browser.
Infine è interessante notare che, filtrare i feed con servizi come feedburner e YQL, può essere una soluzione rapida e anche abbastanza efficiente. In ogni caso, per avere più controllo sul flusso delle informazioni, il proxy è la strada più raccomandabile.