File Coverage

blib/lib/Business/US/USPS/WebTools/CityStateLookup.pm
Criterion Covered Total %
statement 20 37 54.0
branch n/a
condition 0 2 0.0
subroutine 7 13 53.8
pod 1 1 100.0
total 28 53 52.8


line stmt bran cond sub pod time code
1 1     1   1119 use v5.10;
  1         3  
2 1     1   6 use utf8;
  1         2  
  1         7  
3              
4             package Business::US::USPS::WebTools::CityStateLookup;
5 1     1   41 use strict;
  1         2  
  1         28  
6 1     1   13 no warnings 'uninitialized';
  1         2  
  1         41  
7              
8 1     1   4 use parent qw(Business::US::USPS::WebTools);
  1         2  
  1         4  
9              
10 1     1   55 use subs qw();
  1         2  
  1         22  
11 1     1   5 use vars qw($VERSION);
  1         2  
  1         362  
12              
13             $VERSION = '1.12_01';
14              
15             =encoding utf8
16              
17             =head1 NAME
18              
19             Business::US::USPS::WebTools::CityStateLookup - lookup a City and State by Zip Code
20              
21             =head1 SYNOPSIS
22              
23             use Business::US::USPS::WebTools::AddressStandardization;
24              
25             my $looker_upper = Business::US::USPS::WebTools::CityStateLookup->new( {
26             UserID => $ENV{USPS_WEBTOOLS_USERID},
27             Password => $ENV{USPS_WEBTOOLS_PASSWORD},
28             Testing => 1,
29             } );
30              
31             my $hash = $looker_upper->lookup_city_state(
32             );
33              
34             if( $looker_upper->is_error )
35             {
36             warn "Oh No! $looker_upper->{error}{description}\n";
37             }
38             else
39             {
40             print join "\n", map { "$_: $hash->{$_}" }
41             qw(FirmName Address1 Address2 City State Zip5 Zip4);
42             }
43              
44              
45             =head1 DESCRIPTION
46              
47             *** THIS IS ALPHA SOFTWARE ***
48              
49             This module implements the Address Standardization web service from the
50             US Postal Service. It is a subclass of Business::US::USPS::WebTools.
51              
52             =cut
53              
54             =over 4
55              
56             =cut
57              
58 0     0     sub _fields { qw( FirmName Address1 Address2 City State Zip5 Zip4 ) }
59 0     0     sub _required { qw( Address2 City State ) }
60              
61             =item lookup_city_state( KEY, VALUE, ... )
62              
63             The C method takes the following keys, which come
64             directly from the USPS web service interface:
65              
66             FirmName The name of the company
67             Address1 The suite or apartment
68             Address2 The street address
69             City The name of the city
70             State The two letter state abbreviation
71             Zip5 The 5 digit zip code
72             Zip4 The 4 digit extension to the zip code
73              
74             It returns an anonymous hash with the same keys, but the values are
75             the USPS's canonicalized address. If there is an error, the hash values
76             will be the empty string, and the error flag is set. Check is with C:
77              
78             $verifier->is_error;
79              
80             See the C documentation in Business::US::USPS::WebTools for more
81             details on error information.
82              
83             =cut
84              
85             sub lookup_city_state {
86 0     0 1   my( $self, $zip_code ) = @_;
87              
88 0           $self->_make_url( { Zip5 => $zip_code } );
89              
90 0           $self->_make_request;
91              
92 0           $self->_parse_response;
93             }
94              
95              
96 0     0     sub _api_name { "CityStateLookup" }
97              
98             sub _make_query_xml {
99 0     0     my( $self, $hash ) = @_;
100              
101 0           my $user = $self->userid;
102 0           my $pass = $self->password;
103              
104 0           my $xml =
105             qq|| .
106             qq|$$hash{Zip5}| .
107             qq||;
108              
109             }
110              
111             sub _parse_response {
112 0     0     my( $self ) = @_;
113             #require 'Hash::AsObject';
114              
115 0           my %hash = ();
116 0           foreach my $field ( $self->_fields ) {
117 0           my( $value ) = $self->response =~ m|<$field>(.*?)|g;
118              
119 0   0       $hash{$field} = $value || '';
120             }
121              
122 0           bless \%hash, ref $self; # 'Hash::AsObject';
123             }
124              
125             =back
126              
127             =head1 TO DO
128              
129             =head1 SEE ALSO
130              
131             L
132              
133             The WebTools API is documented on the US Postal Service's website:
134              
135             https://www.usps.com/business/web-tools-apis/address-information-api.pdf
136              
137             =head1 SOURCE AVAILABILITY
138              
139             This source is in GitHub:
140              
141             https://github.com/briandfoy/business-us-usps-webtools
142              
143             =head1 AUTHOR
144              
145             brian d foy, C<< >>
146              
147             =head1 COPYRIGHT AND LICENSE
148              
149             Copyright © 2006-2016, brian d foy . All rights reserved.
150              
151             This program is free software; you can redistribute it and/or modify
152             it under the same terms as Perl itself.
153              
154             =cut
155              
156             1;