I thought building the dial (adjacent radar sites) data for my mobile radar site would be a tedious and entirely painful process. As it turns out, it really wasn’t that difficult. I knew the data was out there in some form, if you visit any of the radar sites on the NWS website, you get a nice dial in the upper-left part of the screen, but I couldn’t find a good text file with that information. Just when I was about to stat copying it by hand, I thought “maybe this is parseable”.
It turns out that the page is parseable, but it gets ugly at times. To get a list of all the sites, I grabbed a file from Unisys. I could extract the site, city, and state from there, so then all I needed was to grab the 8 (or fewer surrounding sites) and dump them all into a Perl hash. So I wrote a bit of code to do just that. It’s ugly, but it’s an example of what you can do when you really, really don’t want to do something by hand:
@sites = <STDIN>; foreach $site ( @sites ) { $city = substr $site, 0, 14; $city =~ s/\s{2,}/ /g; $state = substr $site, 16, 2; $id = substr $site, 24, 3; print " '$id' => ['$city, $state', "; $littleID = lc($id); $htmlCrap = `wget http://radar.weather.gov/radar.php?rid=$littleID -o /dev/null -O - | grep adjacent`; foreach ( split(/<\/td>/, $htmlCrap, 9) ) { unless ( $_ =~ /$id/ ) { if ( $_ =~ m /newpage/ ) { $dialid = $_; $dialid =~ s/.*newpage\(\'(...)'.*/\1/g; chomp ($dialid); $dialid =~ tr/a-z/A-Z/; print "\'$dialid\', "; } else { print "\'\', "; } } } print "],\n"; }