-
Notifications
You must be signed in to change notification settings - Fork 1
/
pulltba.py
100 lines (86 loc) · 2.87 KB
/
pulltba.py
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
#!/usr/bin/python3
# Nathan Gill, Team 2706: Merge Robotics
# Things to be pulled from TBA:
# Competition codes, names
# Matches (teams, number)
# Imports
import sys
import urllib.request
import json
import database
import re
# Constants
baseurl = "https://www.thebluealliance.com/api/v3/"
apikey = ""
# Read TBA API key from file
try:
with open("TBA.key") as f:
apikey = f.read().strip()
print("Using API key `%s`" % apikey)
except:
print("The `TBA.key` file is missing, please create that file and put your TBA API key inside.")
sys.exit(1)
try:
with open("merg.db") as f:
pass
except:
print("The database file is missing. please run MergServ at least once before using this tool.")
sys.exit(1)
# Generic request function
def get(url, headers):
r = urllib.request.Request(baseurl+url)
r.add_header('User-Agent', "Mergserv")
r.add_header('X-TBA-Auth-Key', apikey)
for k,v in headers.items():
r.add_headers(k, v)
try:
response = urllib.request.urlopen(r).read().decode('utf-8')
return json.loads(response)
except Exception as e:
print(e)
return False
# Make status request to verify key and get current season
status = get("status", {})
if not status:
print("There was an error making a request. This is most likely due to having an incorrect API key.")
sys.exit(1)
# Inform the user
current_season = 2018
print("Current season is %s" % current_season)
# Make request
events = get("events/%s" % current_season, {})
if not events:
print("There was an error getting the events list.")
sys.exit(1)
# Inform the user
print("Found %d events for the %s season" % (len(events), current_season))
for event in events:
# Write event to database
try:
database.insert_competition(event['key'], current_season)
except Exception as e:
# Competition was probably already in the table
print(e)
else:
# Inform user if competition was added
print("pushed event %s" % event['key'])
# Make request for matches
matches = get("event/%s/matches" % event['key'], {})
if matches == False: continue
id = 1
for match in matches:
try:
red = [int(re.sub('[^0-9]','', x)) for x in match['alliances']['red']['team_keys']]
blue = [int(re.sub('[^0-9]','', x)) for x in match['alliances']['blue']['team_keys']]
if not database.insert_match(match['match_number'], event['key'], red, blue):
sys.exit(1)
except Exception as e:
print(e)
print(event['key'])
print(match['match_number'])
print(match['alliances']['red']['team_keys'])
print(match['alliances']['blue']['team_keys'])
sys.exit(1)
else:
#print("Added match %s for event %s" % (match['match_number'], event['key']))
pass