Cách sử dụng Google Drive API trong Python với Simple-Drive

Hôm nay là một ngày cuối tuần mát mẻ ở Sài Gòn, có rất nhiều kiến thức Hiếu muốn viết nhưng cuộc sống bộn bề quá. Chợt nhớ ra Hiếu có một công cụ rất hay dành cho những anh em có chút kiến thức ngôn ngữ Python là có thể dùng được. Đó là Simple-Drive, đây là một thư viện sử dụng Google Drive API do Hiếu viết. Nó không chỉ giúp chúng ta trong việc thao tác với file như: tạo, sửa, xóa, tải lên, tải xuống, đổi tên, sao chép, … mà còn rất nhiều tính năng liên quan đến phân quyền, bình luận, lịch sử phiên bản.

Các chức năng của Simple-Drive

Giới thiệu Simple-Drive - Thư viện Google Drive API dễ sử dụng nhất
Giới thiệu Simple-Drive – Thư viện Google Drive API dễ sử dụng nhất

Files:

  • create: Tạo một tệp mới trong Google Drive.
  • create_shortcut: Tạo lối tắt (shortcut) đến một tệp hoặc thư mục trong Google Drive.
  • upload: Tải tệp từ thiết bị cục bộ lên Google Drive.
  • get: Lấy thông tin chi tiết về một tệp cụ thể trên Google Drive.
  • move: Di chuyển một tệp đến một thư mục khác trong Google Drive.
  • copy: Sao chép tệp hiện tại thành một tệp mới trong Google Drive.
  • rename: Đổi tên tệp trên Google Drive.
  • restrict: Giới hạn quyền truy cập của một tệp (chỉ cho phép người được chỉ định truy cập).
  • list: Liệt kê các tệp trong Google Drive (có thể kèm bộ lọc).
  • download: Tải tệp từ Google Drive về thiết bị cục bộ.
  • export: Xuất tệp Google Drive (như Google Docs, Sheets) thành định dạng khác (PDF, Word, v.v.).
  • empty_trash: Xóa vĩnh viễn tất cả tệp trong thùng rác của Google Drive.
  • trash: Di chuyển tệp vào thùng rác.
  • delete: Xóa vĩnh viễn một tệp khỏi Google Drive.

Permissions:

  • add: Thêm quyền truy cập (xem, chỉnh sửa) cho người dùng hoặc nhóm đối với một tệp hoặc thư mục.
  • transfer_ownership: Chuyển quyền sở hữu của tệp hoặc thư mục cho người dùng khác.
  • get: Lấy thông tin chi tiết về quyền truy cập của một tệp hoặc thư mục.
  • update: Cập nhật quyền truy cập hiện tại (ví dụ, thay đổi từ chỉ xem sang có thể chỉnh sửa).
  • list: Liệt kê tất cả quyền truy cập của một tệp hoặc thư mục.
  • remove: Xóa quyền truy cập của người dùng hoặc nhóm khỏi một tệp hoặc thư mục.

Comments:

  • create: Tạo một bình luận mới trên tệp (ví dụ Google Docs, Sheets).
  • get: Lấy thông tin chi tiết về một bình luận cụ thể.
  • update: Cập nhật nội dung của bình luận hiện có.
  • list: Liệt kê tất cả các bình luận trên một tệp.
  • delete: Xóa một bình luận khỏi tệp.

Replies:

  • create: Tạo phản hồi cho một bình luận trên tệp.
  • get: Lấy thông tin chi tiết về một phản hồi cụ thể.
  • update: Cập nhật nội dung của phản hồi hiện có.
  • list: Liệt kê tất cả phản hồi cho một bình luận.
  • delete: Xóa một phản hồi khỏi bình luận.

Revisions:

  • get: Lấy thông tin chi tiết về một phiên bản trước của tệp.
  • list: Liệt kê tất cả các phiên bản (revisions) của một tệp.
  • delete: Xóa một phiên bản cụ thể khỏi lịch sử tệp.

Cài đặt thư viện Simple-Drive

Chỉ cần trên máy bạn dã cài đặt Conda hoặc cài đặt Python thì bạn có thể thêm thư viện Simple-Drive bằng lệnh Pip như bên dưới.

pip install --upgrade simple-drive

Ủy quyền sử dụng Google Drive API

Đầu tiên, chúng ta sẽ import các module cần thiết của Simple-Drive.

