Kết nối tới Google Calendar từ Rails
Bài đăng này đã không được cập nhật trong 9 năm
1. Giới thiệu
Trong bài viết này, mình sẽ hướng dẫn sử dụng google sdk cho ruby (hiện đang alpha) trong rails để tương tác với dịch vụ Google Calendar.
2. Hướng dẫn chi tiết
2.1 Tạo Project
Đầu tiên, đương nhiên ta cần tạo một project Rails mới:
rails new rails_gcalendar
Và rồi thêm google-api-client
vào Gemfile:
gem 'google-api-client', '0.9.pre3'
Sau đó bundle install
để bundler làm việc của mình
2.2. Lấy credentials từ Google
Để có thể sử dụng Google Calendar API, app cần phải sử dụng OAuth 2.0 để xác định danh tính của mình.
Để lấy được credentials cho app, ta cần làm các bước sau:
- Đi đến trang Google Developers Console
- Chọn hoặc tạo một project mới.
- Ở phần Dashboard click vào Enable and manage APIs
- Ở Sidebar bên trái, chọn Credentials
- Tạo credential bằng cách bấm vào New credentials, chọn OAuth client ID, Application type chọn Web application. Authorized redirect URIs sẽ được dùng để Google redirect về sau khi authenticate, ở project này, điền "http:localhost:3000/oauth2callback"
- Click biểu tượng bên tay phải của credential để download file thông tin client về, lưu với tên client_secrets.json đặt trong folder project Rails vừa tạo.
2.3 Lấy token từ Google
Trước hết, tạo root_path
cho ứng dụng của ta ở đây:
# config/routes.rb
Rails.application.routes.draw do
root to: "calendars#index"
end
# app/controllers/calendars_controller.rb
class CalendarsController < ApplicationController
def index
render text: "Wait a moment"
end
end
Giờ tạo endpoint cho Google OAuth2 callback.
# app/controllers/oauths_controller.rb
class OauthsController < ApplicationController
require 'google/api_client/client_secrets'
def callback
client_secrets = Google::APIClient::ClientSecrets.load
auth_client = client_secrets.to_authorization
auth_client.update!(
:scope => 'https://www.googleapis.com/auth/calendar.readonly',
:redirect_uri => oauth2callback_url)
redirect_to auth_client.authorization_uri.to_s and return if params[:code].blank?
auth_client.code = params[:code]
token = auth_client.fetch_access_token
session[:token] = token
redirect_to root_path
end
end
và thêm vào routes.rb
get "/oauth2callback" => "oauths#callback"
Như vậy, sau khi truy cập http://localhost:3000/oauth2callback và cấp phép quyền truy cập, thì ta sẽ có được token lưu trong cookies.
2.4 Lấy danh sách các sự kiện sắp diễn ra
Để lấy danh sách các sự kiện sắp diễn ra, ta làm như sau:
# app/controllers/calendars_controller.rb
class CalendarsController < ApplicationController
require 'google/apis/calendar_v3'
require 'google/api_client/client_secrets'
Calendar = Google::Apis::CalendarV3
def index
redirect_to oauth2callback_path and return if session[:token].blank?
auth_client = Signet::OAuth2::Client.new
auth_client.update_token!(session[:token])
client = Calendar::CalendarService.new
client.authorization = auth_client
results = client.list_events(
"primary",
single_events: true,
order_by: 'startTime',
time_min: Time.now.iso8601,
time_max: 1.month.from_now.iso8601
)
display_str = ""
results.items.each do |event|
start_date = event.start.date || event.start.date_time
display_str << "- #{event.summary} (#{start_date})\n"
end
render text: display_str
end
end
3. Link liên quan
All rights reserved