<b>本文讲的是【译】如何应用最新版的谷歌表格 API,</b>
文章下面会通过 Python 脚本,一步步将一个玩具公司关系型数据库里的客户订单数据逐条读出,并写到一个 Google 表格中。其他会涉及到的 API 还有:新建 Google 表格、从表格中读取数据。
<a></a>
<a href="https://www.googleapis.com/auth/spreadsheets" target="_blank">参考文档 - 权限部分:读写表格数据及表格属性</a>
开始代码部分的讲解:从 SQLite 数据库读取记录,根据这些数据新建 Google 表格。
1
SHEETS = discovery.build('sheets', 'v4', http=creds.authorize(Http()))
有了表格服务的调用点,首先要做的就是新建一个空白的 Google 表格。在此之前,你需要知道一点:大多数的 API 调用都需要传入一个包含操作名和数据的 JSON 请求主体,随着使用的深入,你会越来越熟悉这一点。对于新建表格来说,JSON 主体就比较简单,不需要加入任何值,传进一个空的 <code>dict</code> 就行,但最好还是提供一个表格的名字,参照下面这个 <code>data</code>:
data = {'properties': {'title': 'Toy orders [%s]' % time.ctime()}}
res = SHEETS.spreadsheets().create(body=data).execute()
2
3
4
5
data = {
'name': 'Toy orders [%s]' % time.ctime(),
'mimeType': 'application/vnd.google-apps.spreadsheet',
}
res = DRIVE.files().create(body=data).execute() # insert() for v2
一般来说如果你只需要进行表格的操作,那仅表格的 API 就已足够。但如果你还需要创建其他文件,或是操作其他 Drive 文件和文件夹,你才需要 Drive API。当然如果你的应用复杂,你也可以都用,或是结合其他 Google API 使用。但这里就只用到表格 API。
新建完表格后,获取并显示一些信息。
SHEET_ID = res['spreadsheetId']
print('Created "%s"' % res['properties']['title'])
6
7
8
FIELDS = ('ID', 'Customer Name', 'Product Code', 'Units Ordered',
'Unit Price', 'Status', 'Created at', 'Updated at')
cxn = sqlite3.connect('db.sqlite')
cur = cxn.cursor()
rows = cur.execute('SELECT * FROM orders').fetchall()
cxn.close()
rows.insert(0, FIELDS)
data = {'values': [row[:6] for row in rows]}
SHEETS.spreadsheets().values().update(spreadsheetId=SHEET_ID,
range='A1', body=data, valueInputOption='RAW').execute()
print('Wrote data to Sheet:')
rows = SHEETS.spreadsheets().values().get(spreadsheetId=SHEET_ID,
range='Sheet1').execute().get('values', [])
for row in rows:
print(row)
如果成功的话,会返回一个包含 <code>'values'</code> 键的 <code>dict</code>。<code>get()</code> 的默认值是一个空数组,这样在失败时,<code>for</code> 循环也不会出错。
如果你成功运行(末尾有附完整代码),并在浏览器 OAuth2 授权弹窗中同意 Google 表格修改权限的申请,你应该可以得到以下输出:
$ python3 sheets-toys.py # or python (2.x)
Created "Toy orders [Thu May 26 18:58:17 2016]" with this data:
['ID', 'Customer Name', 'Product Code', 'Units Ordered', 'Unit Price', 'Status']
['1', "Alice's Antiques", 'FOO-100', '25', '12.5', 'DELIVERED']
['2', "Bob's Brewery", 'FOO-200', '60', '18.75', 'SHIPPED']
['3', "Carol's Car Wash", 'FOO-100', '100', '9.25', 'SHIPPED']
['4', "David's Dog Grooming", 'FOO-250', '15', '29.95', 'PENDING']
['5', "Elizabeth's Eatery", 'FOO-100', '35', '10.95', 'PENDING']
下面是完整脚本,兼容 Python2 和 Python3。
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
'''sheets-toys.py -- Google Sheets API demo
created Jun 2016 by +Wesley Chun/@wescpy
'''
from __future__ import print_function
import argparse
import sqlite3
import time
from apiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
creds = tools.run_flow(flow, store, flags)
附加题: 请自由尝试单元格格式化及其他 API 的功能。除了读写数值,API 还有很多功能,挑战一下你自己吧!
<b></b>
<b>原文发布时间为:2016年06月27日</b>
<b>本文来自云栖社区合作伙伴掘金,了解相关信息可以关注掘金网站。</b>