Viblo Code
+2

Tích hợp Google Sheet API vào dự án của bạn!

1. Lời mở đầu

Google Sheets là gì? Khi nói đến làm việc với các dữ liệu về bảng tính, nhiều người thường nghĩ ngay đến sử dụng Microsoft Excel mà không hay biết đã bỏ qua một trong những công cụ miễn phí hữu hiệu của Google mang tên Google Sheets.

Đây là một chương trình tạo lập và chỉnh sửa bảng tính với các tính năng cơ bản phổ biến như trên Excel nhưng được cải tiến và có nhiều ưu điểm vượt trội hơn so với excel, phù hợp với việc xử lý các dữ liệu đơn giản, kỹ năng bán hàng làm việc từ xa, hỗ trợ làm việc nhóm cũng như tương thích trên mọi thiết bị.

Nó tiện ích như thế, bài toán là một dự án website cần lưu lại thông tin của khách hàng thành 1 sheet thì làm thế nào. Chả nhẽ chúng ta lại phải nhập thông tin của từng user khi user đó khi đăng ký -> vậy thì hơi tốn công nhỉ. Để giải quyết bài toán đó thì google drive cũng cung cấp cho chúng ta Api sử dụng để tương tác với Google Sheet. Để hiểu rõ hơn về vấn đề này thì chúng ta cùng đi tìm hiểu sâu về nó nhé.

2. Cài đặt

2.1. Cài dặt google api

Google Sheet API giúp cho các lập trình viên có thể tạo ra các ứng dụng tương tác với Google Sheet một cách dễ dàng, có thể khai thác các tính năng rất hưu ích của nó. Về cơ bản tương tác với Google Sheet Api theo các đơn vị bảng tính (spreadsheet), trang tính (sheet), vùng giá trị (range) và ô trang tính (cell).

B1: Tạo new project ở API & Services:

Các bạn truy cập link API & Services sẽ hiển thị link đăng ký tạo project mới, các bạn điền đầy đủ thông tin yêu cầu:

Tạo thành công thì sẽ quay về màn hình quản lý, các bạn chọn button cố dấu + ENABLE APIS AND SERVICES:

B2: Kích hoạt API:

Chọn Google Drive APi, Google Sheets API và lần lượt kích hoạt( Enable )

B3: Tạo Service account:

Sau khi kích hoạt xong tại màn Google Drive Api chọn Credentials -> Service account:

Nhập thông tin của Service rồi chọn DONE

Tại đây google drive sẽ tạo ra một account tự động để ủy quyền thao tác với google sheet. Chúng ta chọn Manage service accounts

B4: Export file config.json:

Chúng ta chọn Manage keys để vào phần generate private key.

Chọn ADD KEY -> Create new key -> JSON

Đến bước này thì sau khi kích đúp button CREATE thì sẽ dowload về máy tính chúng ta 1 file config dạng json với các thông số như :

{
  "type": "service_account",
  "project_id": "project_id",
  "private_key_id": "private_key_id",
  "private_key": "private_key",
  "client_email": "client_email",
  "client_id": "client_id",
  "auth_uri": "auth_uri",
  "token_uri": "token_uri",
  "auth_provider_x509_cert_url": "auth_provider_x509_cert_url",
  "client_x509_cert_url": "client_x509_cert_url"
}

Các bạn nhớ lưu file này nhé tí mình cần config vào trong dự án của mình.

Tiếp theo các bạn tạo 1 file sheet để insert dữ liệu, các bạn nhớ là chia sẻ file này cho tài khoản service account mà chúng ta vừa tạo ở trên nhé.

Mỗi file google sheet thì có url dạng:

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

Ok đến đây là quá trình config xong google sheet api, các bạn chỉ cần lưu giúp mình file private key json chúng ta vừa dowload ở trên vàsheet_id của sheet bạn cần thao tác. Chúng ta cùng đi tiếp vào phần tích hợp google sheet api vào dự án nhé.

2.2 Tích hợp vào dự án của bạn

Mình lựa chọn ngôn ngữ Ruby on Rails để tích hợp google drive. Đầu tiên các bạn tạo cho mình 1 project bằng lệnh :

rails new demo-google-drive-api -d mysql 

Các bạn thêm gem 'google_drive' vào Gemfile và chạy lệnh bundle install để cài đặt.

File json ở màn tạo private key ở trên chúng ta cho vào forder config dự án với url config/google_drive_config.json.

Ở đây mình sẽ tạo bảng User để lưu thông tin người dùng khi đăng ký mới, các bạn chạy lệnh dưới :

rails g model User full_name:string email:string address:text date_of_birth:date
rails db:migrate

Insert data:

Chúng ta tạo 1 service để thao tác với google sheet nhé:

class AddUserInfoToGoogleSheetService
  def perform id
    user = User.find id
    user_count = User.count
    sheet_idx = 0
    session = GoogleDrive::Session.from_config("config/google_drive_config.json")
    worksheet = session.spreadsheet_by_key(ENV["SPREADSHEET_KEY"]).worksheets[sheet_idx]

    new_records = []
    new_records << handling_data(user, user_count)
    worksheet.insert_rows(user_count + 1, new_records)
    worksheet.save
    worksheet.reload
  end

  private

  def prefix_date date
    return if date.blank?

    date.strftime("%d/%m/%Y")
  end

  def handling_data user, stt
    [
      "#{stt}",
      user.full_name,
      user.email,
      user.address,
      prefix_date(user.date_of_birth),
      prefix_date(user.created_at)
    ]
  end
end

Trong đó :

  • sheet_idx: Trong 1 file sheet có nhiều file sheet nhỏ đây là vị trí file mà bạn muốn thao tác với sheet.
  • ENV["SPREADSHEET_KEY"]: Là id của sheet.

Ở model User chúng ta thêm call back after_create sau khi tạo User mới thì tự động push thông tin lên google sheet.

class User < ApplicationRecord
  after_create :handle_add_user_info_to_google_sheet

  private

  def handle_add_user_info_to_google_sheet
    AddUserInfoToGoogleSheetService.new.perform id
  end
end

Bây giờ chúng ta thử tạo một bản ghi User mới, các bạn gõ câu lệnh rails c chạy lệnh tạo bên dưới :

User.create full_name: "Nguyen Van A", email: "[email protected]", address: "Bac Tu Liem - Ha Noi", date_of_birth: Date.parse("10/10/1996")

Và đây là kết quả nhận được khi chúng ta insert một User thì thông tin của User đó sẽ push lên google sheet giúp cho chúng ta quản lý dữ liệu một cách đơn giản, hiệu quả nhất.

Update data :

Update fulle name dòng 2 cột B.

def perform
  sheet_idx = 0
  session = GoogleDrive::Session.from_config("config/google_drive_config.json")
  worksheet = session.spreadsheet_by_key(ENV["SPREADSHEET_KEY"]).worksheets[sheet_idx]
  worksheet["B2"] = "Le Van A"
  worksheet.save
  worksheet.reload
end

Delete data :

Xóa dòng 2-3

def perform
  sheet_idx = 0
  session = GoogleDrive::Session.from_config("config/google_drive_config.json")
  worksheet = session.spreadsheet_by_key(ENV["SPREADSHEET_KEY"]).worksheets[sheet_idx]
  worksheet.delete_rows(3, 2)
  worksheet.save
  worksheet.reload
end

Đến đây mình đã hướng dẫn cơ bản các bước config google api, tích hợp vào dự án Ruby on Rails.

3. Kết luận

Bài chia sẻ của mình đến đây xin được kết thúc hẹn các bạn vào lần chia sẻ kế tiếp nhé !

Tài liệu :


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.