Página 1 de 1

Medallero automático de Londres 2012 en Wikipedia

NotaPublicado: 2012-08-08 17:53 @786
por explorer
Un año más, hemos colaborado en la creación de un programa que coloca la información de las medallas conseguidas por los deportistas participantes en los Juegos Olímpicos Londres 2012, de forma automática, y casi en tiempo real.

El programa Perl de este año es mucho más corto que el de otros años, en parte porque la organización de los juegos da toda la información, y por otra parte por el uso de Mojolicious, que permite extraer información usando XPath, de forma cómoda.

El código ya está publicado en una página personal.

Re: Medallero automático de Londres 2012 en Wikipedia

NotaPublicado: 2012-08-29 08:29 @395
por BigBear
No capto la onda. ¿Por qué usas Mojo y no LWP::UserAgent?

Re: Medallero automático de Londres 2012 en Wikipedia

NotaPublicado: 2012-08-29 10:39 @485
por explorer
LWP sólo sirve para hacer peticiones HTTP.

Con Mojo, puedo bajar la página y extraer la información, en un solo paso. Ejemplo extraído del código del medallero:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $ua = Mojo::UserAgent->new(
  2.     name                => 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1',
  3.     request_timeout     => 5,
  4. );
  5.  
  6. my $div = $ua->get(
  7.     $MEDALLERO_OFICIAL,
  8.     {
  9.         'Accept'                => 'text/html',
  10.         'Referer'               => 'http://www.london2012.com/medals/',
  11.         'Accept-Encoding'       => 'none',
  12.         'DNT'                   => 1,
  13.         'Accept-Language'       => 'es,es-es;q=0.8,en;q=0.5,en-us;q=0.3',
  14.     }
  15. )
  16. ->res                            # de la respuesta
  17. ->dom                            # generamos el DOM de la página
  18. ->find("div[id=lgc-main]")       # buscamos esa marca
  19. ->[0];                           # y la extraemos
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Vemos que generamos un UserAgent, del mismo modo que lo haríamos con LWP::UserAgent. Pero, a continuación, pedimos la página, obtenemos la respuesta, pasamos la estructura de la página al modelo de objetos, buscamos la marca que queremos usando notación parecida a XPath o los selectores CSS3, y extraemos la parte de la página que nos interesa.

Edito: usar las expresiones regulares para sacar la información pasó de moda.

Re-edito: otro ejemplo de hoy en mismo, con Mojo.