domingo, 3 de octubre de 2010

Galería de fotos de Picasa

Aquí está el código que he utilizado para poder insertar una galería de fotos pública de Picasa en una web. Se puede mejorar en cuanto al formato de presentación de las fotos, y la función de llamada para mostrar las mismas (que no incluyo porque es solamente añadir una etiqueta <img> con la imagen que se pasa por parámetro).

Intenté hacerla con la librería de Perl XML::RSS pero era imposible ya que no era capaz de acceder a las etiquetas de las fotos.

Por otro lado, algo que quizá se pueda entender poco del código, es en la formación de la variable $imagen. Mirando el código XML del RSS del álbum de Picasa se puede ver que existen unas versiones en miniatura de las imágenes en la dirección "Carpeta_de_la_foto/s144/Nombre_de_la_foto" donde también están las carpetas "s72" y "s288" dependiendo de la altura de dicha miniatura.

Si quieres saber qué me ha llevado a hacerla, lee la entrada sobre lo mismo de mi otro blog.
#!/usr/bin/perl

use CGI qw(:standard);
use XML::Simple;
use LWP::Simple qw(get);

my $direccion = "Dirección web del RSS del álbum de picasa";

#Baja  fichero
 my $rdf = get($direccion);
 my $xml = XML::Simple->new();
 my $doc = $xml->XMLin($rdf);

 my $numero_elementos = $doc->{channel}->{'openSearch:totalResults'};

 my $salida = '<body style="text-align:justify;"> ';

 print header( -type => 'text/html', -charset => 'iso-8859-1' );

 for (my $i = 0; $i < $numero_elementos; $i++){
  my $dir = $doc->{channel}->{item}[$i]->{enclosure}->{url};
  my @ruta = split('/',$dir);
  my $imagen = substr($dir,0,index($dir,$ruta[-1]));
  $imagen .= 's144/'.$ruta[-1];
  $salida .= '<a href="javascript:parent.mostrarFoto( \''.$dir.'\' )" style="text-decoration:none;"><img height=70px src="'.$imagen.'" /></a>  ';
 }

 $salida = $salida.'</body>';
 print $salida;

viernes, 18 de septiembre de 2009

Script de Tuenti para GreaseMonkey

Buenas, este verano, para poder seguir cultivando mi gran vagancia, he buscado un método que me actualizase la página de Tuenti cada minuto para saber si tenía algo y así evitarme estar haciendo clic sobre Inicio una y otra vez...

Me puse manos a la obra y conseguí una chapuza que me sirve para lo que quería hacer: En Tuenti, el botón "Inicio" llama a una función porque ya sabéis que si os dirigís a alguna dirección de Tuenti en la barra del navegador, os sale el "Cargando". Pues en el script, primero compruebo si estamos en la página de "Inicio" y, si es así, llamo a esa función cada minuto. Lo de comprobar si estamos en la página de "Inicio" lo hago porque si eso estuviese activo para todas las páginas, si estás leyendo un evento o viendo una foto, visitando a un amigo o comentando en cualquiera de las tres opciones, tendríamos a una mano cojonera que estaría todo el rato dándole a "Inicio" y sacándonos de donde estábamos => ¡MALO!

Una funcionalidad que he añadido es, que cuando tienes alguna notificación y aparece la lista de notificaciones (sí, es una lista con su ul y li), la barra de título parpadea para avisar de esa notificación nueva.

No es la panacea, pero ¿para qué matar moscas a cañonazos?

Os dejo la entrada de mi blog habitual en el que la recogí de una manera un tanto menos técnica.

Os preguntaréis: ¿Por qué c*****s lo publica aquí si ya lo ha puesto en el otro? Pues hay dos respuestas aparte del mero afán por compartir y hacer que llegase a más gente:
1. En el otro no quería meter el rollo de cómo lo he implementado (aunque aquí sólo lo haya contado por encima) porque este es un blog más orientado a programación mientras que el otro lo uso para un carácter más general.

2. Si, por cualquier casual, alguien llegó a interesarse por este blog y se suscribió, que reciba la noticia y pueda disfrutar de algo que ya está hecho y no tenga que hacerlo él si se le ocurre la misma idea. Es más, si ese alguien se propone mejorarlo para que, mientras te encuentras en otras secciones, sigas teniendo las notificaciones a mano (no creo que eso tenga una gran dificultad y, como se me crucen los cables, terminaré haciéndolo cuando tenga tiempo). También pido que si mejoran funcionalidades u optimizan mi código, que me lo pasen para actualizar mi script.

