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