2011-04-11 10:05 @462 |
|
|
jacks
Perlero Frecuente
|
Registrado: 2011-04-05 11:14 @510 Mensajes: 148
|
|
|
Comparar páginas Perl
|
|
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.
|
2011-04-12 09:38 @443 |
|
|
jacks
Perlero Frecuente
|
Registrado: 2011-04-05 11:14 @510 Mensajes: 148
|
|
|
Re: Comparar páginas Perl
|
|
¿Alguien podría decirme alguna idea sobre este tema? Gracias.
|
2011-04-12 10:05 @461 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Comparar páginas Perl
|
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
|
2011-04-12 11:10 @507 |
|
|
jacks
Perlero Frecuente
|
Registrado: 2011-04-05 11:14 @510 Mensajes: 148
|
|
|
Re: Comparar páginas Perl
|
|
Muchas gracias, explorer.
|
2011-04-15 06:33 @314 |
|
|
jacks
Perlero Frecuente
|
Registrado: 2011-04-05 11:14 @510 Mensajes: 148
|
|
|
Re: Comparar páginas Perl
|
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.
|
2011-04-15 07:51 @368 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Comparar páginas Perl
|
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  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
|
2011-04-15 11:39 @527 |
|
|
jacks
Perlero Frecuente
|
Registrado: 2011-04-05 11:14 @510 Mensajes: 148
|
|
|
Re: Comparar páginas Perl
|
|
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.
|
2011-04-19 17:51 @786 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Comparar páginas Perl
|
Bueno, este es mi experimento. Con este programa: Using perl Syntax Highlighting #!/usr/bin/perl
#
# Análisis del diario Marca
# Joaquín Ferrero. 20110620
#
use strict;
use warnings;
use utf8; # este programa está escrito en codificación utf8
package Marca;
use Encode qw'decode';
use base 'XML::RSS::FromHTML';
sub init {
my $self = shift;
# configuración
$self->name('Marca');
$self->url('http://www.marca.com/futbol/1adivision.html');
}
sub defineRSS {
my $self = shift;
my $xmlrss = shift;
# definiciones del RSS generado
$xmlrss->channel(
title => 'Fuente de titulares de Marca.com, Fútbol 1ª div.',
description => 'Titulares de la 1ª división de Fútbol en España',
);
}
sub makeItemList {
my $self = shift;
my $html = shift;
# interpretamos el código HTML y crear con ello una lista
my @list;
$html = decode('iso-8859-15', $html);
while ($html =~ m|<h3><a href="(.+?)" title="(.+?)".+?<p>(.+?)<|smg){
push(@list,{
link => $1,
title => $2,
description => $3,
});
}
return \@list;
}
sub addNewItem {
my $self = shift;
my ($xmlrss,$eachItem) = @_;
# crear cada elemento del RSS usando el método XML::RSS->add_item
$xmlrss->add_item(
title => $eachItem->{title },
link => $eachItem->{link },
description => $eachItem->{description},
);
}
#### nuestro programa principal
package main;
#use Marca;
my $rss = Marca->new();
$rss->update;
__END__
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: Using xml Syntax Highlighting <?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
>
<channel rdf:about="">
<title>Fuente de titulares de Marca.com, Fútbol 1ª div.</title>
<link></link>
<description>Titulares de la 1ª división de Fütbol en España</description>
<items>
<rdf:Seq>
<rdf:li rdf:resource="/2011/04/19/futbol/equipos/atletico/1303193748.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/equipos/mallorca/1303228475.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/equipos/atletico/1303240637.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/equipos/zaragoza/1303233632.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/equipos/valencia/1303216739.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/equipos/atletico/1303226866.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/1adivision/1303207287.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/1adivision/1303233471.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/equipos/sevilla/1303208236.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/equipos/almeria/1303220951.html" />
<rdf:li rdf:resource="/2011/04/19/futbol/equipos/athletic/1303218087.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="/2011/04/19/futbol/equipos/atletico/1303193748.html">
<title>Gil Marín: &quot;Agüero no irá al Madrid ni aunque paguen la cláusula&quot;</title>
<link>/2011/04/19/futbol/equipos/atletico/1303193748.html</link>
<description>Gil Marín: &quot;Agüero no irá al Madrid ni aunque paguen la cláusula&quot;</description>
</item>
<item rdf:about="/2011/04/19/futbol/equipos/mallorca/1303228475.html">
<title>El Mallorca quiere un lleno contra el Getafe</title>
<link>/2011/04/19/futbol/equipos/mallorca/1303228475.html</link>
<description>El Mallorca quiere un lleno contra el Getafe</description>
</item>
...
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
|
2011-04-27 06:47 @324 |
|
|
jacks
Perlero Frecuente
|
Registrado: 2011-04-05 11:14 @510 Mensajes: 148
|
|
|
Re: Comparar páginas Perl
|
|
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.
|
2011-04-28 11:34 @523 |
|
|
jacks
Perlero Frecuente
|
Registrado: 2011-04-05 11:14 @510 Mensajes: 148
|
|
|
Re: Comparar páginas Perl
|
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: 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.
|
2011-04-28 11:45 @531 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Comparar páginas Perl
|
El error dice que no se ha inscrito bien el módulo dentro del programa, o que no se ha instalado en alguno de los directorios indicados. Por favor, localiza el directorio donde está instalado. Si no está, es que no se instaló. Por ejemplo, para saber qué módulo Data::Dumper vamos a cargar: Using bash Syntax Highlighting explorer@casa:~/Documentos/Desarrollo> perl -MData::Dumper -le 'print $INC{"Data/Dumper.pm"}'
/usr/lib/perl5/5.12.3/i586-linux-thread-multi/Data/Dumper.pm Para instalarlo con el comando cpan, vale con escribir cpan XML::RSS::FromHTML
_________________ JF^D Perl programming
|
2011-04-28 12:03 @544 |
|
|
jacks
Perlero Frecuente
|
Registrado: 2011-04-05 11:14 @510 Mensajes: 148
|
|
|
Re: Comparar páginas Perl
|
No sé si lo he puesto bien pero esto es lo que pongo y el resultado creo que no se instala: Using bash Syntax Highlighting jasck@ubuntu:~$ perl -MXML::RSS::FromHTML -le 'print $INC{"XML/RSS/FromHTML.pm"}'
Can't locate XML/RSS/FromHTML.pm 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 .).
BEGIN failed--compilation aborted. Cuando me pone esto le doy a sí todo el rato. ¿Igual es lo que estoy haciendo mal? Using text Syntax Highlighting Checking if your kit is complete...
Looks good
Warning: prerequisite Class::Accessor::Fast 0 not found.
Warning: prerequisite HTML::Parser 3.68 not found. We have 3.65.
Warning: prerequisite XML::RSS 1.48 not found.
Writing Makefile for XML::RSS::FromHTML
Could not read '/home/jasck/.cpan/build/XML-RSS-FromHTML-0.06-_1yP40/META.yml'. Falling back to other methods to determine prerequisites
---- Unsatisfied dependencies detected during ----
---- BASHI/XML-RSS-FromHTML-0.06.tar.gz ----
XML::RSS [requires]
Class::Accessor::Fast [requires]
HTML::Parser [requires]
Shall I follow them and prepend them to the queue
of modules we are processing right now? [yes]
y el resultado final es:
Test Summary Report
-------------------
t/001_load.t (Wstat: 256 Tests: 1 Failed: 1)
Failed test: 1
Non-zero exit status: 1
t/002_new.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 1 tests but ran 0.
t/003_util_methods.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 8 tests but ran 0.
t/004_checkInterval.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 10 tests but ran 0.
t/005_getHTML.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 1 tests but ran 0.
t/006_makeItemList.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 1 tests but ran 0.
t/007_cache.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 10 tests but ran 0.
t/008_loadOldRss.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 13 tests but ran 0.
t/009_pre_remakeNewRss.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 14 tests but ran 0.
t/010_remakeRss_allnew.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 10 tests but ran 0.
t/011_remakeRss_allold.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 9 tests but ran 0.
t/012_remakeRss_combo.t (Wstat: 512 Tests: 0 Failed: 0)
Non-zero exit status: 2
Parse errors: Bad plan. You planned 55 tests but ran 0.
Files=12, Tests=1, 2 wallclock secs ( 0.19 usr 0.06 sys + 1.41 cusr 0.32 csys = 1.98 CPU)
Result: FAIL
Failed 12/12 test programs. 1/1 subtests failed.
make: *** [test_dynamic] Error 2
BASHI/XML-RSS-FromHTML-0.06.tar.gz
/usr/bin/make test -- NOT OK
//hint// to see the cpan-testers results for installing this module, try:
reports BASHI/XML-RSS-FromHTML-0.06.tar.gz
Warning (usually harmless): 'YAML' not installed, will not store persistent state
Running make install
make test had returned bad status, won't install without force
Could not read '/home/jasck/.cpan/build/Params-Validate-0.98-qmltvk/META.yml'. Falling back to other methods to determine prerequisites
|
2011-04-28 12:22 @557 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Comparar páginas Perl
|
Si estás en Ubuntu, intenta siempre instalar primero los módulos desde el gestor de aplicaciones Synaptic (o desde la línea de comandos, con apt-get o con el gestor del sistema adecuado). Eso te garantizará que se bajarán las dependencias adecuadas. Veo que XML::RSS::FromHTML no está en mi lista de paquetes de software en mi Debian, así que tampoco estará en Ubuntu. Pero... es posible que sí estén los que necesitas antes: - YAML
- Class::Accessor::Fast
- XML::RSS
- HTML::Parser
Debes intentar instalar primero estos módulos. Primero mirando si están como paquetes de software. Y si no, con el comando cpan o el cpanp, instalarlos desde la línea de comandos, como root del sistema (debes ser root del sistema para que cpanp pueda colocarlo en los directorios del sistema donde perl va a buscar los módulos. Otra opción sería no instalarlos ahí, sino en un directorio personal, pero solo sería visible para tus programas. Consulta perlbrew, en ese caso). Ojo con HTML::Parser. Dice que hay una versión vieja, así que hay que actualizarle. Si lo encuentras como paquete de software del sistema, comprueba que Ubuntu te da la versión que necesitas (la v3.68). Si no, lo mejor es desinstalarlo e instalarlo desde la línea de comandos con el cpanp. Una vez que estén instalados ya puedes probar a instalar el XML::RSS::FromHTML. Los mensajes de error indican errores muy graves: han terminado de forma brusca sin realizarse todas las comprobaciones (los avisos de Bad plan). Así que algo no está bien hecho.
_________________ JF^D Perl programming
|
2011-05-04 04:31 @229 |
|
|
jacks
Perlero Frecuente
|
Registrado: 2011-04-05 11:14 @510 Mensajes: 148
|
|
|
Re: Comparar páginas Perl
|
Hola explorer. He intentado lo que me dijiste tanto con el gestor como con apt-get. Con el primero no encuentro el paquete en el repositorio. Igual se llama diferente y con apt-get me dice que no lo encuentra: Using bash Syntax Highlighting jacks@ubuntu:~$ sudo apt-get install 'XML::RSS::FromHTML'
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
E: No se ha podido localizar el paquete XML::RSS::FromHTML
¿Tendré que descargarme los paquetes manualmente y entonces instalarlos uno por uno?
|
2011-05-04 05:04 @252 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Comparar páginas Perl
|
Es muy difícil acordarse del nombre de todos los paquetes de Debian/Ubuntu, así que es normal que no hayas acertado con el nombre del módulo. En Debian (y por lo tanto, también en Ubuntu), los paquetes relacionados con Perl tienen estos nombres: ... libperl-critic-perl libperl6-export-perl libperl6-form-perl libperl6-say-perl libperl6-slurp-perl libperldoc-search-perl libperlio-eol-perl libperlio-via-dynamic-perl ... Por eso, es mejor usar una herramienta como aptitude (desde la línea de comandos) o Synaptic (desde el entorno gráfico de Ubuntu), ya que te pueden ayudar a encontrarlos. El apt-get es para cuando sabes, exactamente, el nombre del paquete. También puedes usar el comando apt-cache search perl para ver la lista completa. Y con apt-cache search perl|fgrep xml-rss, aquellos paquetes que contienen 'xml-rss' en el nombre. A mí me salen: Using text Syntax Highlighting libxml-rss-feed-perl - Perl module for Persistent XML RSS (RDF Site Summary) Encapsulation
libxml-rss-perl - Perl module for managing RSS (RDF Site Summary) files
libxml-rss-simplegen-perl - A Perl module for easily writing RSS files
libxml-rsslite-perl - Lightweight, "relaxed" RSS (and XML-ish) parser Con lo que no, no está en la lista el que buscamos. Entonces, lo que hay que hacer es, primero, instalar los módulos de los que depende y sí están en la lista: Using bash Syntax Highlighting apt-get install libyaml-perl # YAML Ain't Markup Language
apt-get install libxml-rss-perl # Perl module for managing RSS (RDF Site Summary) files
apt-get install libhtml-parser-perl # Una colección de módulos que analizan documentos de texto en HTML
Y no está Class::Accessor::Fast. Éste y el XML::RSS::FromHTML entonces, los instalaremos con el comando cpanp: Using bash Syntax Highlighting cpanp install Class::Accessor::Fast
cpanp install XML::RSS::FromHTML
_________________ JF^D Perl programming
|
| Reglas del Foro |
No puedes abrir nuevos temas en este Foro No puedes responder a temas en este Foro No puedes editar tus mensajes en este Foro No puedes borrar tus mensajes en este Foro No puedes enviar adjuntos en este Foro
|
|
Socializa |
 |
|