package Weather::Com::Wind; use 5.006; use strict; use warnings; use Weather::Com::L10N; use Weather::Com::Base qw/convert_winddirection/; use base 'Weather::Com::Object'; our $VERSION = sprintf "%d.%03d", q$Revision: 1.2 $ =~ /(\d+)/g; #------------------------------------------------------------------------ # Constructor #------------------------------------------------------------------------ sub new { my $proto = shift; my $class = ref($proto) || $proto; my %parameters; # parameters provided by new method if ( ref( $_[0] ) eq "HASH" ) { %parameters = %{ $_[0] }; } else { %parameters = @_; } my $self = $class->SUPER::new( \%parameters ); # getting first weather information $self->{SPEED} = -1; $self->{GUST} = -1; $self->{DIR_DEGREES} = -1; $self->{DIR_TXT} = 'N/A'; return $self; } # end new() #------------------------------------------------------------------------ # update wind data #------------------------------------------------------------------------ sub update { my $self = shift; my %wind; if ( ref( $_[0] ) eq "HASH" ) { %wind = %{ $_[0] }; } else { %wind = @_; } # handle non existent wind data unless ( $wind{s} ) { $self->{SPEED} = -1; $self->{GUST} = -1; $self->{DIR_DEGREES} = -1; $self->{DIR_TXT} = 'N/A'; } elsif ( lc( $wind{s} ) eq "calm" ) { # special rules apply if speed is non-numeric $self->{SPEED} = 0; $self->{GUST} = 0; $self->{DIR_DEGREES} = -1; $self->{DIR_TXT} = 'N/A'; } else { # else update object data $self->{SPEED} = $wind{s}; $self->{GUST} = $wind{gust}; $self->{DIR_DEGREES} = $wind{d}; $self->{DIR_TXT} = $wind{t}; } } #------------------------------------------------------------------------ # accessor methods #------------------------------------------------------------------------ sub speed { my $self = shift; return $self->{SPEED}; } sub maximum_gust { my $self = shift; return $self->{GUST}; } sub direction_degrees { my $self = shift; return $self->{DIR_DEGREES}; } sub direction_short { my $self = shift; my $language = shift; return $self->get_language_handle($language)->maketext( $self->{DIR_TXT} ); } sub direction_long { my $self = shift; my $language = shift; my $dir = convert_winddirection( $self->{DIR_TXT} ); return $self->get_language_handle($language)->maketext($dir); } 1; __END__ =pod =head1 NAME Weather::Com::Wind - class containing wind data =head1 SYNOPSIS #!/usr/bin/perl -w use Weather::Com::Finder; # you have to fill in your ids from weather.com here my $PartnerId = 'somepartnerid'; my $LicenseKey = 'mylicense'; my %weatherargs = ( 'partner_id' => $PartnerId, 'license' => $LicenseKey, 'language' => 'de', ); my $weather_finder = Weather::Com::Finder->new(%weatherargs); my @locations = $weather_finder->find('Heidelberg'); my $currconditions = $locations[0]->current_conditions(); print "Wind comes from ", $currconditions->wind()->direction_long(), "\n"; print "and its speed is", $currconditions->wind()->speed(), "\n"; =head1 DESCRIPTION Via I one can access speed and direction (in degrees, short and long textual description) of the wind. Wind is usually an object belonging to current conditions or to a forecast (not implemented yet). This class will B be updated automatically with each call to one of its methods. You need to call the C method of the parent object again to update your object. =head1 CONSTRUCTOR You usually would not construct an object of this class yourself. This is implicitely done when you call the C method of one current conditions or forecast object. =head1 METHODS =head2 speed() Returns the wind speed. =head2 direction_degrees() Returns the direction of the wind in degrees. =head2 direction_short([$language]) Returns the direction of the wind as wind mnemonic (N, NW, E, etc.). These directions are being translated if you specified a language in the parameters you provided to your I. This attribute is I. =head2 direction_long([$language]) Returns the direction of the wind as long textual description (North, East, Southwest, etc.). These directions are being translated if you specified a language in the parameters you provided to your I. This attribute is I. =head1 AUTHOR Thomas Schnuecker, Ethomas@schnuecker.deE =head1 COPYRIGHT AND LICENSE Copyright (C) 2004-2009 by Thomas Schnuecker This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The data provided by I and made accessible by this OO interface can be used for free under special terms. Please have a look at the application programming guide of I (L)! =cut