from simple_drive import Auth, Drive, MimeTypes, Roles

Có hai cách để ủy quyền sử dụng Google Drive API:

Cách 1: Sử dụng một Service Account. Đây là cách phổ biến nhất để ủy quyền sử dụng các API của Google. Cách này giúp script của bạn chạy dễ dàng vì Service Account không bao giờ hết hạn. “Tạo một lần, dùng một đời” – Hiếu hay nói đùa như thế.

# Nếu service account là file
auth = Auth.from_service_account_file(file='service_account.json')

# Nếu service acount là variable
auth = Auth.from_service_account_info(info)

Cách 2: Sử dụng tài khoản chính của bạn. Cách này buộc bạn phải xác thực bằng tay và ủy quyền sẽ mất sau 7 ngày. Bạn cần phải tạo Client Secret trong Google Cloud để làm theo cách này.

auth = Auth.local_web_server(client_secrets_file='client_secrets.json')

Sau khi đã ủy quyền xong, chúng ta sẽ khởi tạo đối tượng Drive. Tham số verbose là tùy chọn có print thông tin khi sử dụng Google Drive API hay không. Bạn nên để True vì print đẹp lắm, hihi.

drive = Drive(auth, verbose=True)

Sử dụng Simple-Drive cơ bản

Hiếu sẽ lấy một ngữ cảnh để làm ví dụ cho bạn dễ hiểu. Giả sử Hiếu muốn tạo một thư mục, sau đó tạo một file Google Sheets trong thư mục đó, tiếp theo thì chia sẻ cho một người và thêm một bình luận vào file vừa tạo.

# Create a folder
folder = drive.Files.create(name='My folder', mime_type=MimeTypes.FOLDER, dest_folder_id=None)

# Create a sheet
sheet = drive.Files.create(name='My sheet', mime_type=MimeTypes.SHEETS, dest_folder_id=folder['id'])

# Add a permission
drive.Permissions.add(file_id=sheet['id'], email='her@gmail.com', role=Roles.EDITOR)

# Create a comment
drive.Comments.create(file_id=sheet['id'], content='Hello, this is today data.')

Như ví dụ trên bạn sẽ thấy rằng mình tạo cấu trúc class và function theo từng nhóm chức năng. Đồng thời hỗ trợ các tham số chuẩn mà Google Drive API yêu cầu như MimeType và Role để người dùng đỡ phải điền thủ công.

Thêm một ví dụ khác, giả xử bạn đang muốn thực hiện một thao tác cho hàng loạt file, và bạn cần lấy được một danh sách file theo các tiêu chí như sau:

  1. Các file tạo từ ngày 2024-01-01 về sau.
  2. Tên có chứa “Backlog data”.
  3. Nằm trong một thư mục được chỉ định.
from simple_drive import SearchTerms
import pandas as pd

term_1 = SearchTerms.createdTime_greater_equal('2024-01-01')
term_2 = SearchTerms.name_contains('Backlog data')
term_3 = SearchTerms.folder_id('YourFolderID')

files = drive.Files.list(term_1, term_2, term_3, fields='*', operator='and')

df = pd.DataFrame(files)

Sau khi có danh sách file rồi thì bạn chỉ việc dùng for loop để thực hiện thao tác hàng loạt cho toàn bộ file.

Lời kết

Với hơn 30 chức năng như trên, Hiếu tin rằng Simple-Drive có thể đáp ứng được nhiều nhu cầu liên quan đến Google Drive API. Đặc biệt là khi kết hợp với các thư viện khác như gspread – Một thư viện làm việc với Google Sheets API, sẽ giúp bạn mở rộng khả năng của mình trong API với các sản phẩm của Google.

Bài viết liên quan

Trần Ngọc Minh Hiếu

Trần Ngọc Minh Hiếu

Mình hiện đang làm Data Analyst, trước đó từng làm Digital Marketing. Viết blog là một niềm vui của mình, giúp mình chia sẻ lại những kiến thức và trải nghiệm từ cuộc sống và công việc. Bạn có thể donate cho mình tại đây.

Viết một bình luận

Hãy thoải mái để lại bình luận của bạn, chúng tôi sẽ kiểm duyệt và phản hồi trong thời gian sớm nhất. Vui lòng sử dụng email thật để đảm bảo bình luận được duyệt và nhận thông báo khi chúng tôi trả lời. Bạn cũng có thể thêm ảnh đại diện cho email của mình.