• Publicidad

Cómo manejar un archivo XML

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

Cómo manejar un archivo XML

Notapor AcidDr1nk » 2014-06-25 03:39 @193

Hola. Estoy haciendo un programa el cual su objetivo final es entregar información sobre una dirección IP (país, cuidad, ISP y otros).

Esa información la entrega un sitio web. Entonces lo que el programa hace es ir al sitio y obtener un archivo XML con información sobre la IP.

Este es el código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use LWP::UserAgent;
  3. use HTTP::Request;
  4. print "Direción IP a analizar: ";
  5. chomp($IP = <STDIN>);
  6. my $useragent = LWP::UserAgent->new;
  7. $useragent->agent("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1) Gecko/20090624");
  8. my $url = "http://services.ipaddresslabs.com/iplocation/locateip?key=demo&ip=$IP";
  9. my $req = HTTP::Request->new(GET => $url);
  10. my $response = $useragent->request($req);
  11. my $content = $response->content();
  12. print $content;
  13.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Al hacer una prueba con una IP random como por ejemplo google.es obtendríamos lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <response>
  3.     <query_status>
  4.         <query_status_code>OK</query_status_code>
  5.         <query_status_description>Query successfully performed.</query_status_description>
  6.     </query_status>
  7.     <ip_address>173.194.37.143</ip_address>
  8.     <geolocation_data>
  9.         <continent_code>NA</continent_code>
  10.         <continent_name>North America</continent_name>
  11.         <country_code_iso3166alpha2>US</country_code_iso3166alpha2>
  12.         <country_code_iso3166alpha3>USA</country_code_iso3166alpha3>
  13.         <country_code_iso3166numeric>840</country_code_iso3166numeric>
  14.         <country_code_fips10-4>US</country_code_fips10-4>
  15.         <country_name>United States</country_name>
  16.         <region_code>CA</region_code>
  17.         <region_name>California</region_name>
  18.         <city>Mountain View</city>
  19.         <postal_code>94043</postal_code>
  20.         <metro_code>807</metro_code>
  21.         <area_code>650</area_code>
  22.         <latitude>37.4192</latitude>
  23.         <longitude>-122.0574</longitude>
  24.         <isp>Google</isp>
  25.         <organization>Google</organization>
  26.     </geolocation_data>
  27. </response>
  28.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Todo hasta este punto va de maravilla, pero ahora lo que quiero es mostrar esa información de forma ordenada, como por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Country: United States
Region Name: California
Region Code: CA
ISP: Google
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Entonces mi pregunta es ¿cómo lo puedo hacer? También me gustaría saber si la forma en la que está programada la primera parte del código es la mejor o si puede ser mejorado. Otra cosilla. Si alguien tiene un manual sobre Perl y me lo puede pasar estaría muy agradecido. Estoy aprendiendo este lenguaje, los tutoriales que hay aquí ya casi los acabo. Bien, muchas gracias por leer.

AcidDr1nk
Avatar de Usuario
AcidDr1nk
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2014-06-25 01:58 @123

Publicidad

Re: Cómo manejar un archivo XML

Notapor explorer » 2014-06-25 04:20 @222

Bienvenido a los foros de Perl en Español, AcidDr1nk.

En el foro de Formación tienes enlaces a manuales, tutoriales en vídeo...

Recuerda también que tienes un montón de documentación ya instalada en tu ordenador. Solo tienes que ejecutar 'perldoc perl' en la línea de comandos. También tienes parte de la documentación traducida al español. Por ejemplo, en perlintro tienes una introducción al lenguaje.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo manejar un archivo XML

Notapor explorer » 2014-06-25 05:27 @269

En cuanto a la segunda pregunta, hay muchas formas de hacer la petición, y de forma más cómoda. Por ejemplo, usando LWP::Simple:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. use LWP::Simple;
  4. use XML::Simple;
  5.  
  6. print "Direción IP a analizar: ";
  7. chomp(my $IP = <STDIN>);
  8. #my $IP = '173.194.37.143';                                     # para hacer pruebas
  9.  
  10. #my $url = "http://api.ipaddresslabs.com/iplocation/v1.7/locateip?key=demo&ip=$IP&format=XML";
  11. my $url = "http://services.ipaddresslabs.com/iplocation/locateip?key=demo&ip=$IP";
  12.  
  13. my $contenido = get($url);
  14. #my $contenido = do { local $/; <DATA> };                       # para hacer pruebas
  15.  
  16. if (not defined $contenido) {
  17.     say "No se pudo obtener información";
  18. }
  19. else {
  20.     my $xml = XMLin($contenido);                                # interpretamos el xml
  21.  
  22.     if ($xml->{'query_status'}->{'query_status_code'} ne 'OK') {
  23.         say "No se pudo resolver";
  24.     }
  25.     else {
  26.         #say $contenido;
  27.         #use Data::Dumper;
  28.         #say Dumper $xml;
  29.  
  30.         say "IP: $xml->{'ip_address'}";
  31.         say "Country: $xml->{'geolocation_data'}->{'country_name'}";
  32.         say "Region Name: $xml->{'geolocation_data'}->{'region_name'}";
  33.         say "Region Code: $xml->{'geolocation_data'}->{'region_code'}";
  34.         say "ISP: $xml->{'geolocation_data'}->{'isp'}";
  35.     }
  36. }
  37.  
  38. __END__
  39. <?xml version="1.0" encoding="UTF-8"?>
  40. <response>
  41.     <query_status>
  42.         <query_status_code>OK</query_status_code>
  43.         <query_status_description>Query successfully performed.</query_status_description>
  44.     </query_status>
  45.     <ip_address>173.194.37.143</ip_address>
  46.     <geolocation_data>
  47.         <continent_code>NA</continent_code>
  48.         <continent_name>North America</continent_name>
  49.         <country_code_iso3166alpha2>US</country_code_iso3166alpha2>
  50.         <country_code_iso3166alpha3>USA</country_code_iso3166alpha3>
  51.         <country_code_iso3166numeric>840</country_code_iso3166numeric>
  52.         <country_code_fips10-4>US</country_code_fips10-4>
  53.         <country_name>United States</country_name>
  54.         <region_code>CA</region_code>
  55.         <region_name>California</region_name>
  56.         <city>Mountain View</city>
  57.         <postal_code>94043</postal_code>
  58.         <metro_code>807</metro_code>
  59.         <area_code>650</area_code>
  60.         <latitude>37.4192</latitude>
  61.         <longitude>-122.0574</longitude>
  62.         <isp>Google</isp>
  63.         <organization>Google</organization>
  64.     </geolocation_data>
  65. </response>
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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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

cron