Ticket #9799: nws-alert.pl.patch

File nws-alert.pl.patch, 2.9 KB (added by Brett T. Warden <4ddab56a@…>, 9 years ago)

Patch to nws-alert.pl

  • nws-alert.pl.

    old new  
    2828
    2929sub StartTag {
    3030    my ($expat, $name, %atts) = @_;
    31     if ($name eq "cap:alert"){
     31    if ($name eq "feed"){
    3232        $currAlert = {};
    3333    }
    3434
    35     if ($name eq "cap:info") {
     35    if ($name eq "entry") {
    3636        $currInfo = {};
    3737    }
    3838
     
    4242sub EndTag {
    4343    my ($expat, $name, %atts) = @_;
    4444
    45     if ($name eq "cap:alert") {
     45    if ($name eq "feed") {
    4646        push @$alerts, $currAlert;
    4747    }
    48     if ($name eq "cap:info") {
    49         push (@{$currAlert->{'cap:info'}}, $currInfo);
     48    if ($name eq "entry") {
     49        push (@{$currAlert->{'entry'}}, $currInfo);
    5050    }
    5151}
    5252
    5353sub Text {
    5454    my ($expat, $text) = @_;
    5555
    56     if ($expat->within_element('cap:info')) {
     56    if ($expat->within_element('cap:geocode') && $expat->within_element('value')) {
     57        if($expat->{Text}) {
     58            my %geocodes;
     59            foreach my $geocode ($expat->{Text} =~ m/(\d+)/g) {
     60                $geocodes{int $geocode} = 1;
     61            }
     62            $currInfo->{'cap:geocode'} = \%geocodes;
     63        }
     64
     65    } elsif ($expat->within_element('entry')) {
    5766        $currInfo->{$expat->current_element} = $expat->{Text} if ($expat->{Text}
    5867                =~ /\w+/);
    5968
    60     } elsif ($expat->within_element('cap:alert')) {
     69    } elsif ($expat->within_element('feed')) {
    6170        $currAlert->{$expat->current_element} = $expat->{Text} if ($expat->{Text} =~
    6271                /\w+/);
    6372    }
     
    7079    my $state = shift;
    7180    $state =~ tr/[A-Z]/[a-z]/;
    7281    my $parser = new XML::Parser(Style => 'Stream');
    73     my $capfile = get "http://www.weather.gov/alerts/$state.cap" or
     82    my $capfile = get "http://www.weather.gov/alerts/$state.php?x=0" or
    7483        die "cannot retrieve alert data";
    7584    $parser->parse($capfile);
    7685    return $alerts;
     
    94103
    95104    my @dates;
    96105    while ($alert = shift @$alerts) {
    97         push @dates, $alert->{'cap:sent'};
    98         while ($info = shift @{$alert->{'cap:info'}}) {
     106        push @dates, $alert->{'updated'};
     107        while ($info = shift @{$alert->{'entry'}}) {
    99108            if ($info->{'cap:effective'} &&
    100                 Date_Cmp($date, "$info->{'cap:effective'}") >= 0 &&
    101                 Date_Cmp($date, "$info->{'cap:expires'}") < 0 &&
    102                 (!$geo || $info->{'cap:geocode'} == $geo)) {
     109                Date_Cmp($date, $info->{'cap:effective'}) >= 0 &&
     110                Date_Cmp($date, $info->{'cap:expires'}) < 0 &&
     111                (!$geo || $info->{'cap:geocode'}{int $geo})) {
    103112                push @results, $info;
    104113            }
    105114        }
     
    182191my ($updatetime, @warnings) = getEffectiveWarnings("now", $state, $loc);
    183192
    184193foreach my $warning (@warnings) {
    185     my $txt = $warning->{'cap:description'};
     194    my $txt = $warning->{'summary'};
    186195    for my $line (split /\n/, $txt) {
    187196        print "alerts::$line\n" if ($line =~ m/\w+/);
    188197    }