[bcn-pm] RS: salutacions i consulta

Xavier Noria fxn a hashref.com
dic ago 21 14:04:24 PDT 2013


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/20130821/b60a075d/attachment.html>


Més informació sobre la llista de correu Barcelona-pm