天天看点

【译】如何应用最新版的谷歌表格 API

<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>