• 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-05-09 09:22 @432

La verdad es que ahora ya sí que estoy perdido de qué puedo hacer para que el programa me genere lo mismo que a ti; esto es, que me funcione.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Publicidad

Re: Comparar páginas Perl

Notapor explorer » 2011-05-09 09:41 @445

Yo suelo adoptar varias estrategias para saber, primero, dónde está el error.

Una de ellas, sería ejecutar el programa paso a paso, con el depurador, hasta llegar al momento en que falla. Lo que pasa es que, en este caso, se podría tardar mucho.

Otra, es procesar menos información, hasta que funcione bien.

Es decir: en vez de procesar todo lo que nos podamos bajar de la web, darle al programa, al principio, un HTML del que sabemos que no tiene nada "raro".

Si el resto del programa funciona, repetimos la prueba, pero con una parte de HTML mayor.

Si el resto del programa falla, repetimos la prueba, pero reduciendo el HTML.

El objetivo es localizar la parte de la página HTML que provoca el fallo. Se puede usar la táctica de la búsqueda binaria, para hacer un número de pruebas mínimo.

Naturalmente, si al final, resulta que no es el HTML (porque, quizás, sale el error incluso cuando el HTML está vacío), entonces sí que habrá que procesar ese último HTML bajo el depurador de Perl, yendo paso a paso, y averiguar por qué cae esa línea.

Según el manual del módulo, lo que hay que hacer es sobreescribir la función getHTML(). En su lugar, escribes otra que se llame igual, pero que tenga como misión leer el HTML desde el propio disco duro tuyo. Recortarlo según la prueba que estés haciendo, y devolviendo el resultado (el código HTML) que espera el resto del módulo.

De esta manera, las pruebas serán más rápidas, que si tienes que repetir la conexión a la web deportiva.
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-05-10 07:32 @355

Hola, explorer.

He ejecutado el código con el depurador (perl -d generarRSS.txt), creo que es así, pero era eterno, como tu decías y la parte de cambiar el getHTML() creo que no lo he entendido demasiado bien como para probarlo con lo cual podría cagarla.

En cuanto a reducir el código no sé si te he entendido bien y te refieres a buscar otra sección con menos contenido actualizado o a otra cosa.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-05-10 17:28 @769

Me refería a que fueras probando con un código HTML cada vez más pequeño, hasta identificar qué parte de la página no le gusta al programa.
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-05-12 06:36 @317

Hola explorer. He estado mirando el tema de los RSS y al final conseguí que me funcionara en Linux Ubuntu pero el problema es que el programa que estoy desarrollando tiene que correr en Windows y el módulo XML::RSS::FromHTML no está disponible. Con lo cual, miré el módulo XML::RSS, que sí lo está, pero llevo probando durante varios días el ejemplo o el modo de empleo que aparece en CPAN y, la verdad, no me genera ningún tipo de información, si no que al llamar al programa desde la línea de comandos, me imprime en formato XML. Los datos que yo introduje, como por ejemplo la dirección de la página web, el título que yo introduje... pero el caso es que no genera ningún tipo de información extra. ¿Sabes si el módulo XML::RSS puede generar algo parecido aunque no llegue al nivel de XML::RSS::FromHTML?
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-06-16 15:35 @691

Yo solo sé lo que aparece en la página de manual de XML::RSS.

Si miras la sinopsis, verás que se puede poner mucha información.

El resultado es un xml, desde luego, porque un RSS es justamente, un XML.

Si el problema es que no funciona en Windows, pero sí en Linux, la solución es obvia (y muy barata).
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-06-20 07:34 @357

Hola explorer. El módulo XML::RSS sí me funciona en Windows. El que no me funciona es el XML::RSS::FromHTML. Usando el módulo XML::RSS y leyendo en CPAN he intentado probar lo que pone en la sinopsis pero no me genera rss sino que me imprime en XML los datos que yo introduje en el código:

