work around missing id, RT#83146
[freeside.git] / FS / bin / freeside-msa-import
1 #!/usr/bin/perl -w
2
3 use strict;
4 use Getopt::Std;
5 use FS::UID qw(adminsuidsetup);
6 use FS::Conf;
7 use FS::Record qw(qsearch qsearchs dbh);
8 use LWP::Simple;
9 use Data::Dumper;
10
11 &untaint_argv;  #what it sounds like  (eww)
12 use vars qw(%opt);
13
14 my $user = shift or die &usage;
15 my $dbh = adminsuidsetup $user;
16
17 my $content = get("http://www.census.gov/population/www/metroareas/lists/2009/List1.txt");
18 my @content = split(/\n/,$content);
19
20 my $sql = 'insert into msa (msanum, description) values ';
21 my @sql;
22 foreach my $row ( @content ) {
23     next unless $row =~ /^([0-9]{5})\s+([A-Za-z, \-]{5,80}) .{3}ropolitan Statistical Area/;
24     push @sql, "( $1, '$2')";
25 }
26 $sql .= join(',',@sql);
27
28 my $sth = $dbh->prepare('delete from msa');
29 $sth->execute or die $sth->errstr;
30
31 $sth = $dbh->prepare($sql);
32 $sth->execute or die $sth->errstr;
33
34 $dbh->commit;
35
36 ###
37 # subroutines
38 ###
39
40 sub untaint_argv {
41   foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
42     #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
43     # Date::Parse
44     $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
45     $ARGV[$_]=$1;
46   }
47 }
48
49 sub usage {
50   die "Usage:\n  freeside-msa-import user \n";
51 }
52
53 ###
54 # documentation
55 ###
56
57 =head1 NAME
58
59 freeside-msa-import - Pull MSA data from census.gov and insert into MSA table
60
61 =head1 SYNOPSIS
62
63   freeside-msa-import user
64
65 =head1 DESCRIPTION
66
67 user - name of an internal Freeside user
68
69 =head1 SEE ALSO
70
71 L<FS::msa>
72
73 =cut
74