Skip to content

Instantly share code, notes, and snippets.

@dlareau
Created August 26, 2020 00:53
Show Gist options
  • Save dlareau/c28c54937a16fdd7edac5bda9b8e936d to your computer and use it in GitHub Desktop.
Save dlareau/c28c54937a16fdd7edac5bda9b8e936d to your computer and use it in GitHub Desktop.
fetchGameData
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