6
6
from requests import Session
7
7
8
8
from usps .timezones import LOCAL_TIMEZONE
9
- from usps .tracking import USER_AGENT , Package , Step , StatusNotAvailable
9
+ from usps .tracking import Package , Step , StatusNotAvailable
10
10
11
11
# 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
- }
26
12
UPS_MILESTONE_MAPPINGS = {
27
13
"we have your package" : "Has Package" ,
28
14
"departed from facility" : "Left Facility" ,
31
17
"out for delivery" : "Delivering"
32
18
}
33
19
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
-
46
20
# Main class
47
21
class UPSTracking :
48
22
_session : Session | None = None
@@ -59,12 +33,12 @@ def track_package(cls, tracking_number: str) -> Package:
59
33
60
34
try :
61
35
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 )
63
37
64
38
response = cls ._session .post (
65
39
"https://webapis.ups.com/track/api/Track/GetStatus?loc=en_US" ,
66
40
json = {"Locale" : "en_US" , "TrackingNumber" : [tracking_number ]},
67
- headers = UPS_HEADERS | {
41
+ headers = {
68
42
"X-XSRF-TOKEN" : cls ._session .cookies ["X-XSRF-TOKEN-ST" ]
69
43
},
70
44
timeout = 1
@@ -87,9 +61,11 @@ def track_package(cls, tracking_number: str) -> Package:
87
61
estimated_delivery = None
88
62
if data ["scheduledDeliveryDateDetail" ]:
89
63
delivery = data ["scheduledDeliveryDateDetail" ]
90
- month , year = UPS_CMS_MAPPINGS [delivery ["monthCMSKey" ]], datetime .now ().year
91
64
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 )
93
69
for time in data ["packageStatusTime" ].split (" - " )
94
70
]
95
71
0 commit comments