[bcn-pm] RS: salutacions i consulta
Agud Pique, Enric
eagud.q a tv3.cat
dij ago 22 01:51:38 PDT 2013
Hola Xavier,
moltes gràcies pel codi, l'estic mirant ara
Una consulta, una linea que no entenc del tot, la següent, exactament que fa?
while ($html =~ /<FONT[^>]+>([^<]+)/g)
Enric
________________________________
De: Barcelona-pm [mailto:barcelona-pm-bounces+eagud.q=tv3.cat a pm.org] En nom de Xavier Noria
Enviat: dimecres, 21 de agost de 2013 23:04
Per a: Barcelona Perl Mongers
Tema: Re: [bcn-pm] RS: salutacions i consulta
Hola Enric,
En aquest problema podem simplificar una mica les coses observant com va el website. Per exemple, el formulari es nomes una manera de fer una peticio GET amb un cert query string, si fas un parell de proves veus com van els parametres i aixi t'estalvies simular la navegacio (tot i que tambe es podria fer).
Pel que fa a la resposta, es un HTML prou senzill. Per a extreure dades de documents HTML arbitraris normalment es fan anar parsers HTML, pero en aquesta pagina d'estructura coneguda es mes que suficient al meu entendre fer anar una expressio regular.
Tambe fa mes facil la feina saber que les dades METAR son com son, una tirallonga ASCII sense massa complicacio des d'aquest punt de vista.
Et passo un script que podria ser un punt de partida, nomes treu les dades METAR per stdout, una fila per aeroport. Rep els codis d'aeroport com a arguments:
perl fetch_metar.pl LEBL LEGE
Naturalment si volguessis ajuda en modificar-lo no dubtis a escriure.
Fa anar el modul LWP::UserAgent:
cpan install Bundle::LWP
Espero que t'ajudi,
Xavier
use strict;
use warnings;
use URI;
use LWP::UserAgent;
my @airports = @ARGV;
die <<EOS unless @airports;
Si us plau, passam'm algun codi d'aeroport, com ara
perl $0 LEBL LEGE
EOS
my $url = URI->new('http://aviationweather.gov/adds/metars');
$url->query_form(
station_ids => join(' ', @airports),
std_trans => 'standard',
chk_metars => 'on',
hoursStr => 'most recent only',
);
my $ua = LWP::UserAgent->new;
my $res = $ua->get($url);
if ($res->is_success) {
my $html = $res->decoded_content;
while ($html =~ /<FONT[^>]+>([^<]+)/g) {
print "$1\n";
}
} else {
die $res->status_line;
}
-------------- part següent --------------
Un document HTML ha estat eliminat...
URL: <http://mail.pm.org/pipermail/barcelona-pm/attachments/20130822/5d55e66e/attachment.html>
Més informació sobre la llista de correu Barcelona-pm