天天看點

【譯】如何應用最新版的谷歌表格 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>