Sử dụng gem google_drive và chatwork để làm demo gửi notification
Bài đăng này đã không được cập nhật trong 3 năm
Dạo gần đây mình có tìm hiểu về gem google-drive
và chatwork api
và làm một demo nho nhỏ về việc đọc timesheet(google spreadsheet
) và gửi notification lên chatwork qua chatwork api, sau đây mình xin chia sẻ với mọi người về các bước cần làm để có thể hoàn thành demo này.
1.Gem google_drive
Setting.
Để có thể sử dụng gem này, bạn cần add gem vào Gemfile
và chạy bundle
gem 'google_drive', '~> 2.1.2'
ở đây, hãy nhớ chỉ định version cho gem, nếu như để mặc định như hướng dẫn ở trong doc, chúng ta sẽ cài được version cũ hơn và có nhiều function còn thiếu. Đây là trang mọi người có thể follow để có thể cài đặt và sử dụng gem.
-
Trước tiên chúng ta cần tạo
client_id
vàclient_secret
theo hướng dẫn tại đây -
Với 2 thông tin
client_id
vàclient_secret
vừa lấy được ở trên, ta tạo fileconfig.json
để lưu 2 thông tin ấy như sau:
{
"client_id": "xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
"client_secret": "xxxxxxxxxxxxxxxxxxxxxxxx"
}
Tạo một session object bằng lệnh:
session = GoogleDrive::Session.from_config("config.json")
Trong lần đầu tiên chạy lệnh trên, nó sẽ tạo cho ta thông tin xác thực và lưu vào file config.json
.Từ lần thứ 2 trở đi, thông tin này sẽ được đem ra để sử dụng lại.Nó sẽ trông như thế này:
{
"client_id": "xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
"client_secret": "xxxxxxxxxxxxxxxxxxxxxxxx",
"scope": [
"https://www.googleapis.com/auth/drive",
"https://spreadsheets.google.com/feeds/"
],
"refresh_token": "1/12bsNUgIk-vXBeoc5eutsOYoQeO4zlOddTN64HyMwghHdoBU"
}
Google spreadsheet.
Bạn có thể tham khảo doccument của GoogleDrive::Session
và GoogleDrive::Spreadsheet
tại Đây và Đây
Để đọc được file spreadsheet, tất nhiên là ta cần 1 file spreadsheet có quyền đọc, ta tạo 1 session object bằng lệnh sau:
session = GoogleDrive::Session.from_config("config.json")
Get sheet mong muốn:
sheet = session.spreadsheet_by_url(sheet_url).worksheets[1]
Ở đây, mình dùng spreadsheet_by_url
để get list worksheets, ngoài ra, còn có thể dùng spreadsheet_by_key
hoặc spreadsheet_by_title
để làm việc ấy.
Sau khi get được worksheet mong muốn, ta có thể follow theo doc sau để dùng những hàm có thể thao tác với worksheet, Đối với thao tác chỉ đọc file, thì có 2 hàm mình dùng là
#num_rows : Row number of the bottom-most non-empty row.
và
#num_cols : Column number of the right-most non-empty column.
2.Gem chatwork
Get Chatwork API
Đầu tiên ta vào link này để đăng ký sử dụng api chatwork.
Sau 1 khoảng thời gian ngắn thì ta có thể get api chatwork trong phần Chatwork/Personal Settings
- Điền
password
vào khung trên ta sẽ nhận được API để sử dụng để gửi message.
Gửi message.
Add vào Gemfile
gem 'chatwork'
và chạy
Bundle
để cài đặt gem.
Với API đã có được ở trên thì việc sử dụng gem để gửi message hết sức đơn giản như sau:
require "chatwork"
trong file muốn sử dụng.
require "chatwork"
Khởi tạo:
ChatWork.api_key = "XXX"
và gửi message bằng lệnh sau:
ChatWork::Message.create(room_id: 1234, body: "Hello, ChatWork!")
Cụ thể, để có thể lấy được room_id
hay một số hàm khác của gem thì bản có thể đọc bài viết sau
Dưới đây là đoạn code mình dùng để thực hiện đọc spreadsheet và gửi message lên chatwork:
class ReadSpreadSheetService
require "chatwork"
DEFAULT_COLUM = 2
class << self
def read_file
ChatWork.api_key = Settings.chatwork.api
session = GoogleDrive::Session.from_config("config.json")
sheet_url = Settings.drive.sheet_url
sheet = session.spreadsheet_by_url(sheet_url).worksheets[1]
num_rows = sheet.num_rows
(3..num_rows).map do |row|
mapping_hash.each do |key, value|
if sheet[row, DEFAULT_COLUM] == key.to_s
message = "[TO:#{value}]\n#{sheet.rows[row-1].join(', ')}\n\n"
ChatWork::Message.create(room_id: 57145326, body: message)
end
end
end.compact
end
private
def mapping_hash
chatwork_hash = {
"B120184": "1079357",
"B120485": "1614638",
"B120484": "1616992",
"B120288": "1385456"
}
end
end
end
Tham Khảo
All rights reserved