Reflexiones sin importancia

IE Sucks!!!

Archivos de la categoría Labs

Jugando con la API de MTV Music: Last.fm + MTV Music

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.

Lo primero: La función artist_videos().

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.

Lo segundo: Tomar los artistas top de un usuario de Last.fm.

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.

Nuevo theme: HPNeo v.2.0

Un día desperté con una idea en la mente: hacer un nuevo diseño, desde 0, para mi blog. Decidí que sería blanco con algunas escalas de grises y negros.hpneo2

Y al final lo conseguí.

Apuntes, sugerencias, en los comentarios.

Mostrar las últimas canciones escuchadas con Last.fm y DOM en PHP

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.

Ahora viene la parte de código, mi favorita :P

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;
}

Aquí está el resultado final.

Widgets para House is God y Blood is my Life

Mi último trabajo en Hanzo Media (no, no me voy. Me refiero a que es lo último que he hecho hasta ahora) han sido dos widgets que permiten mostrar el contenido de nuestros productos: House is God y Blood is my Life.

El primero muestra una frase elegida al azar. Bonito y simple:

Si deseas publicarlo en tu blog tienes el código necesario.

El segundo muestra la primera víctima de Dexter y una lista desplegable con todas las víctimas publicadas hasta ahora (no se olviden que cada sábado publicamos una nueva víctima). Bonito y no tan simple:

Si deseas publicarlo en tu blog tienes el código necesario.

My Web 2.0 v.1.0

Hace tiempo escribí sobre un script en PHP al que llamé “My Web 2.0“. Ahora vuelvo a mencionarlo porque libero el código de la primera versión:

  • Es una simple clase en PHP, por lo que cada servicio puede ser usado por separado (sí, podría hacerse usando simples funciones, pero así aprendo algo de clases y objetos).
  • Por ahora tiene soporte para Twitter, del.icio.us, Last.fm, Dailymotion y Zooomr. Para la segunda versión se vienen más servicios. O si deseas puedes programarlos tú mismo.
  • Permite elegir el número de elementos que se muestran. Si no se especificia ninguno mostrará todos los que pueda por defecto.
  • Cada método devuelve una lista desordenada (<ul>), así que deben usar echo o print para mostrarla en pantalla. (Posiblemente para futuras versiones devuelva un array en vez de código html).

El código puede usarse libremente, pero al menos quisiera una mención por mi trabajo ;)

Descargar My Web 2.0 v.1.0

Actualización [24/03/08]: Arreglé un pequeño problema a la hora de cargar los feeds que mostraba error al no encontrar dicho feed y paraba el script. Ahora aparece un mensaje y el script sigue corriendo.

House is God

Últimamente (y a fuerza por no tener el blog online) he estado mucho en la Twittersfera, así que no he podido mostrar mucho de lo que hago en la Internec (que no es mucho, no soy Dans o Varsavsky). Sin embargo, y ahora que vuelvo a escribir, tengo algo que presentarles.

Si eres fan de House y quieres ver todas las frases memorables que alguna vez dijo, visita House is God. Octa y yo somos los creadores de tamaña fanaticada :P
Ah, sí. Y si tienes tiempo dale clic a la publicidad ;)

My Web 2.0

No, no escribiré en sí sobre las implicaciones éticas y tecnológicas que tiene el hecho de crear una burbuja social. Escribiré sobre uno de mis proyectos en Labs: “My Web 2.0” (sí, está en inglés porque el inglés es cool).

Es una página que junta todos los datos de los servicios 2.0 que uso:

Mis últimos twitts, mis últimas páginas guardas, canciones escuchadas, videos y fotos subidas están ahí. Creo que no hay nada más que agregar.

El efecto de las pestañas lo hice gracias al script Coda Slider de Niall Doherty.

Por cierto, no tiene ninguna utilidad real más que servir de guía, tipo “Mira qué estoy haciendo, aunque no te importe”.

¿Aburrido?

Random

Encuesta

¿Quieres que HPNeo se coma una cubeta de pollo de KFC para el post número 1000?

View Results

Loading ... Loading ...

Archivos

Publi