+2

GoogleSheet API

Bài viết này sẽ giới thiệu cho người đọc về bộ Google Sheets API, cũng như là các thuật ngữ chung (common term) của bộ api này.

Kế tiếp là một ví dụ nho nhỏ sử dụng python để load dữ liệu từ google sheet về local và sau đó hiển thị dữ liệu này lên màn hình.

....

Giới thiệu Google Sheets API

Google Sheets API đúng như tên gọi của nó, đây là một bộ api được phát triển bởi google, bộ api này cho phép người dùng có thể đọc, chỉnh sửa spreadsheet. Người dùng khi sử dụng bộ api này thường sẽ có 2 cách chính để tương tác với spreadsheet:

Cả hai bộ api trên đều rất dễ sử dụng đặc biệt là với các developer, thêm vào đó bộ api Reading/writing bất kì spreadsheet còn cung cấp rất nhiều các options, việc này giúp cho việc tùy biến cũng dễ dàng hơn, phù hợp với nhu cầu customzie của người dùng.

Các thuật ngữ chung (common term)

Spreadsheet ID

Mỗi một request api đều yêu cầu tham số bắt buộc là SpreadsheetId, tham số này được sử dụng để xác định bạn sẽ kết nối đến spreadsheet nào, ở ví dụ phái dưới thì spreadsheetId chính là phần nằm giữa /d//edit. SpreadsheetId được tạo bởi chữ cái, số và đi kèm một vài kí tự đặc biệt

https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0

Sheet ID

Mỗi một sheets trong spreadsheet đề sẽ có 1 cái title duy nhất và IDs, sheetId thường được sử dụng trong Sheets API để xác định xem sheet đang được đọc hoặc là bị update. sheetId chính là giá trị của tham số gid. SheetId được tạo bởi số và đi kèm một vài kí tự đặc biệt

https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=sheetId

A1 notation (kí pháp A1)

Đôi khi sử dụng api google sheet sẽ có một vài api yêu cầu kí pháp A1. Kí pháp này sẽ tham chiếu đến group các ô trong một spreadsheet, kí pháp này thường hay được sử dụng trong ô công thức. Chẳng hạn như:

  • Sheet1!A1:B2 sẽ tham chiếu đến hai ô đầu tiên ở 2 hàng trên cùng của Sheet1.

Sử dụng API google sheet với Python

Turn on the Google Sheets API (GSA)

Để có thể truy cập được vào file google sheet thì bước đầu tiên đó chính là phải khởi động được GSA, thật may là google đã làm hết những công việc khó khăn này, việc của mình là chỉ cần bấm vào button và dowload file credentials.json

Cài đặt thư viện Google Client

Kế tiếp là bước cài đặt thư viện, các thư viện được sử dụng ở đây đó là google-api-python-client, google-auth-httplib2, google-auth-oauthlib

Go code

Tạo một file python mới, sau đó import các thư viện mới cài vào

from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

Kế tiếp sẽ cần phải khởi tạo biến cần thiết để lấy được dữ liệu

SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
SPREADSHEET_ID = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
RANGE_NAME = 'Class Data!A2:E'

ở đây có 3 biến được khởi tạo, biến SCOPES dùng để xác định danh sách scopes mà bạn muốn access đến, biến SPREADSHEET_ID dùng để xác định Spreadsheet mà bạn muốn truy cập vào, biến RANGE_NAME dùng để xác định bạn sẽ lấy dữ liệu ở sheet nào và phạm vi mà bạn sẽ lấy dữ liệu.

file token.pickle sẽ lưu thông tin đăng nhập của mình, thông tin này bao gồm access và refresh token được sinh ra khi mình đăng nhập và ủy quyền cho phép ứng dụng truy cập vào google sheet thành công

creds = None
if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)

đoạn code trên sẽ kiểm tra data trong file token.pickle rồi sẽ load những data này sau đó gán vào biến creds, biến creds này sẽ dùng để xác minh khi gọi GSA

trong trường hợp file token.pickle không tồn tại, hoặc có tồn tại nhưng data lại không hợp lệ thì lúc này sẽ phải login, nếu login thành công thì sẽ lưu lại data đăng nhập để sử dụng cho lần tiếp theo. Đoạn code phía dưới sẽ đảm nhận nhiệm vụ này

if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

Sau khi đã có được thông tin credentials thì sẽ là bước khởi tạo service để có thể call được api

service = build('sheets', 'v4', credentials=creds)

Đến lúc này ta có thể gọi Sheets API

sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME).execute()

Nếu truyền sai RANGE_NAME thì sẽ có 1 HttpError 400 Unable to parse range trả ra

Nếu truyền sai SPREADSHEET_ID thì sẽ có 1 HttpError 404 Requested entity was not found trả ra

Ẹnjoy

Nếu truyền đúng cả RANGE_NAME và SPREADSHEET_ID

Python Google Sheet

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí