#!/bin/sh # # Get package status via www.fedex.com # # # Given a package tracking number request its status and pretty print # information about it. # package_status() { tracking_number=$1 params='data={"TrackPackagesRequest":{"appType":"WTRK",' params=${params}'"appDeviceType":"DESKTOP","supportHTML":false,' params=${params}'"supportCurrentLocation":true,"uniqueKey":"",' params=${params}'"processingParameters":{},"trackingInfoList":' params=${params}'[{"trackNumberInfo":{"trackingNumber":' params=${params}"\"${tracking_number}\"," params=${params}'"trackingQualifier":"","trackingCarrier":""}}]}}' params=${params}'&action=trackpackages&locale=en_US&version=1' params=${params}'&format=json' curl -d "${params}" -gs "https://www.fedex.com/trackingCal/track" | json2tsv | awk -F '\t' ' BEGIN { bn = ".TrackPackagesResponse.packageList[].scanEventList[]" } $1 == bn { n++ } $1 == bn ".date" { events[n, "date"] = $3 } $1 == bn ".time" { events[n, "time"] = $3 } $1 == bn ".gmtOffset" { events[n, "gmtoffset"] = $3 } $1 == bn ".status" { events[n, "status"] = $3 } $1 == bn ".scanLocation" { events[n, "location"] = $3 } END { for (i = n; i >= 1; i--) { printf("%s %s %s\n", events[i, "date"], events[i, "time"], events[i, "gmtoffset"]) if (events[i, "location"]) printf("%s - ", events[i, "location"]) printf("%s\n", events[i, "status"]) if (i > 1) printf("\n") } } ' } if [ $# -lt 1 ]; then echo "usage: $(basename $0) tracking_number ..." exit 1 fi for t in "$@"; do package_status "$1" done