It started with me wanting to know how to code with R. R is about handling and graphing data, and I didn't really have data of my own. So, what I did was find a source I liked for weather and started putting it into a MySQL database.
That source was Google, specifically the XML used for weather in the soon-to-be-closed iGoogle.
Here's that code.
That source was Google, specifically the XML used for weather in the soon-to-be-closed iGoogle.
Here's that code.
- #!/usr/bin/perl
- # $Id: hpsetdisp.pl 11 2006-03-22 01:21:03Z yaakov $
- # hpsetdisp.pl
- # Connects to a JetDirect equipped HP printer and uses
- # HP's control language to set the ready message on the
- # LCD display. Takes an IP address and message on the
- # command line. My favorite message is "INSERT COIN".
- # Keep in mind the limitations of the display when composing
- # your clever verbiage.
- #
- # THIS PROGRAM IS PROVIDED WITH NO WARRANTY OF ANY KIND EXPRESSED OR IMPLIED
- # THE AUTHOR CANNOT BE RESPONSIBLE FOR THE EFFECTS OF THIS PROGRAM
- # IF YOU ARE UNCERTAIN ABOUT THE ADVISABILITY OF USING IT, DO NOT!
- #
- # Yaakov (http://kovaya.com/ )
- #
- # Modified by Garrett Hoofman
- # 10/18/2007
- # http://www.visionsofafar.com
- # Modified by David Jacoby
- # 12/10/2008
- # http://varlogrant.blogspot.com/
- # Modified by David Jacoby, using notify-send and tweaking Unicode
- # 09/08/2008
- # http://varlogrant.blogspot.com/
- # Modified by David Jacoby, moving from Google to NOAA
- # 08/28/2012
- # http://varlogrant.blogspot.com/
- use strict ;
- use warnings ;
- use Modern::Perl ;
- use DBI ;
- use Getopt::Long ;
- use IO::Interactive qw{ interactive } ;
- use IO::Socket ;
- use XML::DOM ;
- use Data::Dumper ;
- use lib '/home/jacoby/lib' ;
- use MyDB 'db_connect' ;
- use subs qw{ get_weather notify db_upload } ;
- my $zip = '' ;
- my $interactive = '' ;
- my $degree = '°' ; #the unicode, straight
- $degree = "\x{00b0}" ; #the unicode, specified
- my $rdymsg = "Ready" ;
- my $curr_cond ;
- GetOptions(
- 'zipcode=s' => \$zip ,
- ) ;
- $zip !~ /\d/ and exit 0 ;
- my %weather = get_weather ;
- db_upload %weather ;
- exit ;
- ########## ########## ########## ########## ########## ########## ##########
- sub get_weather {
- my %output ;
- my $parser = XML::DOM::Parser->new() ;
- my $file = 'http://www.google.com/ig/api?weather=XXXXX&hl=en' ;
- #my $zip = shift ;
- $zip =~ s{(\d{5})}{}mx ;
- $zip = $1 ;
- $file =~ s/XXXXX/$zip/mx ;
- my $doc = $parser->parsefile( $file ) ;
- exit if ! defined $doc ;
- $output{zip} = $zip ;
- $output{city} = $doc->getElementsByTagName( 'city' )->item( 0 )
- ->getAttribute('data');
- $output{temp_c} = $doc->getElementsByTagName( 'temp_c' )->item( 0 )
- ->getAttribute('data');
- $output{temp_f} = $doc->getElementsByTagName( 'temp_f' )->item( 0 )
- ->getAttribute('data');
- $output{humidity} = $doc->getElementsByTagName( 'humidity' )->item( 0 )
- ->getAttribute('data');
- $output{wind} = $doc->getElementsByTagName( 'wind_condition' )->item( 0 )
- ->getAttribute('data');
- $output{conditions} = $doc->getElementsByTagName( 'condition' )->item( 0 )
- ->getAttribute('data') ;
- return %output ;
- }
- ########## ########## ########## ########## ########## ########## ##########
- ########## ########## ########## ########## ########## ########## ##########
- sub db_upload {
- my %cond = @_ ;
- my $dbh = db_connect() ;
- for my $k ( sort keys %cond ) {
- $cond{$k} = $dbh->quote( $cond{$k} ) ;
- }
- my $fields = join ',' , qw{
- city conditions
- humidity temp_c
- temp_f wind
- zip
- } ;
- my $sql ;
- my $rows ;
- $sql = qq{
- INSERT INTO weather_data ( $fields ) VALUES (
- $cond{ city } ,
- $cond{ conditions } ,
- $cond{ humidity } ,
- $cond{ temp_c } ,
- $cond{ temp_f } ,
- $cond{ wind } ,
- $cond{ zip }
- ) } ;
- #$rows = $dbh->do( $sql ) or croak $dbh->errstr;
- $sql = qq{
- INSERT INTO weather ( $fields ) VALUES (
- $cond{ city } ,
- $cond{ conditions } ,
- $cond{ humidity } ,
- $cond{ temp_c } ,
- $cond{ temp_f } ,
- $cond{ wind } ,
- $cond{ zip }
- ) } ;
- $rows = $dbh->do( $sql ) or croak $dbh->errstr;
- return ;
- }
- ########## ########## ########## ########## ########## ########## ##########
While I fill in all these, I am not pulling in weather data from multiple cities, so I can hardcode city and zip, and I couldjust drop conditions and wind. All I'm really watching is temp_f, and it's a simple conversion to get temp_c if I wanted it.
I have code that pulls from NOAA. Think I'll try to bring that in here.
No comments:
Post a Comment