· 4 years ago · Apr 03, 2021, 12:16 AM
1import http.client
2import json
3import api_key
4import pymongo
5import common_variables
6from pymongo import MongoClient
7
8### API Connection Information:
9conn = http.client.HTTPSConnection("v3.football.api-sports.io")
10headers = {
11    'x-rapidapi-host': "v3.football.api-sports.io",
12    'x-rapidapi-key': api_key.key
13    }
14
15### Mongo DB Connection Information:
16cluster = MongoClient("mongodb+srv://PL-Discbot_Admin:" + api_key.mongo_user + "@pl-discbot.2tevr.mongodb.net/PL-Discbot?retryWrites=true&w=majority")
17db = cluster["PL-Discbot"]
18collection = db["League_Table"]
19
20
21
22
23#! Find out how to make this dynamic/modula
24### Request URL Creation for Standings, league 39(PL), Season2020
25##  Request_url == Endpoint Endpoint -> League -> Season
26standings_endpoint = "/standings"
27league_url = "league=39"
28season_url = "season=2020"
29request_url = str(standings_endpoint + "?" + league_url + "&" + season_url)
30
31### Connection string to connect to API and Retrieve Data:
32conn.request("GET", request_url, headers=headers)
33#original Connection string below
34# conn.request("GET", "/standings?league=39&season=2020", headers=headers)
35
36### Gets Response from Request, stores in imported_json, unloads into var "data"
37imported_json = conn.getresponse().read()
38data = json.loads(imported_json)
39#Reponse = the actual Response rather than all data. 
40response = data["response"][0]["league"]
41#league name test
42#league_name = response["name"] + ": " + str(response["season"])
43#print(league_name)
44
45### standings navigates through reponse to provide actual data required
46standings = response["standings"][0]
47
48### Create all teams in League and assign value to None
49#teams = {"Arsenal":None, "Aston Villa":None, "Brighton":None, "Burnley":None, "Chelsea":None, "Crystal Palace":None, "Everton":None, "Fulham":None, "Leeds":None, "Leicester":None, "Liverpool":None, "Manchester City":None, "Manchester United":None, "Newcastle":None, "Sheffield Utd":None, "Southampton":None, "Tottenham":None, "West Brom":None, "West Ham":None, "Wolves":None}
50
51teams_storage_dict = {}
52for team in common_variables.teams:
53    teams_storage_dict[team] = None
54print(teams_storage_dict)
55
56
57
58
59### Creates Class Team, Takes data from standings and stores as Attribute
60class Team:
61    def __init__(self, teamName, teamID, rank, points, goaldiff, form, played, win, draw, lose, goalsFor, goalsAgainst, homePlayed, homeWin, homeDraw, homeLose, homeGoalsFor, homeGoalsAgainst, awayPlayed, awayWin, awayDraw, awayLose, awayGoalsFor, awayGoalsAgainst):
62        self.teamName = teamName
63        self.teamID = teamID
64        self.rank = rank
65        self.points = points
66        self.goalDiff = goaldiff
67        self.form = form
68        self.played = played
69        self.win = win
70        self.draw = draw
71        self.lose = lose
72        self.goalsFor = goalsFor
73        self.goalsAgainst = goalsAgainst
74        self.homePlayed = homePlayed
75        self.homeWin = homeWin
76        self.homeDraw = homeDraw
77        self.homeLose = homeLose
78        self.homeGoalsFor = homeGoalsFor
79        self.homeGoalsAgainst = homeGoalsAgainst
80        self.awayPlayed = awayPlayed
81        self.awayWin = awayWin
82        self.awayDraw = awayDraw
83        self.awayLose = awayLose
84        self.awayGoalsFor = awayGoalsFor
85        self.awayGoalsAgainst = awayGoalsAgainst
86
87    
88
89
90### Loops through each team in standings, Pulls relevant, and passes data into class contsructor 
91for dicts in standings:
92    teamName = dicts["team"]["name"]
93    teamID = dicts["team"]["id"]
94    rank = dicts["rank"]
95    points = dicts["points"]
96    goalDiff = dicts["goalsDiff"]
97    form = dicts["form"]
98    played = dicts["all"]["played"]
99    win = dicts["all"]["win"]
100    draw = dicts["all"]["draw"]
101    lose = dicts["all"]["lose"]
102    goalsFor = dicts["all"]["goals"]["for"]
103    goalsAgainst = dicts["all"]["goals"]["against"]
104    homePlayed = dicts["home"]["played"]
105    homeWin = dicts["home"]["win"]
106    homeDraw = dicts["home"]["draw"]
107    homeLose = dicts["home"]["lose"]
108    homeGoalsFor = dicts["home"]["goals"]["for"]
109    homeGoalsAgainst = dicts["home"]["goals"]["against"]
110    awayPlayed = dicts["away"]["played"]
111    awayWin = dicts["away"]["win"]
112    awayDraw = dicts["away"]["draw"]
113    awayLose = dicts["away"]["lose"]
114    awayGoalsFor =  dicts["away"]["goals"]["for"]
115    awayGoalsAgainst= dicts["away"]["goals"]["against"]
116    
117    temp_class_variable = Team(teamName, teamID, rank, points, goalDiff, form, played, win, draw, lose, goalsFor, goalsAgainst, homePlayed, homeWin, homeDraw, homeLose, homeGoalsFor, homeGoalsAgainst, awayPlayed, awayWin, awayDraw, awayLose, awayGoalsFor, awayGoalsAgainst)
118    #Assign created class to relevant team in teams dict
119    teams_storage_dict[teamName]= temp_class_variable
120
121print(teams_storage_dict)
122
123#with open("json_dump.txt", "w") as json_dump_file:
124#    json_dump_file.write(json.dumps(teams, default=lambda teams: teams.__dict__))
125#to_insert = json.dumps(teams, default=lambda teams: teams.__dict__)
126
127
128
129
130
131#for key, val in teams_storage_dict.items():
132#    collection.insert_one(val.__dict__)
133
134
135mongo_dict = {}
136for key, value in teams_storage_dict.items():
137    mongo_dict[key]=(value.__dict__)
138print("MONGO DICT IS: \n")
139print(mongo_dict)
140print("MONGO DICT ENDS: \n")
141
142for key, value in mongo_dict.items():
143    #collection.update_one({key},{value})
144    #collection.update_one({"teamName":key}, {"$set":{""}})
145    
146    #print("key is: " + str(key))
147    #print("value is: " + str(value["rank"]))
148    for inner_key, inner_value in value.items():
149        #! Change this to insert MANY
150        collection.update_one({"teamName":key}, {"$set":{inner_key:inner_value}})
151        #print("key is: " + str(key))
152        #print("inner_key is: " + str(inner_key))
153        #print("inner_value is: " + str(inner_value))
154#print(mongo_dict)
155#collection.insert_one(mongo_dict)
156#def rankings():
157#    i = 1
158#    while i < 21: 
159#        results = collection.find_one({"rank":i})
160#        print("Rank: " + str(results["rank"])) #+ "\n" + str(results["teamName"]))
161#        print(results["teamName"])
162#        print("########")
163#        i += 1
164#results = collection.find_one({"rank":1})
165#print(results["teamName"])
166#rankings()
167
168#for result in results:
169#    print(result["teamName"])
170#for result in results:
171#    print(result)
172#json.dumps(teams, default=lambda teams: teams.__dict__)
173
174#with open("json_dump.txt", "a") as json_dump_file:
175#    for key, val in teams.items():
176#        json_dump_file.write(json.dumps(val.__dict__))
177#        json_dump_file.write(",\n")
178#        test[val.team]
179        
180