• Publicidad

Comparar páginas Perl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Comparar páginas Perl

Notapor jacks » 2011-04-11 10:05 @462

Hola, escribí este tema en avanzado pero me recomendaron ponerlo aquí para obtener diferentes respuestas.

Os pongo un ejemplo de lo que quiero conseguir: "Imaginar que quiero mantenerme informado de las noticias que aparecen en una pagina deportiva pero solo me interesan las noticias de fútbol, con lo cual proporcionando la dirección URL a mi programa en Perl me gustaría generar información RSS con el título parte de la noticia y el link. Al principio había pensado en descargarme la página y compararla descargándomela más tarde también para encontrar diferencias."

Me gustaría saber más o menos cómo podría generar el RSS. Gracias.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Publicidad

Re: Comparar páginas Perl

Notapor jacks » 2011-04-12 09:38 @443

¿Alguien podría decirme alguna idea sobre este tema?
Gracias.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-04-12 10:05 @461

Hay varios módulos en Perl que facilitan ese trabajo. Solo tienes que entrar en CPAN y buscar por RSS.

Dos de los más curiosos, y que coinciden con tu tarea, son XML::RSS::FromHTML y XML::RSS::FromHTML::Simple.

El segundo te permitirá hacer cosas más rápidas, pero solo extrae los enlaces que tiene una página y, como texto, el propio texto del enlace.

El primero, en cambio, hace que sea responsabilidad tuya la extracción de la información desde la página HTML, por lo que podrás filtrar mejor qué es lo que quieres que luego salga como RSS.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comparar páginas Perl

Notapor jacks » 2011-04-12 11:10 @507

Muchas gracias, explorer.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor jacks » 2011-04-15 06:33 @314

Hola. El módulo XML::RSS::FromHTML no está en el repositorio y me lo bajé de la página. Lo he descomprimido y, la verdad, no puedo instalarlo porque me dice que no encuentra el paquete. Me he leído los tutoriales de ppm pero la verdad no encuentro manera de hacerlo.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-04-15 07:51 @368

Supongo que habrás visto mi guía de instalación y uso del PPM.

Según trouchelle.com, en los resultados de instalación del módulo, hay algunos problemas. No me dices qué versión de Perl estás usando, pero he supuesto que es el Perl v5.12, en Windows.

Si ves la matriz de compatibilidad, verás que Windows no es un buen sistema operativo para desarrollar :wink: Lo raro es que lo he mirado, y no veo muy bien qué error es...

Yo lo acabo de instalar en mi Linux OpenSuSE, y me sale que ha tenido que instalar, a mayores, los módulos HTML::Parser (que ha necesitado compilación), XML::RSS, DateTime::Format::Mail, DateTime::Format::W3CDTF, Test::Manifest.

Según estos mensajes de error, si consigues instalar los módulos HTML::Parser v3.68 y el XML::RSS v1.48, sí que podrías instalar la última versión de XML::RSS::FromHTML, pero en Perl v5.10.

La única versión estable que se puede instalar sin problemas es: con Perl v5.8, instalando la versión XML::RSS::FromHTML v0.02, que, sospecho, va a ser muy antigua.

En la mayoría de los casos, veo que son errores que se pueden intentar solventar, modificando los ficheros de instalación, pero no he llegado a verlos, así que no puedo afirmarlo con rotundidad.

Voy a ver si hago algo con el módulo XML::RSS::FromHTML que acabo de instalar...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comparar páginas Perl

Notapor jacks » 2011-04-15 11:39 @527

La verdad que yo prefiero hacerlo en Linux Ubuntu pero es que necesito que el .exe que tengo que hacer corra en Windows con lo cual tendré que solucionar los problemas que encuentre. De todas formas, en Windows tengo instalada la versión Perl v5.8. Quizás deba actualizarla a la v5.10.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-04-19 17:51 @786

