Created
August 26, 2020 00:53
-
-
Save dlareau/c28c54937a16fdd7edac5bda9b8e936d to your computer and use it in GitHub Desktop.
fetchGameData
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
import json | |
import sseclient | |
def getGameDay(): | |
response = requests.get("https://www.blaseball.com/events/streamGameData", stream=True) | |
client = sseclient.SSEClient(response) | |
singleEvent = next(client.events()) | |
client.close() | |
sim = json.loads(singleEvent.data)["value"]["sim"] | |
return (sim["season"], sim["day"]) | |
def loadGameData(): | |
gameDates = [] | |
try: | |
with open("games_data.json", "r") as f: | |
gameData = [] | |
lines = f.read().split("\n") | |
for line in lines: | |
if(line != ""): | |
game = json.loads(line) | |
gameData.append(game) | |
gameDates.append((game["season"], game["day"])) | |
except FileNotFoundError: | |
gameData = [] | |
try: | |
with open("update_data.json", "r") as f: | |
updateData = json.loads(f.read()) | |
except FileNotFoundError: | |
updateData = {"lastDate": (0, -1)} | |
updateData["gameDates"] = gameDates | |
return (gameData, updateData) | |
def saveGameData(gameData, updateData): | |
with open("games_data.json", "w") as f: | |
for game in gameData: | |
f.write(json.dumps(game) + "\n") | |
with open("update_data.json", "w") as f: | |
f.write(json.dumps(updateData)) | |
if __name__ == "__main__": | |
print("Loading data") | |
gameData, updateData = loadGameData() | |
lastDate = updateData["lastDate"] | |
print(f"Last date found was season {lastDate[0] + 1}, day {lastDate[1] + 1}") | |
currDate = getGameDay() | |
print(f"Current date is season {currDate[0] + 1}, day {currDate[1] + 1}") | |
# Find out which day's we're missing | |
missingDays = [] | |
if(lastDate[0] < currDate[0]): | |
for season in range(lastDate[0], currDate[0]): | |
if(season == lastDate[0]): | |
lastDay = lastDate[1] | |
else: | |
lastDay = 0 | |
for day in range(lastDay, 115): | |
missingDays.append((season, day)) | |
lastDay = -1 | |
if(lastDate[0] == currDate[0]): | |
lastDay = lastDate[1] | |
for day in range(lastDay + 1, currDate[1]): | |
missingDays.append((currDate[0], day)) | |
print(f"It appears we're missing {len(missingDays)} days.") | |
if(len(missingDays) > 0): | |
print("Attempting to fetch intermediate games.") | |
for date in missingDays: | |
print(f"Fetching season {date[0] + 1}, day {date[1] + 1}") | |
if(date in updateData["gameDates"]): | |
print("Odd... we already have that day? Replacing it for safety.") | |
gameData = [game for game in gameData if (game["season"] != date[0] or game["day"] != date[1])] | |
result = requests.get(f'https://www.blaseball.com/database/games?day={date[1]}&season={date[0]}') | |
for game in result.json(): | |
gameData.append(game) | |
updateData["lastDate"] = date | |
updateData["gameDates"].append(date) | |
saveGameData(gameData, updateData) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment