fedextrack - localbin - leot's localbin (~/bin)
 (HTM) hg clone https://bitbucket.org/iamleot/localbin
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       fedextrack
       ---
            1 #!/bin/sh
            2 
            3 #
            4 # Get package status via www.fedex.com
            5 #
            6 
            7 
            8 #
            9 # Given a package tracking number request its status and pretty print
           10 # information about it.
           11 #
           12 package_status()
           13 {
           14         tracking_number=$1
           15 
           16         params='data={"TrackPackagesRequest":{"appType":"WTRK",'
           17         params=${params}'"appDeviceType":"DESKTOP","supportHTML":false,'
           18         params=${params}'"supportCurrentLocation":true,"uniqueKey":"",'
           19         params=${params}'"processingParameters":{},"trackingInfoList":'
           20         params=${params}'[{"trackNumberInfo":{"trackingNumber":'
           21         params=${params}"\"${tracking_number}\","
           22         params=${params}'"trackingQualifier":"","trackingCarrier":""}}]}}'
           23         params=${params}'&action=trackpackages&locale=en_US&version=1'
           24         params=${params}'&format=json'
           25 
           26         curl -d "${params}" -gs "https://www.fedex.com/trackingCal/track" |
           27         json2tsv | awk -F '\t' '
           28         BEGIN {
           29                 bn = ".TrackPackagesResponse.packageList[].scanEventList[]"
           30         }
           31 
           32         $1 == bn                        { n++ }
           33         $1 == bn ".date"                { events[n, "date"] = $3 }
           34         $1 == bn ".time"                { events[n, "time"] = $3 }
           35         $1 == bn ".gmtOffset"           { events[n, "gmtoffset"] = $3 }
           36         $1 == bn ".status"              { events[n, "status"] = $3 }
           37         $1 == bn ".scanLocation"        { events[n, "location"] = $3 }
           38 
           39         END {
           40                 for (i = n; i >= 1; i--) {
           41                         printf("%s %s %s\n",
           42                             events[i, "date"], events[i, "time"],
           43                             events[i, "gmtoffset"])
           44                         if (events[i, "location"])
           45                                 printf("%s - ", events[i, "location"])
           46                         printf("%s\n", events[i, "status"])
           47 
           48                         if (i > 1)
           49                                 printf("\n")
           50                 }
           51         }
           52 '
           53 }
           54 
           55 
           56 if [ $# -lt 1 ]; then
           57         echo "usage: $(basename $0) tracking_number ..."
           58         exit 1
           59 fi
           60 
           61 
           62 for t in "$@"; do
           63         package_status "$1"
           64 done