Using Google (Cloud) APIs
- 1. Using Google (Cloud) APIs
(meaning GCP & G Suite APIs)
Wesley Chun
Developer Advocate, Google
Adjunct CS Faculty, Foothill College
G Suite Dev Show
goo.gl/JpBQ40
About the speaker
● Developer Advocate, Google Cloud
● Mission: enable current and future developers to be successful using
Google Cloud and other Google developer tools, APIs, and platforms
● Videos: host of the G Suite Dev Show on YouTube
● Blogs: developers.googleblog.com &
gsuite-developers.googleblog.com
● Twitters: @wescpy, @GCPcloud, @GoogleDevs, @GSuiteDevs
● Background
● Software engineer & architect for 20+ years
● One of the original Yahoo!Mail engineers
● Author of bestselling "Core Python" books (corepython.com)
● Teacher and technical instructor since 1983 (all ages)
● Fellow of the Python Software Foundation
● AB Mathematics & CMP Music, UC Berkeley; MSCS UC Santa Barbara
- 2. Agenda and Why
● Not enough cloud computing in engineering curriculum
● Need to prep next-generation cloud-ready workforce
● Using APIs should be a nativeskill of new grads
● Introduction to Google Cloud (APIs)
● Using Google (Cloud) REST APIs
● Using Google Apps Script
● Inspirational app ideas (both GCP & G Suite APIs)
1 Introduction to
Google Cloud (APIs)
GCP and G Suite
- 3. Google Compute Engine, Google Cloud Storage
AWS EC2 & S3; Rackspace; Joyent
SaaS
Software as a Service
PaaS
Platform as a Service
IaaS
Infrastructure as a Service
Google Apps Script, App Maker
Salesforce1/force.com
G Suite (Google Apps)
Yahoo!Mail, Hotmail, Salesforce, Netsuite
Google App Engine, Cloud Functions
Heroku, Cloud Foundry, Engine Yard, AWS Lambda
Google BigQuery, Cloud SQL,
Cloud Datastore, NL, Vision, Pub/Sub
AWS Kinesis, RDS; Windows Azure SQL Database
Google Cloud Platform vs. G Suite
G Suite
APIs
GCP
APIs
- 4. How to access Google APIs
● Two ways primarily
○ HTTP-based REST APIs (lower-level)
■ Need either simple API keys or OAuth2 client IDs
■ Any client library supported language
● Python, Java, JS, PHP, Go, Ruby, C#, Dart, etc.
○ Google Apps Script (higher-level)
■ Use APIs as objects in customized JS environment
● No need to code OAuth nor HTTP
■ Access 40+ Google APIs/services
2
Using Google (Cloud)
HTTP-based REST APIs
Short Python code snippets using GCP & G Suite APIs
API key (public data) vs. OAuth2 access (private data)
- 5. The first word on Security
Authentication ("authn") vs authorization ("authz")
● authn: you are who you say you are
○ login & passwd
○ handprint authentication
○ retina scan
● authz: okay, you are who you say you are, but can you haz data?
○ OAuth2 - mostly authz, but some authn
○ Mostly about 3rd-party access to data
○ Users must give YOUR app access to THEIR data
○ Most of the time when you see "auth", it refers to authz
Developers Console (devconsole)
- 6. ● Manage your projects
● Obtain application credentials
● En-/disable Google APIs
Google APIs client
libraries for many
languages; demos in
developers.google.com/
api-client-library
- 7. List (first 100) files/folders in Google Drive
from __future__ import print_function
from apiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
Listing your files
goo.gl/ZIgf8k
Automate photo albums
OR
- 8. Migrate SQL data to a Sheet
# read SQL data then create new spreadsheet & add rows into it
FIELDS = ('ID', 'Customer Name', 'Product Code',
'Units Ordered', 'Unit Price', 'Status')
cxn = sqlite3.connect('db.sqlite')
cur = cxn.cursor()
rows = cur.execute('SELECT * FROM orders').fetchall()
cxn.close()
rows.insert(0, FIELDS)
DATA = {'properties': {'title': 'Customer orders'}}
SHEET_ID = SHEETS.spreadsheets().create(body=DATA,
fields='spreadsheetId').execute().get('spreadsheetId')
SHEETS.spreadsheets().values().update(spreadsheetId=SHEET_ID, range='A1',
body={'values': rows}, valueInputOption='RAW').execute()
Migrate SQL
data to Sheets
goo.gl/N1RPwC
BigQuery: querying Shakespeare words
TITLE = "The top 10 most common words in all of Shakespeare's works"
QUERY = '''
SELECT LOWER(word) AS word, sum(word_count) AS count
FROM [bigquery-public-data:samples.shakespeare]
GROUP BY word ORDER BY count DESC LIMIT 10
'''
rsp = BQ.query(body={'query': QUERY}, projectId=PROJ_ID).execute()
print('n*** Results for %r:n' % TITLE)
for col in rsp['schema']['fields']: # HEADERS
print(col['name'].upper(), end='t')
print()
for row in rsp['rows']: # DATA
for col in row['f']:
print(col['v'], end='t')
print()
- 9. Top 10 most common Shakespeare words
$ python3 bq_shake.py
*** Results for "The most common words in all of Shakespeare's works":
WORD COUNT
the 29801
and 27529
i 21029
to 20957
of 18514
a 15370
you 14010
my 12936
in 11722
that 11519
3
Using Google Apps Script
Customized JS runtime for G Suite
automation, extension, and integration
(Also Google App Maker for non-developers)
- 11. What can you do with this?
Accessing maps from
spreadsheets?!?
goo.gl/oAzBN9
This… with help from Google Maps & Gmail
function sendMap() {
var sheet = SpreadsheetApp.getActiveSheet();
var address = sheet.getRange("A2").getValue();
var map = Maps.newStaticMap().addMarker(address);
MailApp.sendEmail(EMAIL, "Map", map.getMapUrl());
}
JS
- 14. Custom intelligence in Gmail
Analyze G Suite data with GCP
Gmail
Cloud
Pub/Sub
Cloud
Functions
Cloud
Vision
G Suite GCP
Star
message
Message
notification
Trigger
function
Extract
images
Categorize
images
Inbox augmented with Cloud Function
- 15. Big data analysis to slide deck
Access GCP tools from G Suite
Supercharge G Suite with GCP
G Suite GCP
BigQuery
Apps Script
Slides Sheets
Application
request
Big data
analytics
- 16. 5 Summary &
resourcces
What's next?
References
● Official documentation
○ cloud.google.com
○ developers.google.com/gsuite
○ developers.google.com/apps-script
● Codelabs (self-paced, hands-on tutorials)
○ g.co/codelabs/gsuite-apis-intro
○ g.co/codelabs/apps-script-intro
○ g.co/codelabs/cloud
○ google.qwiklabs.com (not free but can get credits)
● Inspirational demo apps' resources
○ cloud.withgoogle.com/next18/sf/sessions/session/156878
○ cloud.google.com/blog/products/application-development/
adding-custom-intelligence-to-gmail-with-serverless-on-gcp
● YouTube video series:
○ Google Cloud Platform:
youtube.com/GoogleCloud
○ Recommended: Cloud Minute
shorts & Cloud NEXT videos
○ G Suite Dev Show:
goo.gl/JpBQ40
- 17. Resources for Higher Education
● Education grant program
○ Teaching grants (per-course basis)
■ $50USD for students
■ $100USD for faculty & TAs
■ You'll barely use any of it… key: no need to give Google a credit card
○ Research grants
■ Larger amounts, granted for longer period of time
○ Turnaround time: 3-4 business days
● Teacher center
○ teachercenter.withgoogle.com/gcp
○ Apply here for education grants
○ Apply here for Qwiklabs credits
Thank you! Questions?
Wesley Chun
@wescpy