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ó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:

Mashup LastFM - YouTube

Un pensamiento en “Ejemplo de mashup con Last.fm y YouTube

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>