GoogleSheet API
Bài đăng này đã không được cập nhật trong 4 năm
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:
- Reading/writing only giá trị cột ( link tài liệu api)
- Reading/writing bất kì spreadsheet ( link tài liệu api)
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/ và /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