Add a script to track status of FedEx packages - localbin - leot's localbin (~/bin)
 (HTM) hg clone https://bitbucket.org/iamleot/localbin
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) changeset d3bdacb262d155ce0f6e4e2b0864f18d6aa8f84a
 (DIR) parent 3c3da635be1b30099c7a74d45272255ec4eb26bb
 (HTM) Author: Leonardo Taccari <iamleot@gmail.com>
       Date:   Thu, 17 Oct 2019 16:13:27 
       
       Add a script to track status of FedEx packages
       
       Diffstat:
        fedextrack |  64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        1 files changed, 64 insertions(+), 0 deletions(-)
       ---
       diff -r 3c3da635be1b -r d3bdacb262d1 fedextrack
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/fedextrack        Thu Oct 17 16:13:27 2019 +0200
       @@ -0,0 +1,64 @@
       +#!/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