Bueno, un saludo más.

lunes, 27 de julio de 2009

My.Alejandrofh.es de vacaciones

Siento decir que todos los enlaces de pruebas en vivo de las aplicaciones desarrolladas no van a funcionar a partir de ahora porque le he dado unas vacaciones al servidor que me monté en casa para poder entregar las prácticas.

Si en algún momento me entretengo en volver a subir todo a otro servidor o retomo el uso del que he tenido hasta ahora, avisaré. ¡Lo prometo!

Un saludico a todos.

viernes, 3 de julio de 2009

AAP Práctica 7

Una vez más, a práctica hecha, práctica subida al blog.

Ya es la última y he de decir que ha sido una asignatura muy interesante y creo que útil para nuestro futuro (al menos para poder crear cosas chulas para nosotros mismos :D ).

Un saludo a todos.
¡Que me voy de vacaciones!

miércoles, 10 de junio de 2009

AAP Bloque T3.6 ejercicio 1

Usar un API de SOAP público y probar a hacer diferentes llamadas sobre él.

Este ejercicio lo hice en clase y la solución la colgué en el wiki de la asignatura pero lo he puesto aquí, en el blog, para que todo esté recogido en la misma fuente.

El la API que yo encontré es para acceder a LyricWiki.org y encontrar la letra de la canción que se le indique pasándole por parámetros el artista y el título de la canción. En el enlace del wiki de la asignatura se puede ver un ejemplo de uso.

viernes, 29 de mayo de 2009

AAP Práctica 6

Esta práctica consistía en hacer una aplicación en AJAX. Yo he creado un servicio para alojar agendas de contactos: http://my.alejandrofh.es/aap/p6/ y aquí la entrega con el código.

Mi primer intento se quedó en un script de GreaseMonkey que actualiza dinámicamente el contenido de nuestro Wiki pero no había aplicación de servidor así que no me valía.

viernes, 8 de mayo de 2009

AAP Práctica 5

En ésta práctica se nos pedía la creación de un Planet. Yo me he querido basar en la experiencia que tengo de usar Google Reader e intenté hacer algo parecido.
Antes de entrar en la explicación de cómo lo he implementado, dejo el enlace para que se pueda ver el resultado final.

Para conseguir que funcionase tuve que crear un CGI que obtuviera la fuente que se le indicara y lo mostrara con un cierto estilo. El código en Perl es el siguiente:
#!/usr/bin/perl

use CGI qw(:standard);
use XML::RSS;
use LWP::Simple qw(get);

my $numero_elementos = param('num_elementos');
my $url = param('url');

#Baja fichero
if (!defined($url)){
print header( -type => 'text/html' );
print '<body style="text-align:center; vertical-align:center">'.
'<h1>Bienvenido al lector RSS</h1>'.
'<p>Elige de la izquierda las noticias que quieres leer.</p>'.
'</body>';
}
else{
if (!defined($numero_elementos)) { $numero_elementos = 7; }
my $rdf = get($url);
my $rss = new XML::RSS;
$rss->parse($rdf);
my $salida = '<body>'.
'<h1><a href="'.$rss->{'channel'}->{'link'}.'" target="_blank">'.$rss->{'channel'}->{'title'}.'</a></h1>'.
'<p>'.$rss->{'channel'}->{'description'}.'</p>';
print header( -type => 'text/html' );

for (my $i = 0; $i < $numero_elementos;$i ++ ) {
$salida = $salida.
'<div style="border:dotted; background-color:lightblue ">'.
'<h2><a href="'.$rss->{'items'}[$i]->{'link'}.'" target="_blank">'.$rss->{'items'}[$i]->{'title'}.'</a></h2>'.
'<h4>'.$rss->{'items'}[$i]->{'pubDate'}.'</h4>'.
'<p>'.$rss->{'items'}[$i]->{'description'}.'</p>'.
'</div>';
}
$salida = $salida.'</body>';
print $salida;
}


A continuación, como quería añadirle la funcionalidad de poder agregar más fuentes, diseñé el sistema de modo que se leyeran las fuentes desde un fichero XML. Este fichero lo he llamado enlaces.xml. Además, creé otro CGI en perl que modificara el archivo con el fin de ampliar la lista de fuentes RSS.

Por último diseñé la interfaz gráfica en HTML y Javascript haciendo mis primeros pinitos con AJAX y jQuery.

Todos los archivos necesarios para la práctica están aquí.