Vamos a ver un pequeño ejemplo de aplicación web híbrida (mashup).
Tomaremos como datos de partida dos de los feed de Last.fm:
- El feed ‘artist’ devuelve la info de un artista. La URL del feed para
Metallica es:
http://ws.audioscrobbler.com/2.0/artist/Metallica/info.xml - El feed ‘toptracks’ devuelve las canciones más escuchadas. La URL del feed es:
http://ws.audioscrobbler.com/2.0/artist/Metallica/toptracks.xml
Después utilizaremos la API de YouTube para buscar en YouTube vídeos de la canción más escuchada y mostraremos el primer resultado de la búsqueda.
Los feed tenemos que procesarlos para extraer los datos, teniendo para ello varias opciones. En PHP, por ejemplo, podemos utilizar la extensión SimpleXML que permite convertir un XML en un objeto que puede ser procesado con selectores de propiedades e iteradores de matrices.
Veamos el código
Podemos insertar el mashup en nuestra página mediante:
include('downloads/lastfm-youtube.php'); |
Si usamos un CMS quizá no nos funcionen ciertas funciones. En ese caso podemos insertar el mapa en nuestra página mediante un iframe. Pondremos este código:
<iframe align="center" src="/downloads/lastfm-youtube.php" title="Last.fm y YouTube" width="450px" height="700px" scrolling="no" frameborder="0"> Si estas viendo esto, tu navegador no soporta IFRAMEs. Deberias actualizar a un navegador mas moderno. </iframe> |
El archivo lastfm-youtube.php contendrá lo siguiente:
<?php $artista = "Metallica"; //URL del feed 'artista' de Last.fm $feed = "http://ws.audioscrobbler.com/2.0/artist/".$artista."/info.xml"; //volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); //extraer datos del feed $name = $xml->name; $url = $xml->url; $biosummary = $xml->bio->summary; foreach ($xml->image as $image) { switch((string) $image['size']) { case 'large': $imagelarge = $image; break; default: break; } } ?> <h3><a href="<?php echo $url; ?>" ><?php echo $name; ?></a></h3> <p><?php echo $biosummary; ?></p> <p><img src="<?php echo $imagelarge; ?>" /></p> <?php //URL del feed 'toptracks' de Last.fm $feed = "http://ws.audioscrobbler.com/2.0/artist/".$artista."/toptracks.xml"; //volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); //extraer datos del feed foreach ($xml->track as $track) { $trackname = $track->name; $trackurl = $track->url; $playcount = $track->playcount; ?> <p>Canción más reproducida en Last.fm: <a href="<?php echo $trackurl; ?>" ><?php echo $trackname; ?></a> (<?php echo $playcount; ?> reproducciones)</p> <?php break; } //URL del feed 'Search' de YouTube $search = $artista."-".$trackname."&max-results=1"; $feed = "http://gdata.youtube.com/feeds/api/videos?vq=".$search; //volcar el feed en un objeto SimpleXML $xml = simplexml_load_file($feed); //extraer datos del feed foreach ($xml->entry as $entry) { // player url $media = $entry->children('http://search.yahoo.com/mrss/'); $watch = $media->group->player->attributes()->url; // thumbnail $media = $entry->children('http://search.yahoo.com/mrss/'); $thumbnail = $media->group->thumbnail[0]->attributes()->url; // <yt:duration> $media = $entry->children('http://search.yahoo.com/mrss/'); $yt = $media->children('http://gdata.youtube.com/schemas/2007'); $length = $yt->duration->attributes()->seconds; // <yt:stats> $yt = $entry->children('http://gdata.youtube.com/schemas/2007'); $viewcount = $yt->statistics->attributes()->viewCount; // <gd:rating> $gd = $entry->children('http://schemas.google.com/g/2005'); if ($gd->rating) { $rating = $gd->rating->attributes()->average; } else { $rating = 0; } ?> <p>Vídeo de YouTube de <a href="<?php echo $watch; ?>"> <?php echo $artista; ?> - <?php echo $trackname; ?></a> (<?php echo $viewcount; ?> reproducciones)<br/> <a href="<?php echo $watch; ?>"> <img src="<?php echo $thumbnail; ?>" /></a><br/> Duración: <?php echo $length; ?> segundos.<br/> Valoración: <?php echo $rating; ?></p> <?php } ?> |
Este es el resultado que veremos en nuestra prágina, con información en tiempo real:
Como hago en ves de usar http://ws.audioscrobbler.com/2.0/artist/“.$artista.”/info.xml
uso la url con el api por que quiero que me muestre resultados como la biografia en español
ejemplo
http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=panda&lang=es&api_key=9337aa8ce335a9c0a2226fe45920c734