• Publicidad

Error en función

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

Error en función

Notapor BigBear » 2014-06-08 15:39 @693

Hola estoy arreglando una función de este código :

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2. #Coded By Doddy H
  3.  
  4. use LWP::UserAgent;
  5.  
  6. my @agents = (
  7. 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0',
  8.     'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14',
  9. 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36',
  10. 'Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0'
  11. );
  12.  
  13.  
  14. my $nave = LWP::UserAgent->new;
  15. #$nave->agent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
  16. $nave->agent($agents[ rand @agents ]);
  17. $nave->timeout(10);
  18.  
  19. my @links = bing("news.php+id","10");
  20. for(@links) {
  21. print $_."\n";
  22. }
  23.  
  24. ##Funciones secundarias ###
  25.  
  26. sub toma {
  27.     return $nave->get( $_[0] )->content;
  28. }
  29.  
  30. sub tomados {
  31.     return $nave->get( $_[0] );
  32. }
  33.  
  34. sub tomar {
  35.     my ( $web, $var ) = @_;
  36.     return $nave->post( $web, [ %{$var} ] )->content;
  37. }
  38.  
  39. sub ver_length {
  40.     return true if length( $_[0] ) == 32;
  41. }
  42.  
  43. sub savefile {
  44.     open( SAVE, ">>" . $_[0] );
  45.     print SAVE $_[1] . "\n";
  46.     close SAVE;
  47. }
  48.  
  49. sub get_links {
  50.  
  51.     $test = HTML::LinkExtor->new( \&agarrar )->parse( $_[0] );
  52.     return @links;
  53.  
  54.     sub agarrar {
  55.         my ( $a, %b ) = @_;
  56.         push( @links, values %b );
  57.     }
  58. }
  59.  
  60. sub installer_kobra {
  61.     unless ( -d "/logs/webs" ) {
  62.         mkdir( "logs/",      777 );
  63.         mkdir( "logs/webs/", 777 );
  64.     }
  65. }
  66.  
  67. sub cortar {
  68.     my @nuevo;
  69.     for (@_) {
  70.         if ( $_ =~ /=/ ) {
  71.             @tengo = split( "=", $_ );
  72.             push( @nuevo, @tengo[0] . "=" );
  73.         }
  74.         else {
  75.             push( @nuevo, $_ );
  76.         }
  77.     }
  78.     return @nuevo;
  79. }
  80.  
  81.  
  82. sub repes {
  83.     my @limpio;
  84.     foreach $test (@_) {
  85.         push @limpio, $test unless $repe{$test}++;
  86.     }
  87.     return @limpio;
  88. }
  89.     sub bing {
  90.  
  91.         my ( $a, $b ) = @_;
  92.         for ( $pages = 10 ; $pages <= $b ; $pages = $pages + 10 ) {
  93.             my $code =
  94.               toma( "http://www.bing.com/search?q=" . $a . "&first=" . $pages );
  95.               #savefile("leer.html",$code);
  96.  
  97.             while ( $code =~ /<h3><a href="(.*?)"/mig ) {
  98.                 push( @founds, $1 );
  99.             }
  100.         }
  101.         my @founds = repes( cortar(@founds) );
  102.         return @founds;
  103.     }
  104. ##
  105.  
  106. #The End ?
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


El tema es que tiene un error bien raro en la función bing(). El error es que sino pongo el savefile abajo de la función toma, el script no anda:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.             my $code =
  2.               toma( "http://www.bing.com/search?q=" . $a . "&first=" . $pages );
  3.               #savefile("leer.html",$code);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Cuando comento la línea de savefile() la función no devuelve nada en la búsqueda, si lo vuelvo a poner ¡ ANDA ! ¿ cuál es el error ?
Última edición por BigBear el 2014-06-08 17:02 @751, editado 1 vez en total
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Error en función

Notapor explorer » 2014-06-08 17:00 @750

La función bing() no es llamada desde ningún sitio.

La función google() no existe.
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: Error en función

Notapor BigBear » 2014-06-08 17:06 @754

Noooooooooo, me confundí al editar :D Te aviso que el problema ya lo resolví. Al parecer la expresión regular cambiaba en el código fuente de la página pero solo a veces, entonces como cargaba el script como 30 veces llegué a la extraña conclusión de que era por el savefile(). Solo eran malas coincidencias :evil: .

Aprovechando el tema abierto, es que tengo la función google():

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     sub google {
  2.         my ( $a, $b ) = @_;
  3.         my @founds;
  4.         for ( $pages = 10 ; $pages <= $b ; $pages = $pages + 10 ) {
  5.             $code =
  6.               toma( "https://www.google.com.ar/search?hl=&q="
  7.                   . $a
  8.                   . "&start=$pages" );
  9.                 savefile("leer.html",$code);
  10.             while ( $code =~ /(?<="r"><. href=")(.+?)"/mig ) {
  11.                 my $url = $1;
  12.                 if ( $url =~ /\/url\?q\=(.*?)\&amp\;/ ) {
  13.                     push( @founds, uri_unescape($1) );
  14.                 }
  15.             }
  16.         }
  17.         my @founds = repes( cortar(@founds) );
  18.         return @founds;
  19.     }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El tema es que $code solo me devuelve esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
LWP will support https URLs if the Crypt::SSLeay module is installed. More information at
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Lo que no entiendo es por qué da error, porque Crypt::SSLeay sí está instalado en mi Windows Seven. Después pruebo en Ubuntu pero en mi Win sí está instalado.

¿ Qué tengo que hacer para resolver este problema ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Error en función

Notapor explorer » 2014-06-08 18:06 @796

Hay algún hilo en estos foros que habla del tema del acceso al HTTPS.
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: Error en función

Notapor BigBear » 2014-06-08 18:49 @826

La verdad no encontré el mensaje. Solucioné el código en mi amado Ubuntu instalando desde Synaptic el paquete libcrypt-ssleay-perl. El problema ahora es instalar lo necesario para correr el script en Seven...
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Error en función

Notapor BigBear » 2014-06-09 09:41 @445

Perdón por el doble envío pero acá dejo la solución para Seven por si alguien le pasa lo mismo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ppm install http://www.eekboek.nl/dl/ppms/Crypt-SSLeay.ppd
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Error en función

Notapor explorer » 2014-06-09 11:17 @511

O sea... que no estaba instalado ;)
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: Error en función

Notapor BigBear » 2014-06-09 13:14 @593

¡nah!, tampoco así, solo estaba "mal" instalado.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Básico

¿Quién está conectado?

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