Perl checks for rain and issues umbrella warning

Rain Check

Article from Issue 172/2015

A Perl script that retrieves the current weather forecast at dawn helps the Perlmeister decide whether to run the risk or take an umbrella just in case.

In the wet season, the question often arises as to whether rain or snow will fall from the sky during the day and therefore whether it might be advisable to take an umbrella with me to work.

Underground Weather

Ultimately, however, even occasional rain showers around noon would be irrelevant, as long as you could navigate the commute to and from work without getting wet. Luckily, the Weather Underground [1] weather service offers free forecasts for the day. Although they are certainly not 100 percent accurate, they do beat human intuition by a mile.

On CPAN, Perl programmers will find the WWW::Wunderground::API module, which uses a script to fetch the weather data from the server thanks to a free API developer key [2] procured especially for that purpose. The simple script in Listing 1 uses the module; it iterates over the hourly entries in the bulk of JSON data returned and outputs the time and the probability of rain for each hour sent in the pop (probability of precipitation) [3] entry.

Figure 1 shows less than a 50 percent probability of rain in the afternoon; a practicing mathematician might be inclined to leave that umbrella at home.

Figure 1: Starting with the current hour, Weather Underground outputs the hourly rain probability.

More Than Just Rain

That said, the Underground server returns far more than just the probability of rain. The hourly() method called in line 12 of Listing 1 returns an array of hourly weather elements for the day. As the mass of data in Figure 2 shows, each element points to a number of keys such as humidity or sky (cloud coverage). Finally, the date and time of the forecast are provided under FCTTIME.

Listing 1

01 #!/usr/local/bin/perl -w
02 use strict;
03 use WWW::Wunderground::API;
04 use DateTime;
06 my $w = WWW::Wunderground::API->new(
07   location => "San Francisco, CA",
08   api_key  => "0123456789abcdef",
09   auto_api => 1,
10 );
12 for my $e (@{ $w->hourly }) {
13   my $dt = DateTime->from_epoch(
14     epoch => $e->{ FCTTIME }->{ epoch } );
16   print "$dt: $e->{ pop }%\n";
17 }
Figure 2: The hourly weather forecasts contain not only the probability of rain but also the humidity or temperature.

Listing 1 grabs the epoch entry from the date and converts the Unix seconds since 1970, using the DateTime Perl module, to a readable and easily machine manipulable format for use later.

API Key for an Email Address

The Wunderground server does not give you the data unconditionally, but if you register on the developer page by providing a valid email address [2], you will receive a 16-digit hexadecimal API key in return that enables a limited number of daily queries to the service. If you select the free "Cumulus" plan and also assure the provider that the data will not be used for commercial purposes (Figure 3), you do not need to specify any form of payment. In Listings 1 and 2, you need to replace the string defined by api_key with the API key you are assigned (Figure 4) before use.

Figure 3: The API key required for Weather Underground is issued by the server in exchange for a valid email address.
Figure 4: The API key on Weather Underground consists of an 18-digit hexadecimal number.

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More