Programador de noche, Don Juan de día
Hace poco salió MTV Music, un servicio de MTV que muestra toda su biblioteca musical (además de VH1, CMT y LOGO). Lo genial de este nuevo sitio es que tiene una API, basada en Atom, con la que podemos obtener información de artistas y videos musicales. Cada quien sabrá cómo utilizar este servicio ;).
Ahora, para hacerlo más interesante, tenemos otro servicio relacionado a la música: El ya conocido Last.fm, que guarda una lista de las canciones que uno escucha, además de los artistas y discografías.
Gracias a la idea de Octa hice un simple script para seleccionar los últimos artistas top de determinado usuario en Last.fm, y seleccionando los videos musicales de MTV Music.
function artist_videos($artist){
$artist = strtolower(trim($artist));
$artist = htmlentities($artist);
$artist = str_replace(' ', '_', $artist);
$artist = str_replace('\\\'', '', $artist);
$artist = ereg_replace('&(.?)acute;', '\\1', $artist);
$xml = @simplexml_load_file('http://api.mtvnservices.com/1/artist/'.$artist.'/videos');
$i=0;
if($xml->entry!=""){
foreach($xml->entry as $entry){
$video[$i]['title'] = $entry->title;
$video[$i]['author']['name'] = $entry->author[0]->name;
$video[$i]['author']['link'] = $entry->author[0]->uri;
$video[$i]['video']['url'] = $entry->children('http://search.yahoo.com/mrss/')->content->attributes()->url;
$video[$i]['video']['duration'] = $entry->children('http://search.yahoo.com/mrss/')->content->attributes()->duration;
$video[$i]['video']['type'] = $entry->children('http://search.yahoo.com/mrss/')->content->attributes()->type;
$i++;
}
return $video;
}
else{
return false;
}
}
Esta función, que tiene un parámetro artist, lee el archivo XML que se genera mediante el método Artist Videos Method para luego formar un array con los valores principales que devuelve.
Last.fm también tiene su API, también basado en archivos XML. En concreto usaré el método Top Artists. Este método devuelve 50 entradas, así que hay que limitar el número de artistas que se mostrarán para no saturar la página, el servidor y la API de MTV Music.
if($_GET['user']!=""){
$xml = @simplexml_load_file('http://ws.audioscrobbler.com/1.0/user/'.$_GET['user'].'/topartists.xml');
$artist = $xml->artist;
for($i=0;$i<10;$i++){
$videos = artist_videos($artist[$i]->name);
echo '<h2>'.$artist[$i]->name.'</h2>
';
if(!$videos){
echo '<h3>There are no videos for this artist.</h3>';
}
else{
foreach($videos as $video){
echo '<h3>'.$video['title'].'</h3>
<embed src="'.$video['video']['url'].'" width="448" height="366" type="'.$video['video']['type'].'" allowfullscreen="true" allowscriptaccess="always" flashvars="autoPlay=false">';
}
}
}
}
El resultado final lo puedes ver aquí, cambiando mi nick por el de cualquier usuario de Last.fm puedes ver los videos de sus artistas top.

