Skip to content

Instantly share code, notes, and snippets.

@jeffwecan
Created May 29, 2024 17:58
Show Gist options
  • Save jeffwecan/12451b099de1b37e66531d85af41fe77 to your computer and use it in GitHub Desktop.
Save jeffwecan/12451b099de1b37e66531d85af41fe77 to your computer and use it in GitHub Desktop.
Grabs a list of matches from MLS API and dumps it into a Google Docs spreadsheet.
#!/usr/bin/env python
import json
from datetime import date
import click
import gspread
import requests
from logzero import logger
@click.command()
@click.option("--schedule-year", default=date.today().year)
def schedule_to_sheets(schedule_year):
logger.info("Attempting login to Google Sheets...")
gc = (
gspread.oauth()
) # ref: https://docs.gspread.org/en/v6.0.0/oauth2.html#for-end-users-using-oauth-client-id
spreadsheet_name = "austin_fc_schedules"
try:
spreadsheet = gc.open(spreadsheet_name)
except gspread.exceptions.SpreadsheetNotFound as err:
logger.debug(f"{err=}")
spreadsheet = gc.create(spreadsheet_name)
logger.info(f"Working with spreadsheet at: {spreadsheet.url}")
date_from = f"{schedule_year}-01-01"
date_to = f"{schedule_year+1}-01-01"
schedule_url = "https://sportapi.austinfc.com/api/matches"
query_params = dict(
dateFrom=date_from,
dateTo=date_to,
culture="en-us",
clubOptaId="15296",
)
schedule_resp = requests.get(
url=schedule_url,
params=query_params,
)
logger.debug(f"{schedule_resp.request.url=}")
logger.debug(f"{schedule_resp=}")
matches = schedule_resp.json()
logger.info(f"{len(matches)} retrieved!")
headers = matches[0].keys()
logger.debug(f"{headers=}")
try:
worksheet = spreadsheet.worksheet(str(schedule_year))
except gspread.exceptions.WorksheetNotFound as err:
logger.debug(f"{err=}")
worksheet = spreadsheet.add_worksheet(
title=str(schedule_year), rows=len(matches), cols=len(headers)
)
logger.info("Setting worksheet headers...")
for header_num, header in enumerate(headers):
worksheet.update_cell(row=1, col=header_num + 1, value=header)
sheet_rows = list()
for match in matches:
temp = []
for header in headers:
cell_value = match.get(header)
temp.append(json.dumps(cell_value))
sheet_rows.append(temp)
matches_range = f"{gspread.utils.rowcol_to_a1(2, 1)}:{gspread.utils.rowcol_to_a1(len(matches)+1, len(headers))}"
logger.debug(f"{matches_range=}")
worksheet.update(
range_name=matches_range,
values=sheet_rows,
)
if __name__ == "__main__":
schedule_to_sheets()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment