• Publicidad

Extraer fragmento

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Extraer fragmento

Notapor jimr1984 » 2014-09-19 16:53 @745

Buenas tardes.

Estimados, tengo otra consulta.

Tengo el siguiente enlace: http://www.easypolls.net/poll?command=g ... 456e71cfb4

el cual me devuelve aparentemente un JSON.

Estoy realizando un GET con Perl a esa dirección, y me muestra todo ese código.

Casi al final hay un código así:

"pollKey":"dk3V149"

La palabra "pollKey" no cambia, siempre es la misma.

El valor que tiene a continuación es el que cambia aleatoriamente pero siempre tiene un tamaño de 7 caracteres (letras y números).

¿Cómo puedo hacer para extraer el valor de "pollKey" y guardarlo en una variable?

He intentado con expresiones regulares pero aún no doy con la correcta. Por favor, si pueden ayudarme, gracias...
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Publicidad

Re: Extraer fragmento

Notapor explorer » 2014-09-19 17:37 @776

Mira esta respuesta.

Allí veras una forma de extraer la información con expresiones regulares, o con el módulo Mojo::JSON.

Si no te sale, publica la parte del código que estás probando, y miramos dónde falla.
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: Extraer fragmento

Notapor jimr1984 » 2014-09-20 12:25 @559

El ejemplo que tengo es el siguiente:
#!/usr/bin/perl
use strict;
my $cadena =' "mensaje":"Hola este es mi ejemplo, ¿te gustó? FIN" '
chomp($linea);
if ($linea =~ /(\"mensaje\":\")([a-zA-Z]).(\s)/)
{
print $1;
print $2;
print $3;
}
}

Lo que necesito es que extraiga todo el mensaje HASTA que encuentre la primera comilla doble, desde " hasta ".

Resultado: Hola este es mi ejemplo, ¿te gustó? FIN

el cual debería obtener. GRACIAS, POR SU AYUDA.
Última edición por explorer el 2014-09-20 15:02 @668, editado 1 vez en total
Razón: sgte => siguiente
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: Extraer fragmento

Notapor explorer » 2014-09-20 15:13 @676

Te falta un ';' al final de la línea 3, y declaras una variable $cadena, pero luego analizas $linea", así que este programa no te funcionará nunca.

La expresión regular hay que ajustarla más.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. my $cadena = q("mensaje":"Hola, este es mi ejemplo, ¿te gustó? FIN");
  4. chomp($cadena);
  5. if ($cadena =~ /"mensaje":"(.+?)"/) {
  6.     print "$1\n";
  7. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
De todas maneras, esto no funcionará si dentro del mensaje aparecen comillas dobles.
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: Extraer fragmento

Notapor jimr1984 » 2014-09-21 12:53 @579

Estimado, tengo este código:
#! /usr/bin/perl
use strict;
use LWP::UserAgent;
use HTTP::Request;

#/emPoll.js?p=541e13e2e4b088456e71d8ce"></script>
#en el código fuente de esta página contiene 3 enlaces iguales lo cuales varían el número o la secuencia ejemplo:
#541e13e2e4b088456e71d8ce
#541e13e2e4b088456e71d8RS
#541e13e2e4b088456e71d8XX

my $link = "http://www.eldeber.com.bo/home.php";
my $ua = LWP::UserAgent->new;
$ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");
my $req = HTTP::Request->new(GET => $link);
my $response = $ua->request($req);
my $content = $response->content();
my $codigo = $response->code();

#print $content;
if ($content =~ /(\/emPoll.js\?p\=)(.+)*$\"\>\<\/script\>/)
{
# print $1;
print $2;
print $3;

}

Tengo este código el cual, me muestra el primer código: 541e13e2e4b088456e71d8ce.

Pero necesito ayuda para poder obtener el resto y visualizarlos.

SALUDOS...
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: Extraer fragmento

Notapor explorer » 2014-09-21 16:40 @736

Debes convertir la condición en un bucle con la expresión regular con el modificador /g para que haga una búsqueda de forma repetida (global).
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.14;
  3. use LWP::Simple;
  4.  
  5. my $ua = LWP::UserAgent->new(
  6.             agent => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0',  
  7. );
  8. $ua->timeout(10);
  9. my $response = $ua->get('http://www.eldeber.com.bo/index.php');
  10.  
  11. if ($response->is_success) {
  12.     my $pagina = $response->decoded_content();
  13.  
  14. #   say $pagina;
  15.  
  16.     while ($pagina =~ m/emPoll[.]js[?]p=(.+?)"/g) {
  17.         say $1;
  18.     }
  19. }
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

Re: Extraer fragmento

Notapor jimr1984 » 2014-09-22 14:37 @651

Muchas gracias por la ayuda, me fue de mucha utilidad. Ya solucioné mi problema. Gracias, estimado :D
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341


Volver a Web

¿Quién está conectado?

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