Business::UPS

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
UPS(3)		     User Contributed Perl Documentation	       UPS(3)



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";

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

	 # ’Delivered’ or ’In-transit’
	 print "This package is $track{Current Status}\n";

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 (see product-codes.txt)
	 2. Origin Zip Code
	 3. Destination Zip Code
	 4. Weight of Package

       and optionally:

	 5.  Country Code, (see country-codes.txt)
	 6.  Rate Chart (drop-off, pick-up, etc - see below)
	 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   Origin Zip(tm) Code

	   Origin Zip Code as a number or string (NOT +4 Format)

       3   Destination Zip(tm) Code

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

       4   Weight

	   Weight of the package in pounds

       5   Country

	   Defaults to US

       6   Rate Chart

	   How does the package get to UPS:

	   Can be one of the following:

	      Regular Daily Pickup
	      On Call Air
	      One Time Pickup
	      Letter Center
	      Customer Counter

ARGUMENTS for UPStrack()
       The tracking number.

	 use Business::UPS;
	 %t = UPStrack("1ZX29W290250xxxxxx");
	 print "This package is $track{Current Status}\n";

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’
	     ’Scanning’		   => (See next paragraph)

	   Notice the key ’Scanning’ is a newline (\n) delineated list of
	   scanning locations.	Each line has two parts: 1. Time/Date of scan
	   and 2. Type of scan.	 In its scalar context, it looks like this:

	     1-22-19982:58 PM NEWPORT NEWS-OYSTER, VA US = DELIVERED
	     1-21-199811:37 PM RICHMOND, VA US = LOCATION SCAN
	     2:05 PM PHILA AIR HUB, PA US = LOCATION SCAN
	     1-20-199811:35 PM PHILA AIR HUB, PA US = LOCATION SCAN

	   ...but a line or two of code can make it very usable like this:

	     foreach $line (split "\n", $track{Scanning}) {
	       my ($location, $type) = split /=/, $line;
	       print "At $location, the shipment was $type\n";
	     }

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");
	     $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";
	     }

BUGS
       Let me know.

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.

SEE ALSO
       perl(1).



perl v5.8.8			  1999-02-22			       UPS(3)