66from requests import Session
77
88from usps .timezones import LOCAL_TIMEZONE
9- from usps .tracking import USER_AGENT , Package , Step , StatusNotAvailable
9+ from usps .tracking import Package , Step , StatusNotAvailable
1010
1111# Handle mapping
12- UPS_CMS_MAPPINGS = {
13- "cms.stapp.jan" : "January" ,
14- "cms.stapp.feb" : "February" ,
15- "cms.stapp.mar" : "March" ,
16- "cms.stapp.apr" : "April" ,
17- "cms.stapp.may" : "May" ,
18- "cms.stapp.jun" : "June" ,
19- "cms.stapp.jul" : "July" ,
20- "cms.stapp.aug" : "August" ,
21- "cms.stapp.sep" : "September" ,
22- "cms.stapp.oct" : "October" ,
23- "cms.stapp.nov" : "November" ,
24- "cms.stapp.dec" : "December"
25- }
2612UPS_MILESTONE_MAPPINGS = {
2713 "we have your package" : "Has Package" ,
2814 "departed from facility" : "Left Facility" ,
3117 "out for delivery" : "Delivering"
3218}
3319
34- # Headers that need to exist for UPS to respond
35- # I'm not sure why they check *these* headers, but ¯\_(ツ)_/¯
36- UPS_HEADERS = {
37- "Accept-Encoding" : "gzip, deflate, br, zstd" ,
38- "Accept-Language" : "en-US,en;q=0.5" ,
39- "Sec-Fetch-Dest" : "document" ,
40- "Sec-Fetch-Site" : "none" ,
41- "Sec-Fetch-User" : "?1" ,
42- "Sec-GPC" : "1" ,
43- "User-Agent" : USER_AGENT ,
44- }
45-
4620# Main class
4721class UPSTracking :
4822 _session : Session | None = None
@@ -59,12 +33,12 @@ def track_package(cls, tracking_number: str) -> Package:
5933
6034 try :
6135 if not cls ._session .cookies :
62- cls ._session .get ("https://www.ups.com/track" , headers = UPS_HEADERS , timeout = 1 )
36+ cls ._session .get ("https://www.ups.com/track" , timeout = 1 )
6337
6438 response = cls ._session .post (
6539 "https://webapis.ups.com/track/api/Track/GetStatus?loc=en_US" ,
6640 json = {"Locale" : "en_US" , "TrackingNumber" : [tracking_number ]},
67- headers = UPS_HEADERS | {
41+ headers = {
6842 "X-XSRF-TOKEN" : cls ._session .cookies ["X-XSRF-TOKEN-ST" ]
6943 },
7044 timeout = 1
@@ -87,9 +61,11 @@ def track_package(cls, tracking_number: str) -> Package:
8761 estimated_delivery = None
8862 if data ["scheduledDeliveryDateDetail" ]:
8963 delivery = data ["scheduledDeliveryDateDetail" ]
90- month , year = UPS_CMS_MAPPINGS [delivery ["monthCMSKey" ]], datetime .now ().year
9164 estimated_delivery = [
92- datetime .strptime (f"{ month } { delivery ['dayNum' ]} { time .replace ('.' , '' )} " , "%B %d %I:%M %p" ).replace (year = year )
65+ datetime .strptime (
66+ f"{ delivery ['monthCMSKey' ].split ('.' )[- 1 ]} { delivery ['dayNum' ]} { time .replace ('.' , '' )} " ,
67+ "%b %d %I:%M %p"
68+ ).replace (year = datetime .now ().year )
9369 for time in data ["packageStatusTime" ].split (" - " )
9470 ]
9571
0 commit comments