Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- import flask
- import httplib2
- import os
- import datetime
- import logging
- from flask import render_template
- from flask_ask import Ask, request, session, question, statement
- from apiclient import discovery
- from oauth2client import client
- from oauth2client.client import OAuth2WebServerFlow
- from apiclient.discovery import build
- app = flask.Flask(__name__)
- ask = Ask(app, '/')
- log = logging.getLogger()
- log.addHandler(logging.StreamHandler())
- log.setLevel(logging.DEBUG)
- logging.getLogger("flask_ask").setLevel(logging.DEBUG)
- CLIENT_ID = os.environ['CLIENT_ID']
- CLIENT_SECRET = os.environ['CLIENT_SECRET']
- calendars = {
- "social": os.environ['CAL_SOCIAL'],
- "errands": os.environ['CAL_ERRANDS'],
- "projects": os.environ['CAL_PROJECTS']
- }
- def makeEvent(text):
- if 'credentials' not in flask.session:
- return flask.redirect(flask.url_for('oauth2callback'))
- credentials = client.OAuth2Credentials.from_json(flask.session['credentials'])
- if credentials.access_token_expired:
- return flask.redirect(flask.url_for('oauth2callback'))
- else:
- http_auth = credentials.authorize(httplib2.Http())
- service = discovery.build('calendar', 'v3', http=http_auth, cache_discovery=False)
- created_event = service.events().quickAdd(
- calendarId = calendars["social"],
- text=text).execute()
- print(created_event['id'])
- @app.route('/')
- def index():
- if 'credentials' not in flask.session:
- return flask.redirect(flask.url_for('oauth2callback'))
- credentials = client.OAuth2Credentials.from_json(flask.session['credentials'])
- if credentials.access_token_expired:
- return flask.redirect(flask.url_for('oauth2callback'))
- else:
- http_auth = credentials.authorize(httplib2.Http())
- service = discovery.build('calendar', 'v3', http=http_auth, cache_discovery=False)
- now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
- print('Getting the upcoming 5 events')
- eventsResult = service.events().list(calendarId= calendars["social"],
- timeMin=now,
- maxResults=5,
- singleEvents=True,
- orderBy='startTime').execute()
- events = eventsResult.get('items', [])
- if not events:
- print('No upcoming events found.')
- else:
- event_data = []
- for event in events:
- start = event['start'].get('dateTime', event['start'].get('date'))
- print(start, event['summary'])
- s = "{0}: {1}".format(start,event['summary'])
- event_data.append(s)
- #return json.dumps(events)
- return render_template("index.html", data=event_data)
- @app.route('/makeevent')
- def mkev():
- makeEvent('Do This Thing at Home on October 12th 10pm-10:25pm')
- return "boop"
- @app.route('/oauth2callback')
- def oauth2callback():
- flow = client.OAuth2WebServerFlow(
- client_id=CLIENT_ID,
- client_secret=CLIENT_SECRET,
- scope='https://www.googleapis.com/auth/calendar',
- redirect_uri=flask.url_for('oauth2callback', _external=True),
- access_type='offline'
- )
- if 'code' not in flask.request.args:
- auth_uri = flow.step1_get_authorize_url()
- return flask.redirect(auth_uri)
- else:
- auth_code = flask.request.args.get('code')
- credentials = flow.step2_exchange(auth_code)
- flask.session['credentials'] = credentials.to_json()
- return flask.redirect(flask.url_for('index'))
- @ask.launch
- def launch():
- return question("do you want me to say hello to someone?").reprompt("Sorry, I didn't get that. Do you want me to say hello to someone?")
- @ask.intent('HelloIntent',default={'firstname': 'Bob'})
- def hello(firstname):
- ## as a test would like to make a quick add calendar event happen here.
- text = render_template('hello', firstname=firstname)
- return statement(text)
- @ask.intent('AMAZON.HelpIntent')
- def help():
- help_text = render_template('help')
- return question(help_text).reprompt(help_text)
- @ask.intent('AMAZON.StopIntent')
- def stop():
- bye_text = render_template('bye')
- return statement(bye_text)
- @ask.intent('AMAZON.CancelIntent')
- def cancel():
- bye_text = render_template('bye')
- return statement(bye_text)
- @ask.session_ended
- def session_ended():
- log.debug("Session Ended")
- return "{}", 200
- if __name__ == '__main__':
- import uuid
- app.secret_key = str(uuid.uuid4())
- if 'ASK_VERIFY_REQUESTS' in os.environ:
- verify = str(os.environ.get('ASK_VERIFY_REQUESTS', '')).lower()
- if verify == 'false':
- app.config['ASK_VERIFY_REQUESTS'] = False
- app.run(debug=False, use_reloader=False)
Add Comment
Please, Sign In to add comment