Bueno, este es mi experimento.
Con este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #
  3. # Análisis del diario Marca
  4. # Joaquín Ferrero. 20110620
  5. #
  6. use strict;
  7. use warnings;
  8.  
  9. use utf8;                               # este programa está escrito en codificación utf8
  10.  
  11. package Marca;
  12.  
  13. use Encode qw'decode';
  14. use base 'XML::RSS::FromHTML';
  15.  
  16. sub init {
  17.     my $self = shift;
  18.     # configuración
  19.     $self->name('Marca');
  20.     $self->url('http://www.marca.com/futbol/1adivision.html');
  21. }
  22.  
  23. sub defineRSS {
  24.     my $self = shift;
  25.     my $xmlrss  = shift;
  26.     # definiciones del RSS generado
  27.     $xmlrss->channel(
  28.         title => 'Fuente de titulares de Marca.com, Fútbol 1ª div.',
  29.         description => 'Titulares de la 1ª división de Fútbol en España',
  30.     );
  31. }
  32.  
  33. sub makeItemList {
  34.     my $self = shift;
  35.     my $html = shift;
  36.     # interpretamos el código HTML y crear con ello una lista
  37.     my @list;
  38.  
  39.     $html = decode('iso-8859-15', $html);
  40.  
  41.     while ($html =~ m|<h3><a href="(.+?)" title="(.+?)".+?<p>(.+?)<|smg){
  42.         push(@list,{
  43.             link        => $1,
  44.             title       => $2,
  45.             description => $3,
  46.         });
  47.     }
  48.     return \@list;
  49. }
  50.  
  51. sub addNewItem {
  52.     my $self = shift;
  53.     my ($xmlrss,$eachItem) = @_;
  54.     # crear cada elemento del RSS usando el método XML::RSS->add_item
  55.     $xmlrss->add_item(
  56.             title       => $eachItem->{title      },
  57.             link        => $eachItem->{link       },
  58.             description => $eachItem->{description},
  59.     );
  60. }
  61.  
  62.  
  63. #### nuestro programa principal
  64. package main;
  65. #use Marca;
  66.  
  67. my $rss = Marca->new();
  68. $rss->update;
  69.  
  70. __END__
  71.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Este programa crea dos ficheros:
  • Marca.xml, con el RSS generado
  • Marca.cache, con la memoria de lo generado, para cuando haya que generarlo de nuevo (histórico de entradas)

La salida Marca.xml es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <rdf:RDF
  4. xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  5. xmlns="http://purl.org/rss/1.0/"
  6. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  7. xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
  8. xmlns:dc="http://purl.org/dc/elements/1.1/"
  9. xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
  10. xmlns:admin="http://webns.net/mvcb/"
  11. >
  12.  
  13. <channel rdf:about="">
  14. <title>Fuente de titulares de Marca.com, F&#xFA;tbol 1&#xAA; div.</title>
  15. <link></link>
  16. <description>Titulares de la 1&#xAA; divisi&#xF3;n de F&#xFC;tbol en Espa&#xF1;a</description>
  17. <items>
  18.  <rdf:Seq>
  19.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/atletico/1303193748.html" />
  20.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/mallorca/1303228475.html" />
  21.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/atletico/1303240637.html" />
  22.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/zaragoza/1303233632.html" />
  23.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/valencia/1303216739.html" />
  24.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/atletico/1303226866.html" />
  25.   <rdf:li rdf:resource="/2011/04/19/futbol/1adivision/1303207287.html" />
  26.   <rdf:li rdf:resource="/2011/04/19/futbol/1adivision/1303233471.html" />
  27.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/sevilla/1303208236.html" />
  28.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/almeria/1303220951.html" />
  29.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/athletic/1303218087.html" />
  30.  </rdf:Seq>
  31. </items>
  32. </channel>
  33. <item rdf:about="/2011/04/19/futbol/equipos/atletico/1303193748.html">
  34. <title>Gil Mar&#xED;n: &#x26;quot;Ag&#xFC;ero no ir&#xE1; al Madrid ni aunque paguen la cl&#xE1;usula&#x26;quot;</title>
  35. <link>/2011/04/19/futbol/equipos/atletico/1303193748.html</link>
  36. <description>Gil Mar&#xED;n: &#x26;quot;Ag&#xFC;ero no ir&#xE1; al Madrid ni aunque paguen la cl&#xE1;usula&#x26;quot;</description>
  37. </item>
  38. <item rdf:about="/2011/04/19/futbol/equipos/mallorca/1303228475.html">
  39. <title>El Mallorca quiere un lleno contra el Getafe</title>
  40. <link>/2011/04/19/futbol/equipos/mallorca/1303228475.html</link>
  41. <description>El Mallorca quiere un lleno contra el Getafe</description>
  42. </item>
  43. ...
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Tengo dudas de que los acentos estén bien generados, pero el caso es que el grueso del trabajo está hecho.

Ya solo queda arrancar este programa de forma periódica, una vez al día, por ejemplo.

Editado: arreglado un error en línea 41.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comparar páginas Perl

Notapor jacks » 2011-04-27 06:47 @324

Increíble. Muchas gracias, explorer. La verdad, estos días estuve intentando hacerlo mediante el código que proporciona en la página de CPAN y había bastantes pasos que no entendía el porqué había que hacerlo así.

Muchas gracias de verdad.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor jacks » 2011-04-28 11:34 @523

Hola, explorer. He intentado ejecutar el programa pero no tenía instalado el XML::RSS::FromHTML. Lo he instalado con:

perl -MCPAN -e "install Modulo"

y le he dado a yes en todos los paso que me pedía instalar los módulos que se requerían pero una vez instalados ejecuto el programa y me dice lo siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Base class package "XML::RSS::FromHTML" is empty.
    (Perhaps you need to 'use' the module which defines that package first,
    or make that module available in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .).
 at generarRSS.txt line 19
BEGIN failed--compilation aborted at generarRSS.txt line 19.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 14 invitados