Germán Martínez, de Aprendiendo Web, ha lanzado una interesante (y muy necesaria) campaña. Se trata de informar al querido usuario/lector/visitante que existen alternativas mil veces mejores al viejo y oxidado Internet Explorer 6. Las instrucciones para unirse a la campaña pueden encontrarse en el link anterior.
¿Por qué cambiarse a otro navegador? Simple:
Y lo más importante, y aunque no nos afecte mucho a los que trabajamos en Internet sí que afecta a los usuarios de Internet Explorer 6. Ese navegador tiene problemas de seguridad, no implementa muchas características importantes de seguridad que sí tienen Firefox o Internet Explorer 7. Si alguna vez te vaciaron la cuenta de la tarjeta en Internet, seguro usaste Internet Explorer 6.
Así como le abres la puerta al técnico para que arregle un desperfecto, actualiza tu navegador y haznos la vida más fácil.
Para un proyecto que estoy realizando tenía la necesidad de utilizar los mapas de Google, para cosas muy simples. El problema era que mostrar un mapa simple en Google Maps es algo engorroso.
Felizmente existe una opción más sencilla para mostrar mapas: Google Static Maps. Básicamente es construir una URL con ciertos parámetros que devuelven una imagen de Google Maps.
Para empezar a utilizar este servicio, debemos contar con una API Key, que es un código único que sirve para utilizar los servicios de Google Maps (Static Maps y la versión normal).
La URL inicial es la siguiente:
http://maps.google.com/staticmap?parametros
Los parámetros a utilizar son los siguientes:
satellite, terrain, hybrid y mobile. Por defecto toma el valor roadmap. La versión mobile es parecida a la roadmap, salvo que no muestra mucho detalle.Un ejemplo que reuna todas las opciones descritas:
http://maps.google.com/staticmap?key=ABQIAAAASib4jDklIBHvXXkIvtLLOxQlYFiABaELWVY2toQCZOdbA8emxxQl3PYjyqRQWEw6fEzqIUO5biHI4w¢er=-8.111809,-79.028692&zoom=14&size=600x300&format=png&maptype=roadmap&markers=-8.112191805745939,-79.03122425079346,midblue
Es obvio que para poder sacarle el jugo a esta potente herramienta hay que saber algunas cosas de la API de Google Maps.
PD: Aún le faltan add ons como en Firefox, y puede ser raro no tener una barra de herramientas, pero es realmente rápido y consume mucho menos memoria.
Acabo de regresar de la conferencia que dictó aquí Christian van der Henst. Bueno, fui a las dos que dió aquí en Trujillo y la verdad es que me gustaron mucho.
Debo admitir que no había escuchado de él hasta que HPNeo me dijo que vendría y la verdad, no se equivocó, es muy inspirador.
Desde que lo escuchas hablar sabes que él ha crecido junto con internet y que sabe mucho de cómo trabajar con el de manera rentable y divertida, aparte de que es muy amable; después de la conferencia de la mañana nos tomamos una foto y antes de comenzar la segunda pudimos hablar un rato con él y nos dió algunas ideas que creo que nos hicieron pensar a los dos. Me gustó mucho todo lo que nos dijo y bueno, él también porque está guapo :)
Por último, si pasa por sus ciudades dando alguna charla, no duden en ir. De todas maneras saldrán con nuevas ideas acerca de proyectos y muy inspirados para ponerlas en práctica.
El Colegio de Ingenieros de La Libertad ha organizado una conferencia llamada “La Web 2.0 como herramienta de Educación y Desarollo Social” donde el expositor será el reconocido Christian van der Henst.
El evento se realizará el día de mañana, sábado 23 de setiembre a las 7:00 p.m. La entrada es libre y para recibir certificado (opcional) el costo es de S/. 20.00 para el público en general y S/. 10.00 para los miembros del Colegio de Ingenieros.
Las inscripciones pueden realizarse en el local del Colegio de Ingenieros, en Calle Francisco Borja N° 250, en la Secretaría de Capítulos (detrás del Hotel El Gran Marques).
Más información en la página del CIP.
Además la Universidad Privada de Trujillo realizará un taller denominado “Tecnologías del Web, tendencias y múltiples aplicaciones” con el mismo Christian van der Henst, el sábado 23 a las 10:00 a.m. Como la Universidad está lejos habrá un bus esperando en el local del Colegio de Ingenieros desde las 9:00 a.m. hasta las 9:30 a.m. El costo por certificado es S/. 10.00 (opcional).

Hoy iniciamos un nuevo blog en Nivel 42, la red de Hanzo Media. Su nombre es unblog (sí, en minúsculas) y su misión es dar información sobre todo lo relacionado a diseño, desarrollo web, herramientas para webmasters y bloggers.
Es una nueva experiencia (bueno, todos los blogs de Nivel 42 son nuevas experiencias :P) y es un área en el que todos somos unos novatos, pero esperamos hacerlo bien.
La dirección es http://unblog.ws, no confundirse ;) Mas información en el post de bienvenida.
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;
}