NAME

Business::UPS - A UPS Interface Module

SYNOPSIS

use Business::UPS;

my ($shipping,$ups_zone,$error) = getUPS(qw/GNDCOM 23606 23607 50/);
$error and die "ERROR: $error\n";
print "Shipping is \$$shipping\n";
print "UPS Zone is $ups_zone\n";

%t = UPStrack("z10192ixj29j39");
*scan = $t{scan};
$t{error} and die "ERROR: $t{error};
print "This package is $t{'Current Status'}\n"; # 'Delivered' or 'In-transit'

DESCRIPTION

A way of sending four arguments to a module to get 
shipping charges that can be used in, say, a CGI.

REQUIREMENTS

I've tried to keep this package to a minimum, so you'll need:
  • Perl 5.003 or higher

  • LWP Module

ARGUMENTS for getUPS()

Call the subroutine with the following values:
	1. Product code
	2. Origin Zip Code
	3. Destination Zip Code
	4. Weight of Package

and optionally:

	5.  Country Code,
	6.  Length,
	7.  Width,
	8.  Height,
	9.  Oversized (defined if oversized), and
	10. COD (defined if C.O.D.)
  1. Product Codes:
    
    	  1DM		Next Day Air Early AM
    	  1DML		Next Day Air Early AM Letter
    	  1DA		Next Day Air
    	  1DAL		Next Day Air Letter
    	  1DP		Next Day Air Saver
    	  1DPL		Next Day Air Saver Letter
    	  2DM		2nd Day Air A.M.
    	  2DA		2nd Day Air
    	  2DML		2nd Day Air A.M. Letter
    	  2DAL		2nd Day Air Letter
    	  3DS		3 Day Select
    	  GNDCOM	Ground Commercial
    	  GNDRES	Ground Residential
    	  XPR		Worldwide Express
    	  XDM		Worldwide Express Plus
    	  XPRL		Worldwide Express Letter
    	  XDML		Worldwide Express Plus Letter
    	  XPD		Worldwide Expedited
    
    
    In an HTML "option" input it might look like this:
    
    	  <OPTION VALUE="1DM">Next Day Air Early AM
    	  <OPTION VALUE="1DML">Next Day Air Early AM Letter
    	  <OPTION SELECTED VALUE="1DA">Next Day Air
    	  <OPTION VALUE="1DAL">Next Day Air Letter
    	  <OPTION VALUE="1DP">Next Day Air Saver
    	  <OPTION VALUE="1DPL">Next Day Air Saver Letter
    	  <OPTION VALUE="2DM">2nd Day Air A.M.
    	  <OPTION VALUE="2DA">2nd Day Air
    	  <OPTION VALUE="2DML">2nd Day Air A.M. Letter
    	  <OPTION VALUE="2DAL">2nd Day Air Letter
    	  <OPTION VALUE="3DS">3 Day Select
    	  <OPTION VALUE="GNDCOM">Ground Commercial
    	  <OPTION VALUE="GNDRES">Ground Residential
  2. 2. Origin Zip(tm) Code

    Origin Zip Code as a number or string (NOT +4 Format)
  3. 3. Destination Zip(tm) Code

    Destination Zip Code as a number or string (NOT +4 Format)
  4. 4. Weight

    Weight of the package in pounds

ARGUMENTS for UPStrack()

The tracking number.

RETURN VALUES

getUPS()
The raw http get() returns a list with the following values:

  ##  Desc		Typical Value
  --  ---------------   -------------
  0.  Name of server: 	UPSOnLine3
  1.  Product code:	GNDCOM
  2.  Orig Postal:	23606
  3.  Country:		US
  4.  Dest Postal:	23607
  5.  Country:		US
  6.  Shipping Zone:	002
  7.  Weight (lbs):	50
  8.  Sub-total Cost:	7.75
  9.  Addt'l Chrgs:	0.00
  10. Total Cost:	7.75
  11. ???:		-1

If anyone wants these available for some reason, let me know.
UPStrack()
The hash that's returned is like the following:
	'Delivered on' 	=> '1-22-1998 at 2:58 PM'
	'Notice' 	=> 'UPS authorizes you to use UPS...'
	'Received by'	=> 'DR PORCH'
	'Addressed to'	=> 'NEWPORT NEWS, VA US'
	'scan'		=>  HASH(0x146e0c) (more later...)
	'Current Status'=> 'Delivered'
	'Delivered to'	=> 'RESIDENTIAL'
	'Sent on'	=> '1-20-1998'
	'UPS Service'	=> '2ND DAY AIR'
	'Tracking Number' => '1ZX29W29025xxxxxx'

Notice the %hash{scan} is a reference to another hash for
the scanning information and is like the following:
	'1-22-19982:58 PMNEWPORT NEWS-OYSTER, VA US' => 'DELIVERED'
	'1-21-199811:37 PMRICHMOND, VA US'	     => 'LOCATION SCAN'
	'2:05 PMPHILA AIR HUB, PA US' 		     => 'LOCATION SCAN'
	'1-20-199811:35 PMPHILA AIR HUB, PA US'	     => 'LOCATION SCAN'

EXAMPLE

getUPS()
To retreive the shipping of a 'Ground Commercial' Package 
weighing 25lbs. sent from 23001 to 24002 this package would 
be called like this:

  #!/usr/local/bin/perl

  use Business::UPS;

  my ($shipping,$ups_zone,$error) = getUPS(qw/GNDCOM 23001 23002 25/);
  $error and die "ERROR: $error\n";
  print "Shipping is \$$shipping\n";
  print "UPS Zone is $ups_zone\n";
UPStrack()
#!/usr/local/bin/perl

use Business:UPS;

%t = UPStrack("z10192ixj29j39");
*scan = $t{scan};
$t{error} and die "ERROR: $t{error};

print "This package is $t{'Current Status'}\n"; # 'Delivered' or 'In-transit'
print "More info:\n";
foreach $key (keys %t) {
	print "KEY: $key = $t{$key}\n";
}
foreach $key (keys %scan) {
	print "SCANKEY $key = $scan{$key}\n";
}

BUGS

* I don't like the way the scanning information is returned.  It's not
in chronological order, and the way the html tags are removed, the city
and am/pm is not spaced.

AUTHOR

Mark Solomon <msolomon@seva.net>
mailto:msolomon@seva.net
http://www.seva.net/~msolomon/

NOTE: UPS is a registered trademark of United Parcel Service.

10 POD Errors

The following errors were encountered while parsing the POD:

Around line 160:

=back doesn't take any parameters, but you said =back 4

Around line 179:

'=item' outside of any '=over'

Around line 219:

Expected '=item 2'

Around line 224:

Expected '=item 3'

Around line 229:

Expected '=item 4'

Around line 235:

You forgot a '=back' before '=head1'

Around line 242:

'=item' outside of any '=over'

Around line 284:

You forgot a '=back' before '=head1'

Around line 286:

'=item' outside of any '=over'

Around line 321:

You forgot a '=back' before '=head1'