From 0b7ca2504d7559195ef33c1c695d1007096d1aee Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 11 Feb 2011 21:02:00 +0100 Subject: Add vweather --- COPYING | 6 ++ bin/vweather | 147 +++++++++++++++++++++++++++++++++++++++++ share/weather/chance_of_rain | 1 + share/weather/clouds.png | Bin 0 -> 581 bytes share/weather/clouds_40.png | Bin 0 -> 634 bytes share/weather/cloudy | 1 + share/weather/cloudy.png | Bin 0 -> 694 bytes share/weather/cloudy_40.png | Bin 0 -> 781 bytes share/weather/lightning.png | Bin 0 -> 641 bytes share/weather/lightning_40.png | Bin 0 -> 699 bytes share/weather/mostly_sunny | 1 + share/weather/rain.png | Bin 0 -> 665 bytes share/weather/rain_40.png | Bin 0 -> 683 bytes share/weather/snow.png | Bin 0 -> 341 bytes share/weather/snow_40.png | Bin 0 -> 409 bytes share/weather/sun.png | Bin 0 -> 623 bytes share/weather/sun_40.png | Bin 0 -> 719 bytes share/weather/sunny | 1 + 18 files changed, 157 insertions(+) create mode 100755 bin/vweather create mode 120000 share/weather/chance_of_rain create mode 100644 share/weather/clouds.png create mode 100644 share/weather/clouds_40.png create mode 120000 share/weather/cloudy create mode 100644 share/weather/cloudy.png create mode 100644 share/weather/cloudy_40.png create mode 100644 share/weather/lightning.png create mode 100644 share/weather/lightning_40.png create mode 120000 share/weather/mostly_sunny create mode 100644 share/weather/rain.png create mode 100644 share/weather/rain_40.png create mode 100644 share/weather/snow.png create mode 100644 share/weather/snow_40.png create mode 100644 share/weather/sun.png create mode 100644 share/weather/sun_40.png create mode 120000 share/weather/sunny diff --git a/COPYING b/COPYING index b764540..87652e2 100644 --- a/COPYING +++ b/COPYING @@ -10,3 +10,9 @@ This file is part of the Crystal Icon Set, licensed under the terms of the GPL. Please see and + + + share/weather_* + +Parts of the Silk icon set, licensed CC-BY. +Please see diff --git a/bin/vweather b/bin/vweather new file mode 100755 index 0000000..06f6461 --- /dev/null +++ b/bin/vweather @@ -0,0 +1,147 @@ +#!/usr/bin/env perl +## Copyright © 2011 by Daniel Friesel +## License: WTFPL: +## 0. You just DO WHAT THE FUCK YOU WANT TO. +use strict; +use warnings; +use 5.010; +use autodie; + +use GD; +use Getopt::Std; +use Term::ANSIColor; +use Weather::Google; + +my %opt; +my $alpha; +my $dump; +my $share = $0; + +my $weather = Weather::Google->new( + 'Essen, Germany', + { + language => 'de', + }, +); + +my $forecasts = $weather->forecast_conditions(); + + +sub show_weather_console { + for my $day(@{$forecasts}) { + printf( + "%-6s %s%3d°c%s %s%3d°c%s %s\n", + $day->{'day_of_week'}, + color('blue'), + $day->{'low'}, + color('reset'), + color('red'), + $day->{'high'}, + color('reset'), + $day->{'condition'}, + ); + + if ($dump) { + say $day->{'icon'}; + } + } +} + +sub show_weather_png { + my ($w, $h) = (140, 64); + my $im = GD::Image->new($w, $h); + + my $white = $im->colorAllocateAlpha(255, 255, 255, $alpha); + my $blue = $im->colorAllocateAlpha( 0, 0, 200, $alpha); + my $red = $im->colorAllocateAlpha(200, 0, 0, $alpha); + my $gray = $im->colorAllocateAlpha(127, 127, 127, $alpha); + my $black = $im->colorAllocateAlpha( 0, 0, 0, $alpha); + + $im->filledRectangle(1, 1, $w - 2, $h - 2, $white); + + for my $i (0..3) { + my $offset = $i * 16; + my $day = $forecasts->[$i]; + + my $wday = substr($day->{'day_of_week'}, 0, 2); + my $low = sprintf('%3dc', $day->{'low'}); + my $high = sprintf('%3dc', $day->{'high'}); + my ($icon) = ($day->{'icon'} =~ m{ / ([^/]+) \. gif $ }x); + + if (not defined $day) { + last; + } + + $im->string(gdMediumBoldFont, 10, $offset, $wday , $black); + $im->string(gdMediumBoldFont, 60, $offset, $low , $blue); + $im->string(gdMediumBoldFont, 95, $offset, $high , $red); + + if ($dump) { + say "${share}/weather/${icon}"; + } + + if (-e "${share}/weather/${icon}") { + my $tmp = GD::Image->newFromPng("${share}/weather/${icon}", 1); + $im->copy($tmp, 40, $offset, 0, 0, 16, 16); + } + } + + $im->rectangle(0, 0, $w -1, $h -1, $gray); + + open(my $out_fh, '>', '/tmp/vweather.png'); + binmode $out_fh; + print $out_fh $im->png(); + close($out_fh); +} + +getopts('a:cdfg', \%opt); +$alpha = $opt{'a'} // 40; +$dump = $opt{'d'} // 0; + +if (-l $share) { + my $link = readlink($share); + $share =~ s{ [^/]+ $ }{}x; + $link =~ s{ / bin / vweather $ }{}x; + $share .= "${link}/share"; +} +else { + $share =~ s{ / bin / vweather $ }{}x; + $share .= '/share'; +} + +if ($opt{'c'}) { + show_weather_console(); +} +elsif ($opt{'g'}) { + show_weather_png(); +} + +if ($opt{'f'}) { + exec('feh', '/tmp/vweather.png'); +} + +__END__ + +=head1 NAME + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 OPTIONS + +=head1 EXIT STATUS + +=head1 CONFIGURATION + +=head1 DEPENDENCIES + +=head1 BUGS AND LIMITATIONS + +=head1 AUTHOR + +Copyright (C) 2011 by Daniel Friesel Ederf@finalrewind.orgE + +=head1 LICENSE + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/share/weather/chance_of_rain b/share/weather/chance_of_rain new file mode 120000 index 0000000..5b36e83 --- /dev/null +++ b/share/weather/chance_of_rain @@ -0,0 +1 @@ +rain_40.png \ No newline at end of file diff --git a/share/weather/clouds.png b/share/weather/clouds.png new file mode 100644 index 0000000..3f73eaa Binary files /dev/null and b/share/weather/clouds.png differ diff --git a/share/weather/clouds_40.png b/share/weather/clouds_40.png new file mode 100644 index 0000000..8503e8f Binary files /dev/null and b/share/weather/clouds_40.png differ diff --git a/share/weather/cloudy b/share/weather/cloudy new file mode 120000 index 0000000..f7ae88d --- /dev/null +++ b/share/weather/cloudy @@ -0,0 +1 @@ +clouds_40.png \ No newline at end of file diff --git a/share/weather/cloudy.png b/share/weather/cloudy.png new file mode 100644 index 0000000..5856e1d Binary files /dev/null and b/share/weather/cloudy.png differ diff --git a/share/weather/cloudy_40.png b/share/weather/cloudy_40.png new file mode 100644 index 0000000..3993ab1 Binary files /dev/null and b/share/weather/cloudy_40.png differ diff --git a/share/weather/lightning.png b/share/weather/lightning.png new file mode 100644 index 0000000..1d42b36 Binary files /dev/null and b/share/weather/lightning.png differ diff --git a/share/weather/lightning_40.png b/share/weather/lightning_40.png new file mode 100644 index 0000000..85b280f Binary files /dev/null and b/share/weather/lightning_40.png differ diff --git a/share/weather/mostly_sunny b/share/weather/mostly_sunny new file mode 120000 index 0000000..d1cf0f7 --- /dev/null +++ b/share/weather/mostly_sunny @@ -0,0 +1 @@ +cloudy_40.png \ No newline at end of file diff --git a/share/weather/rain.png b/share/weather/rain.png new file mode 100644 index 0000000..e6072cc Binary files /dev/null and b/share/weather/rain.png differ diff --git a/share/weather/rain_40.png b/share/weather/rain_40.png new file mode 100644 index 0000000..2207d7b Binary files /dev/null and b/share/weather/rain_40.png differ diff --git a/share/weather/snow.png b/share/weather/snow.png new file mode 100644 index 0000000..45bbdf1 Binary files /dev/null and b/share/weather/snow.png differ diff --git a/share/weather/snow_40.png b/share/weather/snow_40.png new file mode 100644 index 0000000..a86de75 Binary files /dev/null and b/share/weather/snow_40.png differ diff --git a/share/weather/sun.png b/share/weather/sun.png new file mode 100644 index 0000000..0156c26 Binary files /dev/null and b/share/weather/sun.png differ diff --git a/share/weather/sun_40.png b/share/weather/sun_40.png new file mode 100644 index 0000000..12bcb46 Binary files /dev/null and b/share/weather/sun_40.png differ diff --git a/share/weather/sunny b/share/weather/sunny new file mode 120000 index 0000000..a721871 --- /dev/null +++ b/share/weather/sunny @@ -0,0 +1 @@ +sun_40.png \ No newline at end of file -- cgit v1.2.3