-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSorareCardStatsExtractor
More file actions
102 lines (73 loc) · 3.95 KB
/
SorareCardStatsExtractor
File metadata and controls
102 lines (73 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# import requests
import xlsxwriter
from gql import Client
from gql.transport.aiohttp import AIOHTTPTransport
import json
from types import SimpleNamespace
import pandas as pd
import time
from config.const import NBA_TEAMS_SLUGS, NBA_PLAYERS_NAME_OWNED
from models.NbaPlayer import NbaPlayer
import numpy as np
from config.queris import TeamPlayersQuery, PlayerLastStatsQuery
def calculateAverageScore(lastScoresList : list) -> tuple :
#print("analyzing num of games: ", len(lastScoresList))
filterdScoresList = list(filter(lambda lastScore: (lastScore["fixture"]["fixtureState"] != "opened" and lastScore["score"] > 0), lastScoresList))
totalLastThreeScores = 0
totalLastFiveScores = 0
fixtureStatsCounter = 0
for fixtureStats in filterdScoresList:
if fixtureStatsCounter >= 5 : break
score = fixtureStats["score"]
if fixtureStatsCounter < 3:
totalLastThreeScores += score
totalLastFiveScores += score
fixtureStatsCounter += 1
#print("total games analyzed: ", len(filterdScoresList), " - last 3 scores: ", totalLastThreeScores, " - last 5 scores: ", totalLastFiveScores)
lastThreeFixtureAnalyzed = fixtureStatsCounter if fixtureStatsCounter < 3 else 3
lastFiveFixtureAnalyzed = fixtureStatsCounter if fixtureStatsCounter < 5 else 5
lastThreeScoresAverage = 0
if lastThreeFixtureAnalyzed > 0 :
lastThreeScoresAverage = round(totalLastThreeScores / lastThreeFixtureAnalyzed)
lastFiveScoresAverage = 0
if lastFiveFixtureAnalyzed > 0 :
lastFiveScoresAverage = round(totalLastFiveScores / lastFiveFixtureAnalyzed)
return (lastThreeScoresAverage, lastFiveScoresAverage)
###################################
# Script start
###################################
# api_sorare_football_base_url = "https://api.sorare.com/graphql"
api_sorare_sports_base_url = "https://api.sorare.com/sports/graphql"
transport = AIOHTTPTransport(url=api_sorare_sports_base_url)
client = Client(transport=transport, fetch_schema_from_transport=True)
print(f"\n\n Elaborating statistics for {len(NBA_PLAYERS_NAME_OWNED)} players...\n\n")
players_slugs = []
for team in NBA_TEAMS_SLUGS:
# delay due to API calls limit
time.sleep(3)
print("Getting info for team...", team)
result = client.execute(TeamPlayersQuery, variable_values={
"team": team}, get_execution_result=True)
# Getting team player's slug by player's name owned
team_players = result.data["nbaTeam"]["players"]
for player in team_players:
if player["displayName"] in NBA_PLAYERS_NAME_OWNED:
player_slug = player["slug"]
players_slugs.append(player_slug)
print(f"\n\n Found {len(players_slugs)} player's slugs!\n\n")
#splitting list in many lists of 19 elements max due to limit into 'nbaPlayers' graphql api
chunked_players_slugs_array = np.array_split(players_slugs, (int(len(players_slugs) / 19)+1))
splitted_players_slugs_list = [list(array) for array in chunked_players_slugs_array]
nbaPlayersStatsList = []
for players_slugs_list in splitted_players_slugs_list:
result = client.execute(PlayerLastStatsQuery, variable_values={"players": players_slugs_list}, get_execution_result=True)
ownedPlayers = result.data["nbaPlayers"]
for player in ownedPlayers:
lastScores = calculateAverageScore(player["latestFinalFixtureStats"])
nbaPlayerStats = NbaPlayer(player["slug"], player["team"]["name"], player["isActive"], lastScores[0], lastScores[1], player["tenGameAverage"])
nbaPlayersStatsList.append(nbaPlayerStats)
active_nba_players_stats_list = filter(lambda nbaPlayer: nbaPlayer.isActive, nbaPlayersStatsList)
df_players_stats = pd.DataFrame(sorted(active_nba_players_stats_list, reverse=True))
pd.set_option('display.max_rows', None)
print(df_players_stats.rename(columns={'slug': 'Player', 'team': 'Team', 'latestThreeFixtureStats': 'L3', 'latestFiveFixtureStats': 'L5', 'tenGameAverage': 'L10', 'latestThreeFixtureStatsDiff': 'L3 Diff', 'latestFiveFixtureStatsDiff': 'L5 Diff'}))
print(f"\n\n...done!\n\n")