fix quotations, RT#21103
[freeside.git] / bin / megapop.pl
1 #!/usr/bin/perl -Tw
2 #
3 # this will break when megapop changes the URL or format of their listing page.
4 # that's stupid.  perhaps they can provide a machine-readable listing?
5
6 use strict;
7 use LWP::UserAgent;
8 use FS::UID qw(adminsuidsetup);
9 use FS::svc_acct_pop;
10
11 my $url = "http://www.megapop.com/location.htm";
12
13 my $user = shift or die &usage;
14 adminsuidsetup($user);
15
16 my %state2usps = &state2usps;
17 $state2usps{'WASHINGTON STATE'} = 'WA'; #megapop's on crack
18 $state2usps{'CANADA'} = 'CANADA'; #freeside's on crack
19
20 my $ua = new LWP::UserAgent;
21 my $request = new HTTP::Request('GET', $url);
22 my $response = $ua->request($request);
23 die $response->error_as_HTML unless $response->is_success;
24 my $line;
25 my $usps = '';
26 foreach $line ( split("\n", $response->content) ) {
27   if ( $line =~ /\W(\w[\w\s]*\w)\s+LOCATIONS/i ) {
28     $usps = $state2usps{uc($1)}
29       or warn "warning: unknown state $1\n";
30   } elsif ( $line =~ /(\d{3})\-(\d{3})\-(\d{4})\s+(\w[\w\s]*\w)/ ) {
31     print "$1 $2 $3 $4 $usps\n";
32     my $svc_acct_pop = new FS::svc_acct_pop ( {
33       'city' => $4,
34       'state' => $usps,
35       'ac' => $1,
36       'exch' => $2,
37     } );
38     my $error = $svc_acct_pop->insert;
39     die $error if $error;
40   }
41 }
42
43 sub usage {
44   die "Usage:\n  $0 user\n";
45 }
46
47 sub state2usps{ (
48   'ALABAMA' => 'AL',
49   'ALASKA' => 'AK',
50   'AMERICAN SAMOA' => 'AS',
51   'ARIZONA' => 'AZ',
52   'ARKANSAS' => 'AR',
53   'CALIFORNIA' => 'CA',
54   'COLORADO' => 'CO',
55   'CONNECTICUT' => 'CT',
56   'DELAWARE' => 'DE',
57   'DISTRICT OF COLUMBIA' => 'DC',
58   'FEDERATED STATES OF MICRONESIA' => 'FM',
59   'FLORIDA' => 'FL',
60   'GEORGIA' => 'GA',
61   'GUAM' => 'GU',
62   'HAWAII' => 'HI',
63   'IDAHO' => 'ID',
64   'ILLINOIS' => 'IL',
65   'INDIANA' => 'IN',
66   'IOWA' => 'IA',
67   'KANSAS' => 'KS',
68   'KENTUCKY' => 'KY',
69   'LOUISIANA' => 'LA',
70   'MAINE' => 'ME',
71   'MARSHALL ISLANDS' => 'MH',
72   'MARYLAND' => 'MD',
73   'MASSACHUSETTS' => 'MA',
74   'MICHIGAN' => 'MI',
75   'MINNESOTA' => 'MN',
76   'MISSISSIPPI' => 'MS',
77   'MISSOURI' => 'MO',
78   'MONTANA' => 'MT',
79   'NEBRASKA' => 'NE',
80   'NEVADA' => 'NV',
81   'NEW HAMPSHIRE' => 'NH',
82   'NEW JERSEY' => 'NJ',
83   'NEW MEXICO' => 'NM',
84   'NEW YORK' => 'NY',
85   'NORTH CAROLINA' => 'NC',
86   'NORTH DAKOTA' => 'ND',
87   'NORTHERN MARIANA ISLANDS' => 'MP',
88   'OHIO' => 'OH',
89   'OKLAHOMA' => 'OK',
90   'OREGON' => 'OR',
91   'PALAU' => 'PW',
92   'PENNSYLVANIA' => 'PA',
93   'PUERTO RICO' => 'PR',
94   'RHODE ISLAND' => 'RI',
95   'SOUTH CAROLINA' => 'SC',
96   'SOUTH DAKOTA' => 'SD',
97   'TENNESSEE' => 'TN',
98   'TEXAS' => 'TX',
99   'UTAH' => 'UT',
100   'VERMONT' => 'VT',
101   'VIRGIN ISLANDS' => 'VI',
102   'VIRGINIA' => 'VA',
103   'WASHINGTON' => 'WA',
104   'WEST VIRGINIA' => 'WV',
105   'WISCONSIN' => 'WI',
106   'WYOMING' => 'WY',
107   'ARMED FORCES AFRICA' => 'AE',
108   'ARMED FORCES AMERICAS' => 'AA',
109   'ARMED FORCES CANADA' => 'AE',
110   'ARMED FORCES EUROPE' => 'AE',
111   'ARMED FORCES MIDDLE EAST' => 'AE',
112   'ARMED FORCES PACIFIC' => 'AP',
113 ) }
114