blokdata/blokdata/sheet_data.py

61 lines
2 KiB
Python
Raw Normal View History

2020-05-13 00:22:29 +00:00
from apiclient.discovery import build
from httplib2 import Http
from google.oauth2 import service_account
import json
2020-05-13 13:40:40 +00:00
def get_google_sheet(spreadsheet_id, range_name):
2020-05-13 00:22:29 +00:00
""" Retrieve sheet data using OAuth credentials and Google Python API. """
credentials = service_account.Credentials.from_service_account_file('service_account.json')
scoped_credentials = credentials.with_scopes(['https://www.googleapis.com/auth/spreadsheets.readonly'])
service = build('sheets', 'v4', credentials=scoped_credentials)
# Call the Sheets API
2020-05-13 13:40:40 +00:00
gsheet = service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range_name).execute()
2020-05-13 00:22:29 +00:00
return gsheet
2020-05-13 13:40:40 +00:00
def google_sheet_to_json(spreadsheet_id, range_name):
sheet = get_google_sheet(spreadsheet_id, range_name)
2020-05-13 00:22:29 +00:00
data = sheet["values"]
2020-05-13 15:48:14 +00:00
ret = []
for row in data[1:]:
point = create_point(row)
if point is not None:
ret.append(point)
return json.dumps(ret)
2020-05-13 00:22:29 +00:00
def create_point(row):
2020-05-13 16:40:26 +00:00
if (len(row) != 17):
return None
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
active, lat, lon, name, address, capacity, startdate, enddate, _, _, _, _, _, _, _, extra, location_type = row
2020-05-13 15:48:14 +00:00
if active == "FALSE":
return None
hours = [x.replace("</br>", "\n") for x in row[8:15]]
2020-05-13 00:22:29 +00:00
return {
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [lon, lat],
},
"properties": {
"name": name,
"address": address,
"capacity": capacity,
"period": {
"start": startdate,
"end": enddate,
},
# We give dict an iterable of pairs, dict gives us a dict
"hours": dict(zip(
["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"],
hours
)),
2020-05-13 00:22:29 +00:00
"extra": extra,
"type": location_type,
}
2020-05-13 15:48:14 +00:00
}