#!perl
# Perl sample to fetch weather data from http://weather.noaa.gov/
# You can lookup ICAO codes here:
# https://pilotweb.nas.faa.gov/qryhtml/icao/
# use option -q to get output only.
my $verstring = 'v0.11 &copy; 2007-Jul-22 G. Knauf';

use WWW::Curl::Easy;
use Getopt::Std;
use strict;
use vars qw/$opt_q/;

getopts('q');

my $station = $ARGV[0] || 'ESSA'; # For Stockholm, Schweden
my $url = 'ftp://tgftp.nws.noaa.gov/data/observations/metar/decoded/' . uc($station) . '.TXT';

sub curl_write_callback {
  my ( $data, $pointer ) = @_;
  ${$pointer} .= $data;
  return length($data);
}

if (!$opt_q) {
  print "Perl Version: $]\n";
  my $mtime = (stat('/system/perl.nlm'))[9] if ($^O eq 'NetWare');
  my $mtime = (stat('c:/perl/bin/perl.exe'))[9] if ($^O eq 'MSWin32');
  my $mtime = (stat('/usr/bin/perl'))[9] if ($^O eq 'linux');
  print "Binary Fdate: ",scalar localtime($mtime),"\n";
  print "OS Name     : $^O\n\n";
  print "My Version  : $verstring\n\n";
  printf ("Curl.pm Version: %s\n", $WWW::Curl::VERSION);
  printf ("Easy.pm Version: %s\n", $WWW::Curl::Easy::VERSION);
  printf ("libcurl Version: %s\n", WWW::Curl::easy::version());
  print ("=" x 78 . "\n");
}

my ( $curl_content, $curl_headers );
my $curl = new WWW::Curl::Easy;
$curl->setopt( CURLOPT_FILE,           \$curl_content );
$curl->setopt( CURLOPT_HEADERFUNCTION, \&curl_write_callback );
$curl->setopt( CURLOPT_URL,            $url );
$curl->setopt( CURLOPT_USERAGENT,      'GetWeather - '.$curl->version() );
$curl->setopt( CURLOPT_WRITEFUNCTION,  \&curl_write_callback );
$curl->setopt( CURLOPT_WRITEHEADER,    \$curl_headers );
$curl->perform;
my $curl_info = $curl->getinfo(CURLINFO_HTTP_CODE);
my $curl_err  = $curl->errbuf;
chomp($curl_content);
chomp($curl_headers);

if ($opt_q) {
  print "$curl_content\n";
} else {
  print "Content:\n========\n$curl_content\n", ("=" x 78 . "\n");
  print "Headers:\n========\n$curl_headers\n", ("=" x 78 . "\n");
  print "Info:\n=====\n$curl_info\n", ("=" x 78 . "\n");
  print "Error:\n======\n$curl_err\n", ("=" x 78 . "\n") if ($curl_err);
}


