]> gb7djk.dxcluster.net Git - spider.git/blob - perl/gen_usdb_data.pl
153a560153b5ab025e503d2a92e845f707372b5c
[spider.git] / perl / gen_usdb_data.pl
1 #!/usr/bin/perl
2 #
3 # Something to create my subset of the US call book data,
4 # in my flat file form, either from the main data base or
5 # else the daily updates. 
6 #
7 # You can get the main database from: 
8 #
9 #   http://wireless.fcc.gov/uls/data/complete/l_amat.zip
10 #
11 # The daily data bases are available as a set of seven from here:-
12 #
13 #   http://wireless.fcc.gov/uls/data/daily/l_am_sat.zip 
14 #   http://wireless.fcc.gov/uls/data/daily/l_am_sun.zip 
15 #   http://wireless.fcc.gov/uls/data/daily/l_am_mon.zip 
16 #   http://wireless.fcc.gov/uls/data/daily/l_am_tue.zip 
17 #   http://wireless.fcc.gov/uls/data/daily/l_am_wed.zip 
18 #   http://wireless.fcc.gov/uls/data/daily/l_am_thu.zip 
19 #   http://wireless.fcc.gov/uls/data/daily/l_am_fri.zip
20
21 # this program expects one or more zip files containing the call book
22 # data as arguments.
23 #
24 # Copyright (c) 2002 Dirk Koopman G1TLH
25 #
26 # $Id$
27 #
28
29 use strict;
30
31 # make sure that modules are searched in the order local then perl
32 BEGIN {
33         # root of directory tree for this system
34         use vars qw($root);
35         
36         $root = "/spider"; 
37         $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'};
38
39         unshift @INC, "$root/local";
40 }
41
42 use vars qw($VERSION $BRANCH);
43 $VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
44 $BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/  || (0,0));
45 $main::build += $VERSION;
46 $main::branch += $BRANCH;
47
48 use DXVars;
49 use Archive::Zip qw(:ERROR_CODES);
50 use Archive::Zip::MemberRead;
51 use IO::File;
52 use Compress::Zlib;
53
54 my $blksize = 1024 * 1024;
55
56 STDOUT->autoflush(1);
57
58 my $dbrawfn = "$main::data/usdbraw";
59
60 rename "$dbrawfn.oo", "$dbrawfn.ooo";
61 rename "$dbrawfn.o", "$dbrawfn.oo";
62 rename "$dbrawfn", "$dbrawfn.o";
63 my $gzfh = gzopen($dbrawfn, "wb9") or die "Cannot open $dbrawfn $!";
64
65 my $ctycount;
66   
67 foreach my $argv (@ARGV) {
68         my $zip = new Archive::Zip($argv) or die "Cannot open $argv $!\n";
69         print "Doing $argv\n";
70         handleEN($zip, $argv);
71         handleAM($zip, $argv);
72         handleHS($zip, $argv);
73 }
74
75 $gzfh->gzclose;
76 print "$ctycount Cities found\n";
77
78 exit(0);
79
80 sub handleEN
81 {
82         my ($zip, $argv) = @_;
83         my $mname = "EN.dat";
84         my $ofn = "$main::data/$mname";
85         print "  Handling EN records, unzipping";
86         if ($zip->extractMember($mname, $ofn) == AZ_OK) {
87                 my $fh = new IO::File "$ofn" or die "Cannot open $ofn $!";
88                 if ($fh) {
89                         
90                         print ", storing";
91                         
92                         my $count;
93                         my $buf;
94                         
95                         while (my $l = $fh->getline) {
96                                 $l =~ s/[\r\n]+$//;
97                                 my ($rt,$usi,$ulsfn,$ebfno,$call,$type,$lid,$name,$first,$middle,$last,$suffix,
98                                         $phone,$fax,$email,$street,$city,$state,$zip,$pobox,$attl,$sgin,$frn) = split /\|/, $l;
99                                 
100                                 my $rec = uc join '|', $call,$city,$state if $city && $state;
101                                 $buf .= "$rec\n";
102                                 if (length $buf > $blksize) {
103                                         $gzfh->gzwrite($buf);
104                                         undef $buf;
105                                 }
106                                 my $c = uc "$city|$state";
107                                 $count++;
108                         }
109                         if (length $buf > $blksize) {
110                                 $gzfh->gzwrite($buf);
111                         }
112                         print ", $count records\n";
113                         $fh->close;
114                 }
115                 unlink $ofn;
116         } else {
117                 print "EN missing in $argv\n";
118                 return;
119         }
120 }
121
122 sub handleAM
123 {
124
125 }
126
127 sub handleHS
128 {
129
130 }