Código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!c:/perl/bin
  2.  
  3. # create an RSS 1.0 file (http://purl.org/rss/1.0/)
  4.  
  5.  use Modern::Perl;
  6.  use XML::RSS;
  7.  
  8.  my $rss = XML::RSS->new(version => '1.0');
  9.  
  10.  $rss->channel(
  11.    title        => "freshmeat.net",
  12.    link         => "http://freshmeat.net",
  13.    description  => "the one-stop-shop for all your Linux software needs",
  14.    dc => {
  15.      date       => '2000-08-23T07:00+00:00',
  16.      subject    => "Linux Software",
  17.      creator    => '[email protected]',
  18.      publisher  => '[email protected]',
  19.      rights     => 'Copyright 1999, Freshmeat.net',
  20.      language   => 'en-us',
  21.    },
  22.  
  23.    syn => {
  24.      updatePeriod     => "hourly",
  25.      updateFrequency  => "1",
  26.      updateBase       => "1901-01-01T00:00+00:00",
  27.    },
  28.  
  29.    taxo => [
  30.      'http://dmoz.org/Computers/Internet',
  31.      'http://dmoz.org/Computers/PC'
  32.    ]
  33.  );
  34.  
  35.  
  36.  $rss->image(
  37.    title  => "freshmeat.net",
  38.    url    => "http://freshmeat.net/images/fm.mini.jpg",
  39.    link   => "http://freshmeat.net",
  40.    dc => {
  41.      creator  => "G. Raphics (graphics at freshmeat.net)",
  42.    },
  43.  );
  44.  
  45.  
  46.  
  47.  $rss->add_item(
  48.    title       => "GTKeyboard 0.85",
  49.    link        => "http://freshmeat.net/news/1999/06/21/930003829.html",
  50.    description => "GTKeyboard is a graphical keyboard that ...",
  51.    dc => {
  52.      subject  => "X11/Utilities",
  53.      creator  => "David Allen (s2mdalle at titan.vcu.edu)",
  54.    },
  55.    taxo => [
  56.      'http://dmoz.org/Computers/Internet',
  57.      'http://dmoz.org/Computers/PC'
  58.    ]
  59.  );
  60.  
  61.  
  62.  $rss->textinput(
  63.    title        => "quick finder",
  64.    description  => "Use the text input below to search freshmeat",
  65.    name         => "query",
  66.    link         => "http://core.freshmeat.net/search.php3",
  67.  );
  68.  
  69.  # print the RSS as a string
  70.  
  71.  print $rss->as_string;
  72.  
  73.  
  74.  # print the title and link of each RSS item
  75.  
  76.  foreach my $item (@{$rss->{'items'}}) {
  77.  
  78.      print "title: $item->{'title'}\n";
  79.      print "link: $item->{'link'}\n\n";
  80.  
  81.  }
  82.  
  83.  # output the RSS 0.9 or 0.91 file as RSS 1.0
  84.  
  85.  $rss->{output} = '1.0';
  86.  
  87.  print $rss->as_string;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4



Resultado XML:
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="http://freshmeat.net">
  14. <title>freshmeat.net</title>
  15. <link>http://freshmeat.net</link>
  16. <description>the one-stop-shop for all your Linux software needs</description>
  17. <dc:language>en-us</dc:language>
  18. <dc:rights>Copyright 1999, Freshmeat.net</dc:rights>
  19. <dc:date>2000-08-23T07:00+00:00</dc:date>
  20. <dc:publisher>[email protected]</dc:publisher>
  21. <dc:creator>[email protected]</dc:creator>
  22. <dc:subject>Linux Software</dc:subject>
  23. <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
  24. <syn:updateFrequency>1</syn:updateFrequency>
  25. <syn:updatePeriod>hourly</syn:updatePeriod>
  26. <taxo:topics>
  27.   <rdf:Bag>
  28.     <rdf:li resource="http://dmoz.org/Computers/Internet" />
  29.     <rdf:li resource="http://dmoz.org/Computers/PC" />
  30.   </rdf:Bag>
  31. </taxo:topics>
  32. <items>
  33.  <rdf:Seq>
  34.   <rdf:li rdf:resource="http://freshmeat.net/news/1999/06/21/930003829.html" />
  35.  </rdf:Seq>
  36. </items>
  37. <image rdf:resource="http://freshmeat.net/images/fm.mini.jpg" />
  38. <textinput rdf:resource="http://core.freshmeat.net/search.php3" />
  39. </channel>
  40. <image rdf:about="http://freshmeat.net/images/fm.mini.jpg">
  41. <title>freshmeat.net</title>
  42. <url>http://freshmeat.net/images/fm.mini.jpg</url>
  43. <link>http://freshmeat.net</link>
  44. <dc:creator>G. Raphics (graphics at freshmeat.net)</dc:creator>
  45. </image>
  46. <item rdf:about="http://freshmeat.net/news/1999/06/21/930003829.html">
  47. <title>GTKeyboard 0.85</title>
  48. <link>http://freshmeat.net/news/1999/06/21/930003829.html</link>
  49. <description>GTKeyboard is a graphical keyboard that ...</description>
  50. <dc:creator>David Allen (s2mdalle at titan.vcu.edu)</dc:creator>
  51. <dc:subject>X11/Utilities</dc:subject>
  52. <taxo:topics>
  53.   <rdf:Bag>
  54.     <rdf:li resource="http://dmoz.org/Computers/Internet" />
  55.     <rdf:li resource="http://dmoz.org/Computers/PC" />
  56.   </rdf:Bag>
  57. </taxo:topics>
  58. </item>
  59. <textinput rdf:about="http://core.freshmeat.net/search.php3">
  60. <title>quick finder</title>
  61. <description>Use the text input below to search freshmeat</description>
  62. <name>query</name>
  63. <link>http://core.freshmeat.net/search.php3</link>
  64. </textinput>
  65. </rdf:RDF>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Con lo cual ¿este módulo no me generará como el otro, las noticias actualizadas de la página?
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-06-20 09:11 @424

