• 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.

Re: Comparar páginas Perl

Notapor jacks » 2011-07-18 12:39 @568

Pues sí era complicado, sí :shock: Muchas gracias. Yo lo que hice fue añadir dos subrutinas más. Funcionar funcionaba pero me daba el error que te he puesto. Voy a probar este método y te digo. Por cierto, en la parte de:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     for my $pagina (@paginas) {             # @paginas contiene toda la información de todos los enlaces a analizar
  2.         my $rss = Modulo la base de->new($pagina->{nombre}, $pagina->{enlace});
  3.        $rss->update;
  4.     }
  5.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


¿metería en @paginas los nombres y los links desde la base de datos? ¿No sería mejor hacerlo directo desde
un:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while (my $ref = $sth->fetchrow_hashref()) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
?
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Publicidad

Re: Comparar páginas Perl

Notapor explorer » 2011-07-18 13:26 @601

La idea de @paginas es que tengas una estructura donde almacenes todos los datos de los RSS. Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @paginas = (
  2.     {
  3.         nombre      => 'Marca',
  4.         enlace      => 'http://www.marca.com/futbol/1adivision.html',
  5.         titulo      => 'Fuente de titulares de Marca.com, Fútbol 1ª div.',
  6.         descripcion => 'Titulares de la 1ª división de Fútbol en España',
  7.     },
  8.     {
  9.         nombre      => 'As',
  10.         enlace      => 'http://www.as.es/futbol/1adivision.html',
  11.         titulo      => 'Fuente de titulares de As.es, Fútbol 1ª div.',
  12.         descripcion => 'Titulares de la 1ª división de Fútbol en España',
  13.     },
  14.  
  15.     # ...
  16. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
pero esta es una forma de hacerlo. Puedes elegir otra. La idea es almacenar la información como quieras, con tal de que puedas acceder a ellas dentro del bucle que recorre todas.
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-07-19 11:09 @506

Bien funciona. Pero es que no sé por qué tengo la sensación de que cuando cree la interfaz gráfica y lo ejecute desde ahí igual me da problemas porque al ejecutarlo desde MS-DOS me saca los errores de la imagen de abajo. ¿Tu crees que puede dar problemas?

Solo me genera el .cache bien; el .xml no me deja abrirlo; entonces lo que he mirado en el código fuente es para sacar la información AS_String(); porque, claro, una vez que se generen un día, los RSS los meteré en la base de datos para así al día siguiente comparar los que se hayan generado nuevos con los del día anterior por si están repetidos no guardarlos ni mostrarlos. Pero claro ¿cómo los leo si es un archivo .cache?
Adjuntos
error.JPG
error.JPG (105.03 KiB) Visto 755 veces
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-07-19 11:38 @526

¿Cómo que no puedes abrir el xml? ¿No lo puedes leer con un editor de textos, como el Notepad++?

El trabajo del fichero caché es para hacer lo que cuentas ahí, de meter la información en una base de datos para compararla con la del día siguiente. Toda esa labor YA la hace XML::RSS::FromHTML. No tienes que hacer nada más que volver a ejecutar el programa otra vez para que genere en el xml nuevas entradas a partir de las nuevas noticias, e ir eliminando las viejas. Todo el control ya lo hace el módulo.

Sí que puedes personalizar algunas de las características de los xml generados. Mira la sección properties del módulo. Quizás te interesa ajustar la maxItemCount.

El mensaje de error que sale de XML::RSS es porque se le ha pedido procesar un texto que está vacío. Es decir: que no se le ha dado desde XML::RSS::FromHTML ninguna entrada: no hay ninguna noticia o no se ha encontrado ninguna noticia.
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-07-19 16:09 @714

Es que por ejemplo el .cache tiene 3,20kb de tamaño pero el .xml no tiene nada, 0kb, o sea que no genera información.

Lo que quiero es leer los rss de .cache para guardarlos en base de datos y así poder mostrarlos en la pantalla de mi programa para que el usuario pueda seleccionar los que le interesan. Por eso tengo el problema de cómo leer del .cache.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-07-19 16:34 @732

El contenido del fichero caché no es más que un dump (Data::Dumper) del array que contiene las entradas.

Con un programa de una línea se demuestra que es fácil acceder a sus contenidos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~/Documentos/Desarrollo> perl -E 'use File::Slurp; $x = read_file("Marca.cache"); $y = eval $x; say $y->[0]->{description}'
  2. El Barcelona pudo con el 'efecto Mou'. Deportivo, Hércules y Almería descienden.
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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-07-20 05:12 @258

He ejecutado lo mismo que has puesto tu y me dice:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
"Can´t find string terminator " ' " anywhere before  EOF -e line 1."
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


He estado probando con el título y tampoco; y en el programa he puesto esto debajo del programa principal de update() y me dice:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
"Use of uninitialized value in printf at update.pm line  134"
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use File::Slurp;
  2.  
  3. my($x,$y);
  4.  
  5. $x = read_file("Marca.cache");
  6.  
  7. $y = eval $x;  
  8.  
  9. printf ($y->[0]->{description});
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-07-20 10:21 @473

Recuerda que el significado de las comillas simples y dobles es distinto según estés en UNIX/Linux que en Windows. Yo estoy en Linux y funciona. Si aún estás en Windows, debes intercambiarlas.

Y el segundo error puede dar la pista de que algo anda mal en la generación de los ficheros.

Mejor, primero, carga el fichero caché en un editor de texto, y mira su contenido.
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-07-20 13:10 @590

Esto es lo que me genera. Esta abierto con Notepad++.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$VAR1 = [
          {
            'link' => '/2011/07/20/futbol/equipos/atletico/1311153980.html',
            'title' => 'El Atlético fichará a Falcao, Rossi u Osvaldo',
            'description' => 'El Atlético tiene asumido que Sergio Agüero no volverá a vestir la zamarra rojiblanca y se ha puesto manos a la obra para buscar un sustituto de garantías. Se han barajado muchos nombres, pero, a día de hoy, la Dirección Deportiva tiene tres apuntados en rojo: Falcao, Osvaldo y Rossi.</p'
          },
          {
            'link' => '/2011/07/20/futbol/equipos/real_sociedad/1311150618.html',
            'title' => 'La Real rechaza una oferta de 7 millones del Atlético por Griezmann',
            'description' => 'La Real Sociedad que ha rechazado una oferta del Atlético de unos 7 millones por Antoine Griezmann, más la cesión de un jugador que podría ser Fran Mérida. La afición txuri urdin está contenta por esa negativa, pero enfadados con unas declaraciones en las que el francés supuestamente habría dicho que le atrae el Atlético y su gran afición.</p'
          },
          {
            'link' => '/2011/07/20/futbol/equipos/betis/1311152385.html',
            'title' => 'El Blackburn no pagará por Pavone',
            'description' => 'La incorporación de Mariano Pavone al Blackburn Rovers, en caso de concretarse, dejará al Betis una cantidad muy inferior al millón y medio del que se viene hablando. Y es que en realidad Mariano Pavone es un jugador libre desde el pasado 30 de junio cuando expiró su cesión a River Plate.</p'
          },
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Cuando ejecuto el código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  use File::Slurp;
  2.      
  3.     my($x,$y);
  4.      
  5.     $x = read_file('Marca.cache');
  6.      
  7.     $y = eval $x;  
  8.      
  9.     printf ($y->[0]->{description});
  10.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


me dice como error el mismo que antes y eso que le he cambiado las comillas. He cambiado el código y meto el valor en una variable para probar pero me dice:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
"Use of uninitialized value $res in printf at line 137."
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use File::Slurp;
  2.  
  3. my($x,$y,$res);
  4.  
  5. $x = read_file('Marca.cache');
  6.  
  7. $y = eval $x;  
  8.  
  9. $res = $y->[0]->{description};
  10.  
  11. printf ("$res");
  12. 1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



En MS_DOS sí me funciona cambiando las comillas como me has dicho.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-07-20 13:50 @618

Estás usando

printf

pero mal. Cámbialo por

print

En cuanto al mensaje de error "Use of uninitialized value $res in printf at line 137." es posible que sea porque no se haya podido leer el contenido del fichero Marca.cache. Saca el valor de $x para ver qué es lo que ha leído el programa.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use File::Slurp;
  4.  
  5. my $x = read_file("Marca.cache");
  6. my $y = eval $x;
  7.  
  8. print $y->[0]->{description};
  9.  
  10. __END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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