small-hacks/ups-watch.plx

114 lines
3.3 KiB
Text
Raw Normal View History

#!/usr/bin/perl
# Copyright (C) 2010, Bradley M. Kuhn
#
# This program gives you software freedom; you can copy, modify, convey,
# and/or redistribute it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program in a file called 'GPLv3'. If not, write to the:
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor
# Boston, MA 02110-1301, USA.
use strict;
use warnings;
use File::Temp qw/ tempfile /;
use URI::Fetch;
my %URLS =
# 1Z5FX957P216384708
# 1ZX799380356685541
# FEDEX: 782107230144867
#1Z1826920372528717
(
'http://wwwapps.ups.com/WebTracking/track?HTMLVersion=5.0&loc=en_US&Requester=UPSHome&WBPM_lid=&trackNums=1ZX799470353725469&track.x=Track'
=> { date => '07/06/2011', time => '7:03 A.M.' },
'http://wwwapps.ups.com/WebTracking/track?loc=en_US&track.x=Track&trackNums=%20%20%20%201ZX799470353838132'
=> { date => '07/06/2011', time => '9:03 A.M.' },
'http://wwwapps.ups.com/WebTracking/track?HTMLVersion=5.0&loc=en_US&Requester=UPSHome&WBPM_lid=&trackNums=1ZX799390318463734&track.x=Track'
=> { date => '07/06/2011', time => '2:18 A.M.' },
);
my $SLEEP_VAL_SECONDS = 90;
if (@ARGV != 0) {
print STDERR "Usage: $0\n";
exit 1;
}
sub DieLoud {
my($err) = @_;
my ($fh, $filename) = tempfile();
print $fh $err;
print STDERR "$err\n";
system("/home/bkuhn/bin/myosd $filename &");
die "Unable to run myosd: $err" unless $? == 0;
system("/bin/cat $filename | /usr/bin/espeak -p 45 -s 130 --stdin");
die "Unable to run espeak for: $err" unless $? == 0;
die $err;
}
sub WarnLoud {
my($err) = @_;
my ($fh, $filename) = tempfile();
print $fh $err;
print STDERR "$err\n";
system("/home/bkuhn/bin/myosd $filename &");
die "Unable to run myosd: $err" unless $? == 0;
system("/bin/cat $filename | /usr/bin/espeak -p 45 -s 130 --stdin");
die "Unable to run espeak for: $err" unless $? == 0;
warn $err;
}
while (1) {
# my($fh, $filename) = tempfile();
foreach my $url (keys %URLS) {
my($date, $time) = ($URLS{$url}{date}, $URLS{$url}{time});
open(WEB_DATA, "/usr/bin/links -dump '$url'|")
or DieLoud("unable to download URL");
my $foundEvents = 0;
while (my $line = <WEB_DATA>) {
if ($line =~ /^\s*Location\s*Date/) {
$foundEvents = 1;
} elsif ($foundEvents) {
if ($line =~ /^.*\s+(\d+\s*\/\s*\d*\s*\/\s*\d*)\s+(\S+\s+\S+)\s*(.*)/) {
my($newDate, $newTime, $data) = ($1, $2, $3);
if ($newDate ne $date or $newTime ne $time) {
WarnLoud("UPS Action at $newTime on $newDate: $data: $url");
last;
} else {
$foundEvents = 0;
last;
}
}
}
}
close WEB_DATA;
}
sleep $SLEEP_VAL_SECONDS;
my $date=`/bin/date`;
chomp $date;
print "Checking (at $date)...\n";
}