XML Cross-domain con PHP

Come potete vedere qui a destra ho implementato da poco le API di last.fm tramite i feed xml.

Nel mio post precedente ho spiegato come utilizzare i dati in Xml nel codice PHP per creare i propri widget. Questo sistema però ha un inconveniente: finché il php non ha avuto il file dal server di last.fm la pagina non viene completata e il sito non si carica. E questo vale in generale.

Tramite javascript invece i contenuti vengono aggiunti dopo e se per qualche motivo il server non rispondesse, avremmo comunque possibilità di consultare il sito. E’ per questo che ho deciso di implementare la soluzione via jQuery.

Il problema è che per questioni di sicurezza non è consentito eseguire richieste ajax tra domini diversi (come in questo caso) a meno che non si utilizzi l’apposito formato JSON (come ho fatto con le API flickr, sempre qui a fianco) – che però last.fm non mette a disposizione gratuitamente.

Ho risolto il problema con un trucchetto creando una paginetta in php che si occupa di prelevare l’xml da last.fm e stamparlo così com’è. Il vantaggio è che tramite jQuery devo fare una semplice chiamata ad un file locale, del tipo “ajax.php?url=…” evitando quindi il problema del cross-domain ed evitando di fare il parsing direttamente nella pagina principale, col rischio di bloccarla in attesa di last.fm.

Il codice che ho usato è questo:

<?php
if (isset($_GET['url'])) {
    $url = $_GET['url'];
    echo(@file_get_contents($url));
}
?>

Mentre nella chiamata ajax utilizzo l’url:

/ajax.php?url=ws.audioscrobbler.com/1.0/user/cescopag/topalbums.xml

che risulta quindi un path locale.

1 Comment so far

  1. michele on luglio 23rd, 2010

    bell’articolo

Leave a reply