XML::RSS sí que genera RSS (y de varias versiones, hasta la 1.0) pero solo de la información que le proporciones. No realiza ningún análisis de información externa.

Esa es justo la tarea que hace XML::RSS::FromHTML y XML::RSS::FromHTML::Simple: leer la página original, extraer la información, y componer el RSS (usando XML::RSS, por cierto).

Si no puedes instalar el módulo, al menos puedes ver su código e intentar imitar su funcionamiento en tu programa, para que realice las mismas tareas.

Lo que tampoco hace, a diferencia de XML::RSS::FromHTML, es almacenar las fechas de las noticias ya publicadas, para llevar un control de los tiempos.
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-06-20 11:17 @512

Hola, explorer. Espero no ser pesado pero he conseguido instalar XML::RSS::FromHTML en Windows (aunque me dijo que no, pasó el test pero me dio la opción de continuar) y he usado el programa que escribiste en la hoja uno sobre el diario Marca.

El problema es que no sé por qué en la parte de descripción me pone una letra en vez de la noticia y hay caracteres mal puestos. Esto es lo que me sale como resultado:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $VAR1 = [
  2.           {
  3.             'link' => '" title="Resumen 2010-2011">Resumen 2010-2011</a></h3>
  4. <p>El Barcelona pudo con el \'efecto Mou\'. Deportivo, Hércules y Almería descienden.</p>
  5. </li>
  6. </ul>
  7. <ul>
  8. <li class="noticia',
  9.             'title' => '1',
  10.             'description' => 'C'
  11.           },
  12.           {
  13.             'link' => 'http://www.marca.com/deporte/futbol/primera-division/2010-2011/dorsales/',
  14.             'title' => 'Todos los dorsales',
  15.             'description' => 'C'
  16.           },
  17.           {
  18.             'link' => 'http://www.marca.com/2010/08/13/multimedia/graficos/1281720946.html',
  19.             'title' => 'La nueva perla del fútbol',
  20.             'description' => 'A'
  21.           },
  22.           {
  23.             'link' => 'http://www.marca.com/2009/11/13/multimedia/graficos/1258122822.html',
  24.             'title' => 'Iniesta, el crack silencioso',
  25.             'description' => 'D'
  26.           },
  27.           {
  28.             'link' => 'http://www.marca.com/2009/02/07/futbol/equipos/real_madrid/1234005565.html',
  29.             'title' => 'Raúl González Blanco',
  30.             'description' => 'N'
  31.           },
  32.           {
  33.             'link' => 'http://www.marca.com/edicion/marca/otros_deportes/graficos/es/desarrollo/1046308.html',
  34.             'title' => 'Leo Messi',
  35.             'description' => 'D'
  36.           },
  37.           {
  38.             'link' => 'http://www.marca.com/edicion/marca/otros_deportes/graficos/es/desarrollo/1079288.html',
  39.             'title' => 'Kun Agüero',
  40.             'description' => 'A'
  41.           }
  42.         ];
  43.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Aparte de esto el archivo marca.xml me lo abre con Internet Explorer y mee da error:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
No se puede mostrar la página XML
No se puede ver la entrada XML con la hoja de estilo . Corrija el error y haga clic en el botón Actualizar, o inténtelo de nuevo más tarde.


--------------------------------------------------------------------------------

El documento XML debe tener un elemento de nivel superior. Error al procesar el recurso file:///C:/Documents and Settings/J...
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y para finalizar me pone cuando ejecuto el programa desde la línea de comandos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
"Malformed UTF-8 character (fatal) at C:/Perl/lib/HTML/Entities.pm line 464"
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y mirando esa línea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Encode control chars, high bit chars and '<', '&', '>', ''' and '"'
  2.         $$ref =~ s/([^\n\r\t !\#\$%\(-;=?-~])/$char2entity{$1} || num_entity($1)/ge;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2011-06-20 11:23 @516, editado 1 vez en total
Razón: linea => línea, formateado de código
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Comparar páginas Perl

Notapor explorer » 2011-06-20 11:54 @538

Había un error en la línea 41. Además, he descomentado las líneas de la función decode(), para que convierta los caracteres desde la codificación de la página (iso-8859-15).

Lo he ejecutado y no me sale error.
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 12 invitados