use LWP::Simple; use CGI; use CGI::Carp qw(fatalsToBrowser); use Text::CSV_XS; use Business::UPS; my $q = new CGI; my $fedex_url = "http://www.fedex.com/cgi-bin/tracking?action=track&initial=x"; my $language="english"; my $country_code = "us"; my $order_num = $q->param('order_num'); my $csv_file = "C:\\InetPub\\wwwroot\\cgi-bin\\tracker.csv"; my $return_code,$message,$date,$time,$note; print $q->header; print qq(); if ($order_num) { my ($track_type,$track_num) = &get_tracking_num($order_num); if (!$track_num) { print qq(Invalid order number
); } else { if ($track_type eq 'fedex') { ($return_code,$message,$date,$time,$note) = &parse_fedex_html($track_num); } elsif ($track_type eq 'ups') { ($return_code,$message,$note) = &parse_ups_data($track_num); } if ($return_code == 0) { print qq(Invalid tracking number
); } else { print "Last updated: $date, $time
" if $date && $time; print "Package was last scanned in: $message $note\n"; } } } &print_form; print qq(); sub get_tracking_num { my $order_num = shift; open(CSV,$csv_file) || die "Cannot open $csv_file for read: $!"; my $csv = new Text::CSV_XS; while () { $csv->parse($_); my ($order,$fedex,$ups) = $csv->fields; if ($order eq $order_num) { if ($fedex) { return "fedex",$fedex; } else { return "ups",$ups; } } } return 0; } sub parse_fedex_html { my $track_num = shift; my $url = $fedex_url . "&language=$language&cntry_code=$country_code&tracknumbers=$track_num"; my $page = get ($url); return 0,0 if $page =~ /Invalid/i; my $record; $page =~ m|CLASS="resultstableheader".*?(.*?)|gis; my $results = $1; $col_match = "(.*?)"; $record_match = ".*?$col_match.*?$col_match.*?$col_match"; $results =~ m|(.*?)|gis; my $record = $1; $record =~ s/ / /g; $record =~ m|$record_match|gis; my $message = $1; my $datetime = $2; my $note = $3; $datetime =~ m|(\d\d/\d\d/\d\d\d\d)\s+(\d\d:\d\d)|; my $date = $1; my $time = $2; return 1,$message,$date,$time,$note; } sub parse_ups_data { my $track_num = shift; %track = UPStrack($track_num); return 0 if $track{'error'}; my $message = $track{'Last Scanned at'}; my $note; return 1,$message,$note; } sub print_form { print qq(
Please enter your order number:
); }