Eres tan fea pero tan fea que te vetaron en Internet.
Hace tiempo se me ocurrió mostrar en una sola página todo lo que hacía en la llamada Web 2.0. Una de esas actividades mostradas eran las últimas canciones escuchadas en mi pc gracias al programa de Last.fm, su API, y PHP. Ahora, inspirado en el artículo de Carlos Martínez que vi en Anieto2k voy a desempolvar esa función para mostrar cómo listar las última canciones escuchadas usando la extensión DOM en PHP (la cual al parecer forma parte del núcleo desde la versión 5).
Para empezar, la documentación de la API de Last.fm está en el sitio de Audioscrobbler. En la primera tabla hay un método llamado “Recent Tracks” con una pequeña descripción y los ejemplos de acuerdo a qué formatos de salida permite dicho método. Para este caso elegí “XML”.
Así, la dirección que usaré para tomar los datos de la API en salida XML será:
http://ws.audioscrobbler.com/1.0/user/nick/recenttracks.xml
Se debe cambiar “nick” por el nick del usuario del que queremos ver las últimas canciones escuchadas. En mi caso sería esta dirección.
function get_my_lastfm($nick, $n=NULL){
$doc = new DOMDocument('1.0', 'UTF-8');
if(!@$doc->load("http://ws.audioscrobbler.com/1.0/user/$nick/recenttracks.xml")){
$my = "No se pudieron cargar los datos de Last.fm";
}
else{
$channel = $doc->getElementsByTagName('recenttracks')->item(0);
$items = $channel->getElementsByTagName('track');
if(!$n || $n=="" || ($n>$items->length)){
$n = $items->length;
}
$my = "<ul>";
for($i=0;$i<$n;$i++){
$artist = $items->item($i)->getElementsByTagName('artist')->item(0)->nodeValue;
$name = $items->item($i)->getElementsByTagName('name')->item(0)->nodeValue;
$link = $items->item($i)->getElementsByTagName('url')->item(0)->nodeValue;
$my .= "<li>";
$my .= "<a href=\"$link\">";
$my .= htmlspecialchars($artist." - ".$name);
$my .= "</a>";
$my .= "</li>";
}
$my .= "</ul>";
}
return $my;
}
La función get_my_lastfm() tiene dos parámetros: nick, que indica el nick del usuario de Last.fm, y n que es el número de canciones a mostrar. Se crea el objeto DOMDocument y luego se recorre el documento XML. Por último, devuelve una lista desordenada con las canciones en formato Artista - Tema con un link al sitio de Last.fm en cada elemento.
El resultado final lo puedes ver en el apartado de Last.fm en MyWeb 2.0.
Actualización: Carlos, el autor de la nota original, me dio una sugerencia en los comentarios que implementé en el sidebar de este blog. Pronto publicaré el código necesario para ello ;)
Ayer, por sugerencia de Carlos Martínez, hice una nueva función que permite obtener un array con la información de un álbum de música usando Last.fm.
function get_album_info($artist, $album){
$doc = new DOMDocument('1.0', 'UTF-8');
if(!@$doc->load("http://ws.audioscrobbler.com/1.0/album/$artist/$album/info.xml")){
$info['artist'] = "";
$info['album'] = "";
$info['cover'] = "cover.jpg";
$info['url'] = "";
$info['n_tracks'] = 0;
}
else{
$info['artist'] = $artist;
$info['album'] = $album;
$channel = $doc->getElementsByTagName('album')->item(0);
$info['cover'] = $channel->getElementsByTagName('coverart')->item(0)->getElementsByTagName('small')->item(0)->nodeValue;
$info['url'] = $channel->getElementsByTagName('url')->item(0)->nodeValue;
$tracks = $channel->getElementsByTagName('tracks')->item(0);
$track = $tracks->getElementsByTagName('track');
$info['n_tracks'] = $track->length;
for($i=0;$i<$info['n_tracks'];$i++){
$info['track'][$i]['title'] = $track->item($i)->getAttribute('title');
$info['track'][$i]['url'] = $track->item($i)->getElementsByTagName('url')->item(0)->nodeValue;
}
}
return $info;
}
Otra forma genial de hacerlo la verdad, incluso diría que más acertada que la mía, ya que trabajas con el archivo XML y eso siempre te va a dar más posibilidades.
Algo que podría resultarte útil es que la ruta de las ilustraciones de los álbumes se encuentran en: http://ws.audioscrobbler.com/1.0/album/Grupo/Álbum/info.xml por lo que fácilmente le podrías añadir las ilustraciones de los álbumes a tu ejemplo.
Un saludo,
Carlos
lostkore: Muchas gracias por comentar :). La idea que planteas me parece genial, posiblemente la implemente un día de estos.
Saludos y gracias por pasarte por aquí ;)
¿DOM? ¿Quién quiere DOM existiendo SimpleXML?
PD. Esta es la entrada más interesante de la historia del blog. Y eso que no uso last.fm.
quebuen codigo, como seria para mostrar los artistas realcionados a cierto artista por ejemplo a metallica?
como podria listar esos artistas?
arrecho: Es cuestión de saber manipular el documento XML. La API de Last.fm tiene lo que pides en XML: http://ws.audioscrobbler.com/1.0/artist/Metallica/similar.xml