[bcn-pm] RS: salutacions i consulta

kenneth a gnunetworks.com kenneth a gnunetworks.com
dij ago 22 01:45:28 PDT 2013


  

Hola a tots, 

No cal un script per a baixar-se les dades. 

Son en
CSV a http://aviationweather.gov/adds/data/ [7] 

En concret:
http://aviationweather.gov/adds/data/dataserver_current/ [8] 

Només et
cal filtrar les estacions que vols dins els CSVs :) 

Salut!

Kenneth


On Wed, 21 Aug 2013 23:32:06 +0200, Marc Egea i Sala wrote: 

> A mi
el més simple que se m'acut és utilitzar LWP::Simple com i Text:CSV per
fer el csv. Com diu en Xavi, aprofito que la web em deixa fer una
petició get directament amb el codi que vull...
> Pot ser alguna cosa
així (amb una regex ultrafàcil i sense passar paràmetres) :
> 
>
#!/usr/bin/env perl
> 
> use strict;
> use v5.10;
> 
> use
LWP::Simple;
> use Text::CSV;
> 
> my $output_file = 'data.csv';
> my
@airports = qw( LEBL LEGE );
> 
> open my $fh, ">:encoding(utf8)",
$output_file or die $!;
> my $csv = Text::CSV->new ( { binary => 1,
sep_char => ';' } );
> 
> for my $code ( @airports ) {
> my $page =
"http://aviationweather.gov/adds/metars/?station_ids=$code&std_trans=standard&chk_metars=on&hoursStr=most+recent+only&submitmet=Submit
[5]";
> my $html = get( $page );
> my @data = $html =~ />(.*)
>
$csv->print( $fh => [ split( ' ', $data[0] ) ] );
> print $fh "n"
> }
>

> close $fh;
> 
> El dia 21 d'agost de 2013 23.04, Xavier Noria ha
escrit:
> 
>> 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 [1] 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 < 
>> 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 =~ /]+>([^ 
>> print "$1n"; 
>>
} 
>> } else { 
>> die $res->status_line; 
>> } 
>>
_______________________________________________
>> llista dels
Barcelona-pm
>> Barcelona-pm a pm.org [2]
>>
http://mail.pm.org/mailman/listinfo/barcelona-pm [3]
>> BCN Perl
Mongers: http://barcelona.pm.org [4]

  

Links:
------
[1]
http://fetch_metar.pl
[2] mailto:Barcelona-pm a pm.org
[3]
http://mail.pm.org/mailman/listinfo/barcelona-pm
[4]
http://barcelona.pm.org
[5]
http://aviationweather.gov/adds/metars/?station_ids=$code|+|amp|+|std_trans=standard|+|amp|+|chk_metars=on|+|amp|+|hoursStr=most+recent+only|+|amp|+|submitmet=Submit
[6]
mailto:fxn a hashref.com
[7] http://aviationweather.gov/adds/data/
[8]
http://aviationweather.gov/adds/data/dataserver_current/
-------------- part següent --------------
Un document HTML ha estat eliminat...
URL: <http://mail.pm.org/pipermail/barcelona-pm/attachments/20130822/5f86d9b3/attachment-0001.html>


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