Ejemplo de mashup con Last.fm y YouTube

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:

  1. 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
  2. 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&oacute;n m&aacute;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&iacute;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&oacute;n: <?php echo $length; ?> segundos.<br/>
    Valoraci&oacute;n: <?php echo $rating; ?></p>
    <?php
}
?>

Este es el resultado que veremos en nuestra prágina, con información en tiempo real:

Mashup LastFM - YouTube

Artículos en la categoría "Mashups"

  1. Web scraper Dapper
  2. Editor de mashup Yahoo Pipes
  3. API de Google Maps
  4. Ejemplo de mashup con Google Maps y PHP
  5. Ejemplo de mashup con Last.fm y YouTube
  6. API de productos de Amazon

Un comentario:

  1. 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