2
2
3
3
# Imports
4
4
import asyncio
5
+ from datetime import datetime
5
6
import enum
6
7
import json
7
8
import requests
@@ -84,19 +85,32 @@ def login(self, ssoToken: str):
84
85
f'tfa_enrollment_seen=true;' \
85
86
f'gtm.custom.bot.flag=human;'
86
87
87
- r = requests .get (f"{ self .__common .baseUrl } { self .__common .apiPath } /crm/cod/v2/identities/{ ssoToken } " , headers = self .__common .baseHeaders )
88
+ r = requests .get (f"{ self .__common .baseUrl } { self .__common .apiPath } /crm/cod/v2/identities/{ ssoToken } " ,
89
+ headers = self .__common .baseHeaders )
88
90
89
91
if r .json ()['status' ] == 'success' :
90
92
self .__common .loggedIn = True
91
- for sub in [self .Warzone , self .ModernWarfare , self .ColdWar , self .Vanguard , self .Shop , self .Me , self .Misc ]:
93
+ for sub in [self .Warzone , self .ModernWarfare , self .ColdWar ,
94
+ self .Vanguard , self .Shop , self .Me , self .Misc ]:
92
95
sub .loggedIn = self .__common .loggedIn
93
96
sub .baseSsoToken = self .__common .baseSsoToken
94
97
sub .baseHeaders = self .__common .baseHeaders
95
98
sub .basePostHeaders = self .__common .basePostHeaders
99
+
100
+ # deleting scope data
101
+ del ssoToken , sub , r
96
102
else :
103
+ # delete scope data
104
+ del ssoToken , r
105
+
106
+ # system exit
97
107
sys .exit (InvalidToken (ssoToken ))
98
108
except Exception as e :
99
109
print (e )
110
+
111
+ # delete scope data
112
+ del ssoToken
113
+
100
114
return e
101
115
102
116
@@ -117,7 +131,10 @@ def __init__(self):
117
131
118
132
# headers & cookies
119
133
self .fakeXSRF = str (uuid .uuid4 ())
120
- self .userAgent : str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
134
+ self .userAgent : str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " \
135
+ "AppleWebKit/537.36 (KHTML, like Gecko) " \
136
+ "Chrome/74.0.3729.169 " \
137
+ "Safari/537.36"
121
138
self .baseCookie : str = "new_SiteId=cod;ACT_SSO_LOCALE=en_US;country=US;"
122
139
self .baseSsoToken : str = ''
123
140
self .baseUrl : str = "https://my.callofduty.com"
@@ -163,8 +180,15 @@ async def __Request(self, method, url):
163
180
164
181
try :
165
182
r = requests .request (method = method , url = url , headers = h , data = b )
183
+ # delete scope data
184
+ del method , url , h , b
185
+
186
+ # return data
166
187
return r
167
188
except Exception as e :
189
+ # delete scope data
190
+ del method , url , h , b
191
+
168
192
return e
169
193
170
194
async def __sendRequest (self , url : str ):
@@ -175,13 +199,23 @@ async def __sendRequest(self, url: str):
175
199
data = respond .json ()
176
200
if data ['status' ] == 'success' :
177
201
data = self .__mapping (data ['data' ])
202
+ # delete scope data
203
+ del url , respond
204
+
205
+ # return data
178
206
return data
179
207
else :
208
+ # delete scope data
209
+ del url , respond
210
+
180
211
sys .exit (StatusError ())
181
212
else :
213
+ # delete scope data
214
+ del url
215
+
182
216
return respond .status_code
183
217
else :
184
- raise NotLoggedIn
218
+ sys . exit ( NotLoggedIn ())
185
219
186
220
async def __sendPostRequest (self , url : str , body : dict ):
187
221
if self .loggedIn :
@@ -196,8 +230,8 @@ async def __sendPostRequest(self, url: str, body: dict):
196
230
raise NotLoggedIn ()
197
231
198
232
# client name url formatter
199
- def __cleanClientName (self , ganertage ):
200
- return quote (ganertage .encode ("utf-8" ))
233
+ def __cleanClientName (self , gamertag ):
234
+ return quote (gamertag .encode ("utf-8" ))
201
235
202
236
# helper
203
237
def __helper (self , platform , gamertag ):
@@ -213,24 +247,89 @@ def __helper(self, platform, gamertag):
213
247
# mapping
214
248
def __mapping (self , data ):
215
249
r = requests .get ('https://engineer152.github.io/wz-data/weapon-ids.json' )
216
- guns = r .json ()[ 'All Weapons' ]
250
+ guns = r .json ()
217
251
r = requests .get ('https://engineer152.github.io/wz-data/game-modes.json' )
218
- modes = r .json ()['modes' ]
252
+ modes = r .json ()
253
+ r = requests .get ('https://engineer152.github.io/wz-data/perks.json' )
254
+ perks = r .json ()
219
255
220
256
# guns
221
257
try :
222
- for m in data ['matches' ]:
223
- for l in m ['player' ]['loadouts' ]:
224
- if l ['primaryWeapon' ]['label' ] is None :
225
- l ['primaryWeapon' ]['label' ] = guns [l ['primaryWeapon' ]['name' ]]
226
-
227
- if l ['secondaryWeapon' ]['label' ] is None :
228
- l ['secondaryWeapon' ]['label' ] = guns [l ['secondaryWeapon' ]['name' ]]
258
+ for match in data ['matches' ]:
259
+ # time stamps
260
+ try :
261
+ match ['utcStartDateTime' ] = datetime .fromtimestamp (match ['utcStartSeconds' ]).strftime ("%A, %B %d, %Y, %I:%M:%S" )
262
+ match ['utcEndDateTime' ] = datetime .fromtimestamp (match ['utcEndSeconds' ]).strftime ("%A, %B %d, %Y, %I:%M:%S" )
263
+ except KeyError :
264
+ pass
265
+
266
+ # loadouts list
267
+ for loadout in match ['player' ]['loadouts' ]:
268
+ # weapons
269
+ if loadout ['primaryWeapon' ]['label' ] is None :
270
+ try :
271
+ loadout ['primaryWeapon' ]['label' ] = guns [loadout ['primaryWeapon' ]['name' ]]
272
+ except KeyError :
273
+ pass
274
+ if loadout ['secondaryWeapon' ]['label' ] is None :
275
+ try :
276
+ loadout ['secondaryWeapon' ]['label' ] = guns [loadout ['secondaryWeapon' ]['name' ]]
277
+ except KeyError :
278
+ pass
279
+
280
+ # perks list
281
+ for perk in loadout ['perks' ]:
282
+ if perk ['label' ] is None :
283
+ try :
284
+ perk ['label' ] = perks [perk ['name' ]]
285
+ except KeyError :
286
+ pass
287
+
288
+ # extra perks list
289
+ for perk in loadout ['extraPerks' ]:
290
+ if perk ['label' ] is None :
291
+ try :
292
+ perk ['label' ] = perks [perk ['name' ]]
293
+ except KeyError :
294
+ pass
295
+
296
+ # loadout list
297
+ for loadout in match ['player' ]['loadout' ]:
298
+ if loadout ['primaryWeapon' ]['label' ] is None :
299
+ try :
300
+ loadout ['primaryWeapon' ]['label' ] = guns [loadout ['primaryWeapon' ]['name' ]]
301
+ except KeyError :
302
+ pass
303
+ if loadout ['secondaryWeapon' ]['label' ] is None :
304
+ try :
305
+ loadout ['secondaryWeapon' ]['label' ] = guns [loadout ['secondaryWeapon' ]['name' ]]
306
+ except KeyError :
307
+ pass
308
+
309
+ # perks list
310
+ for perk in loadout ['perks' ]:
311
+ if perk ['label' ] is None :
312
+ try :
313
+ perk ['label' ] = perks [perk ['name' ]]
314
+ except KeyError :
315
+ pass
316
+
317
+ # extra perks list
318
+ for perk in loadout ['extraPerks' ]:
319
+ if perk ['label' ] is None :
320
+ try :
321
+ perk ['label' ] = perks [perk ['name' ]]
322
+ except KeyError :
323
+ pass
229
324
except KeyError :
230
325
pass
231
326
except Exception as e :
232
327
print (e )
233
328
329
+ # delete scope data
330
+ del guns , modes , perks , match , loadout , perk
331
+
332
+ # return mapped or unmapped data
234
333
return data
235
334
236
335
# API Requests
0 commit comments