SlideShare a Scribd company logo
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
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
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
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)
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)
● 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
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
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()
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)
Sheets-bound “Hello World!”
Apps Script intro
goo.gl/1sXeuD
Sheets-bound “Hello World!”
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
● Low-code assistive
development
environment
● Go from idea to app
in minutes
● Drag-n-drop
app building
● Generates Apps
Script code
Google App Maker
developers.google.com/appmaker
Inspirational app ideas
Using both GCP and G Suite APIs4
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
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
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
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

More Related Content

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)
  • 10. Sheets-bound “Hello World!” Apps Script intro goo.gl/1sXeuD Sheets-bound “Hello World!”
  • 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
  • 12. ● Low-code assistive development environment ● Go from idea to app in minutes ● Drag-n-drop app building ● Generates Apps Script code Google App Maker developers.google.com/appmaker
  • 13. Inspirational app ideas Using both GCP and G Suite APIs4
  • 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