####################################### # self-enclosed polling mechanism for radio area use LWP; sub get_radio_info { my $radio; my $raw_radio; print "" if ($DEBUG); $RADIO_STATUS_ENABLED = 1; if ( ! $RADIO_STATUS_ENABLED || poll_radio_status() == -1) { return -1; } print "\nRadio is up!
\n" if ($DEBUG); if (poll_cache_age($RADIO_INFO_PATH) > 60) { print "Polling radio...
\n" if ($DEBUG); $raw_radio = go_slurp($RADIO_INFO_URL, $RADIO_INFO_PATH); } $raw_radio ||= quickread($RADIO_INFO_PATH); $radio = parse_colons($raw_radio); print "
" if ($DEBUG); return $radio; } sub poll_cache_age { my $file = shift; my $ret = time - (stat($file))[9]; print "Age of $file: $ret seconds...
\n" if ($DEBUG); return $ret; } sub poll_radio_status { my $status; print "Polling radio status...
\n" if ($DEBUG); # go_slurp($RADIO_STATUS_URL, $RADIO_STATUS_PATH); # $status = quickread($RADIO_STATUS_PATH); my $r = HTTP::Request->new(GET => $RADIO_STATUS_URL); my $re = LWP::UserAgent->new->request($r); my $data = $re->content(); chomp($data); if ($data eq "1") { return 1; } else { return -1; } } sub parse_colons { my $filedata = shift; my %parsed; foreach $l (@$filedata) { chomp $l; my ($k, $v) = split(/: /, $l, 2); $k = lc($k); $k =~ s/ //; $parsed{lc($k)} = $v; } return \%parsed; } sub go_slurp { my ($url, $file) = @_; my $r = HTTP::Request->new(GET => $url); my $re = LWP::UserAgent->new->request($r); my $data = $re->content(); open F, ">$file" or return $data; print F $data; close F; my @lines = split "\n", $data; return \@lines; } sub quickread { my $file = shift; my @out; open F, $file or die "problem with $file $!"; @out=; close F; return \@out; } 1;