141 lines
5.2 KiB
Python
Executable File
141 lines
5.2 KiB
Python
Executable File
"""
|
|
Examples provided by google for using their api.
|
|
Very slightly modified by me to easily just get credentials
|
|
"""
|
|
import httplib2
|
|
import os
|
|
|
|
from apiclient import discovery
|
|
import oauth2client
|
|
from oauth2client import client
|
|
from oauth2client import tools
|
|
|
|
try:
|
|
import argparse
|
|
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args(["--noauth_local_webserver"])
|
|
except ImportError:
|
|
flags = None
|
|
|
|
# If modifying these scopes, delete your previously saved credentials
|
|
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json
|
|
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
|
|
CLIENT_SECRET_FILE = 'client_secret.json'
|
|
APPLICATION_NAME = 'SlickSlacker'
|
|
|
|
def get_sheets_service(credentials):
|
|
http = credentials.authorize(httplib2.Http())
|
|
discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
|
|
'version=v4')
|
|
service = discovery.build('sheets', 'v4', http=http, discoveryServiceUrl=discoveryUrl)
|
|
|
|
return service
|
|
|
|
def get_sheets_credentials():
|
|
"""Gets valid user credentials from storage.
|
|
|
|
If nothing has been stored, or if the stored credentials are invalid,
|
|
the OAuth2 flow is completed to obtain the new credentials.
|
|
|
|
Returns:
|
|
Credentials, the obtained credential.
|
|
"""
|
|
home_dir = os.path.expanduser('~')
|
|
credential_dir = os.path.join(home_dir, '.credentials')
|
|
if not os.path.exists(credential_dir):
|
|
os.makedirs(credential_dir)
|
|
credential_path = os.path.join(credential_dir, 'sheets.googleapis.com-python-quickstart.json')
|
|
|
|
store = oauth2client.file.Storage(credential_path)
|
|
credentials = store.get()
|
|
if not credentials or credentials.invalid:
|
|
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
|
|
flow.user_agent = APPLICATION_NAME
|
|
if flags:
|
|
credentials = tools.run_flow(flow, store, flags)
|
|
else: # Needed only for compatibility with Python 2.6
|
|
credentials = tools.run(flow, store)
|
|
print('Storing credentials to ' + credential_path)
|
|
return credentials
|
|
|
|
def get_calendar_credentials():
|
|
"""Gets valid user credentials from storage.
|
|
|
|
If nothing has been stored, or if the stored credentials are invalid,
|
|
the OAuth2 flow is completed to obtain the new credentials.
|
|
|
|
Returns:
|
|
Credentials, the obtained credential.
|
|
"""
|
|
home_dir = os.path.expanduser('~')
|
|
credential_dir = os.path.join(home_dir, '.credentials')
|
|
if not os.path.exists(credential_dir):
|
|
os.makedirs(credential_dir)
|
|
credential_path = os.path.join(credential_dir, 'calendar-python-quickstart.json')
|
|
|
|
store = oauth2client.file.Storage(credential_path)
|
|
credentials = store.get()
|
|
if not credentials or credentials.invalid:
|
|
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
|
|
flow.user_agent = APPLICATION_NAME
|
|
if flags:
|
|
credentials = tools.run_flow(flow, store, flags)
|
|
else: # Needed only for compatibility with Python 2.6
|
|
credentials = tools.run(flow, store)
|
|
print('Storing credentials to ' + credential_path)
|
|
return credentials
|
|
|
|
def sheets_quickstart():
|
|
"""Shows basic usage of the Sheets API.
|
|
|
|
Creates a Sheets API service object and prints the names and majors of
|
|
students in a sample spreadsheet:
|
|
https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
|
|
"""
|
|
credentials = get_sheets_credentials()
|
|
http = credentials.authorize(httplib2.Http())
|
|
discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
|
|
'version=v4')
|
|
service = discovery.build('sheets', 'v4', http=http,
|
|
discoveryServiceUrl=discoveryUrl)
|
|
|
|
spreadsheetId = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
|
|
rangeName = 'Class Data!A2:E'
|
|
result = service.spreadsheets().values().get(
|
|
spreadsheetId=spreadsheetId, range=rangeName).execute()
|
|
values = result.get('values', [])
|
|
|
|
if not values:
|
|
print('No data found.')
|
|
else:
|
|
print('Name, Major:')
|
|
for row in values:
|
|
# Print columns A and E, which correspond to indices 0 and 4.
|
|
print('%s, %s' % (row[0], row[4]))
|
|
|
|
def calendar_quickstart():
|
|
"""Shows basic usage of the Google Calendar API.
|
|
|
|
Creates a Google Calendar API service object and outputs a list of the next
|
|
10 events on the user's calendar.
|
|
"""
|
|
credentials = get_calendar_credentials()
|
|
http = credentials.authorize(httplib2.Http())
|
|
service = discovery.build('calendar', 'v3', http=http)
|
|
|
|
now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
|
|
print('Getting the upcoming 10 events')
|
|
eventsResult = service.events().list(
|
|
calendarId='primary', timeMin=now, maxResults=10, singleEvents=True,
|
|
orderBy='startTime').execute()
|
|
events = eventsResult.get('items', [])
|
|
|
|
if not events:
|
|
print('No upcoming events found.')
|
|
for event in events:
|
|
start = event['start'].get('dateTime', event['start'].get('date'))
|
|
print(start, event['summary'])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|