Skip to content

Instantly share code, notes, and snippets.

@bertramm
Forked from ajinux/README.md
Last active December 27, 2021 00:38
Show Gist options
  • Save bertramm/9a96a7c7739727c83084505a9d875d35 to your computer and use it in GitHub Desktop.
Save bertramm/9a96a7c7739727c83084505a9d875d35 to your computer and use it in GitHub Desktop.
This python script scrapes the fedex website and outputs the package details on giving the package tracking id as input
#!/usr/bin/python
#python3
import requests
import datetime
import json
def attach_day(dt):
# dt format 7/24/2017
month, day, year = (int(x) for x in dt.split('/'))
date = datetime.date(year, month, day)
mdy = dt.split('/')
# format Mon 24/7/2017
return date.strftime('%A')[:3] + ' ' + '/'.join([mdy[1], mdy[0], mdy[2]])
def get_standard_time(tm):
# tm format 4:21 pm
tm = tm.strip()
if tm[5:] == 'am':
return tm
hour = int(tm.split(':')[0])
if hour != 12:
hour = hour + 12
time = str(hour) + ':' + tm.split(':')[1].split(' ')[0]
# format time 16:21
return time
def get_package_details(track_no):
try:
s = requests.Session()
response = s.get('https://www.ups.com/track?loc=en_US&requester=ST/')
xsrf_token_header = s.cookies.get_dict()['X-XSRF-TOKEN-ST']
xsrf_token_cookie = s.cookies.get_dict()['X-CSRF-TOKEN']
header = {
'Origin': 'https://www.ups.com',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/59.0.3071.115 Safari/537.36',
'Content-Type': 'application/json',
'Accept': 'application/json, text/plain, */*',
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'https://www.ups.com/track?loc=en_US&requester=QUIC&tracknum=%s/trackdetails' % (
str(track_no)),
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9',
'x-xsrf-token': xsrf_token_header
}
data_dict = {
"Locale":"en_US",
"TrackingNumber":[ str(track_no)],
"Requester":"quic",
"returnToValue":""
}
data = json.dumps(data_dict)
s.cookies.set('X-CSRF-TOKEN',xsrf_token_cookie)
url = "https://www.ups.com/track/api/Track/GetStatus?loc=en_US"
print ("Sending request ...")
response = s.post(url, data=data, headers=header)
if response.status_code == 200:
print ("response received successfully\n")
else:
print ("request failed, error code : ",response.status_code)
res_json = response.json()
print(res_json["trackDetails"][0])
print(res_json["trackDetails"][0]["requestedTrackingNumber"])
print(res_json["trackDetails"][0]["packageStatus"])
print(res_json["trackDetails"][0]["deliveredDate"])
print(res_json["trackDetails"][0]["deliveredTime"])
if res_json["trackDetails"][0]["errorCode"] != None:
print( res_json["trackDetails"][0]["errorCode"] )
# exists the function if package id is wrong
return
key_status = res_json["trackDetails"][0]["packageStatus"]
# changes the scheduled delivery date and time w.r.t status
if key_status == "On the Way":
pass
schld_deli = attach_day(res_json["trackDetails"][0]['scheduledDeliveryDate'])
else:
schld_deli = attach_day(
res_json["trackDetails"][0]["deliveredDate"]) + " " + get_standard_time(
res_json["trackDetails"][0]["deliveredTime"])
result = {
'tracking_no': track_no,
'ship date': attach_day(res_json["trackDetails"][0]["additionalInformation"]["shippedOrBilledDate"]),
'status': key_status,
'scheduled delivery': schld_deli
}
return result
except Exception as e:
print ('Error occurred : \n Error Message: ' + str(e))
track_id = input('Enter the tracking no : ')
print (get_package_details(track_id) )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment