Página 1 de 1

Error en función

NotaPublicado: 2014-06-08 15:39 @693
por BigBear
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 ?

Re: Error en función

NotaPublicado: 2014-06-08 17:00 @750
por explorer
La función bing() no es llamada desde ningún sitio.

La función google() no existe.

Re: Error en función

NotaPublicado: 2014-06-08 17:06 @754
por BigBear
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 ?

Re: Error en función

NotaPublicado: 2014-06-08 18:06 @796
por explorer
Hay algún hilo en estos foros que habla del tema del acceso al HTTPS.

Re: Error en función

NotaPublicado: 2014-06-08 18:49 @826
por BigBear
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...

Re: Error en función

NotaPublicado: 2014-06-09 09:41 @445
por BigBear
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

Re: Error en función

NotaPublicado: 2014-06-09 11:17 @511
por explorer
O sea... que no estaba instalado ;)

Re: Error en función

NotaPublicado: 2014-06-09 13:14 @593
por BigBear
¡nah!, tampoco así, solo estaba "mal" instalado.