07/09/2018, 16:12

Using Google Calendar API in ruby on rails

I. Giới thiệu về Google Calendar API Google Calendar API của Google là một api cho phép bạn phát triển các ứng dụng của khách hàng để tạo ra các sự kiện mới, chỉnh sửa hoặc xóa các sự kiện hiện tại, và tìm kiếm các sự kiện trên lịch của google. 1 . Tạo tài khoản Google Để sử dụng Google ...

I. Giới thiệu về Google Calendar API

Google Calendar API của Google là một api cho phép bạn phát triển các ứng dụng của khách hàng để tạo ra các sự kiện mới, chỉnh sửa hoặc xóa các sự kiện hiện tại, và tìm kiếm các sự kiện trên lịch của google.

1 . Tạo tài khoản Google

Để sử dụng Google calendar API bạn cần một tài khoản google để test, định dạng dữ liệu.

2 . Làm quen với màn hình Google Calendar

Trước khi bắt đầu, bạn phải quen thuộc với định dạng giao diện ứng dụng calendar của Google, nếu chưa bạn có thế truy cập https://calendar.google.com/ để làm quen.

3 . Làm quen với Google Developers Console

Nếu bạn chưa đăng ký ứng dụng của bạn với Google Developers Console, hãy thiết lập một dự án và ứng dụng trong Developers Console. Hệ thống hướng dẫn bạn qua quá trình lựa chọn hoặc tạo ra một dự án và đăng ký một ứng dụng mới, và nó sẽ tự động kích hoạt các API cho bạn.

Nếu bạn đã đăng ký ứng dụng với google, truy cập theo thứ tự sau:

  • Truy cập vào Google Console.

  • Chọn project đã đăng ký và muốn sử dụng

  • Trong thanh sideba bên trái, chọn API & auth. Trong danh sách các API, chọn status ON cho Google Calendar API.

  • Trong thanh sidebar bên trái, chọn Credentials:

API support hai loại yêu cầu truy cập. Tạo ra loại yêu cầu nào là tùy theo yêu cầu dự án của bạn:

  • OAuth 2.0: Cho phép người dùng chia sẻ dữ liệu cụ thể (như danh sách liên lạc) trong khi vẫn bảo mật tên người dùng, mật khẩu và các thông tin khác tin của họ.
  • API keys: Sử dụng API keys thì sẽ không có bất kỳ yêu cầu về việc cung cấp thông tin tài khoản, hành động sử dụng từ phía người sử dụng, và người dùng cũng không phải đăng nhập hay nói cách khác khi người sử dụng yêu cầu truy xuất dữ liệu từ Google API thông qua ứng dụng thì sẽ không phải làm gì khác.

API keys cũng có nhiều loại như: Server key, Brower key, Android key, iOS key. tùy theo ứng dụng của bạn mà tạo loại key cho thích hợp

Sử dụng server key nếu như ứng dụng của bạn đang chạy trên một máy chủ, key này sẽ không được sử dụng bên ngoài máy chủ ví dụ như một trang web

  • Sử dụng browser key nếu như ứng dụng của bạn chạy trên một client, ví dụ như một trang web.

  • Sử dụng Android key khi ứng dụng của bạn chạy trên các thiết bị android.

  • Sử dụng iOS key khi ứng dụng của bạn chạy trên các thiết bị iOS.

4 . Các lệnh cơ bản truy xuất Google calendar API

  • calendar.calendars.get: trả về data của calendar cần truy xuất.

  • calendar.calendars.insert: insert một lịch mới vào trong danh sách lịch của người dùng.

  • calendar.calendarList.delete: xóa một lịch trong danh sách lịch dựa theo id lịch truyền vào.

  • calendar.calendars.update: cập nhật thông tin cho lịch.

  • calendar.events.get: láy thông tin của một event trong 1 lịch trong danh sách các lịch của người dùng dựa trên id của lịch và id của event muốn lấy thông tin.

  • calendar.events.list: lấy ra danh sách các events trong lịch dựa theo id của lịch truyền vào và các tham số khác như khoảng thời gian lấy các event, các thông tin cần lấy…

  • calendar.events.insert: Insert một event mới vào trong lịch.

  • calendar.events.delete: Xóa event trong lịch dựa trên id của even truyền vào.

  • calendar.events.update: Cập nhật thông tin của event trong lịch như tiều đề, thời gian của sự kiện.

Để tìm hiều thêm các hàm trong API bạn có thể truy xuất vào:
https://console.developers.google.com/project/apps~ornate-producer-607/apiui/api/calendar?authuser=00

để tìm hiều thêm.

II. Một số khái niệm trong Google Calendar

CalendarList: Một danh sách các lịch của user, được hiển thị trong Google Calendar

Calendar: Thể hiện 1 lịch, chứa các thông tin như: Người tạo, nội dung….

Event: Một sự kiện được đánh dấu trong lịch, chứa các thông tin như : Nội dung, thời gian bắt đầu, kết thúc, người tham gia.

image065-300x173.jpg

Google hỗ trợ 3 loại event:

Timed Event: Event bắt đầu và kết thúc giữa 2 khoảng thời gian (VD: Ăn trưa 10:00-12:00)

All-Days Event: Event kéo dài nguyên ngày

Recurring Event: Event lặp đi lặp lại (VD: Đi học 8:00 hàng ngày)

Thông tin chi tiết quý vị có thể tìm hiểu thêm ở đây:

https://developers.google.com/google-apps/calendar/concepts

III. Xây dựng ứng dụng với Google Calendar API

1 . Cài đặt thông tin ứng dụng trên google

Vào trang google console, bấm Add Project để tạo 1 project

https://cloud.google.com/console#/project

image006-300x97.jpg

Bấm Create, click vào project vừa tạo

image007-300x98.jpg

Bấm vào API & Auth. Tìm tới CalendarAPI và bấm On

Bấm tiếp qua Tab: Registered App. Bấm Register App

Sau khi Register App, bấm vào khung Oauth2.0 ClientID

Nhớ ghi lại 2 giá trị ClientID và ClientSecret. Phần RedirectUrl ta add tạm http://localhost:3000.

Ta có thể vào consent screen để sửa đổi thông tin, đây là màn hình sẽ hiện lên khi yêu cầu xác nhận của user.

Sau khi đã có clientID và clientSecret, coi như chúng ta hoàn thành xong việc config trên google api. Ngoài ra, có thể tạo API keys để sử dụng khi ứng dụng của chúng ta không cần người dùng phải đăng nhập bằng tài khoản google.

2 . Tạo lịch trên ứng dụng Calendar của google

  • Truy cập theo link https://www.google.com/calendar/render?tab=wc để tạo một lịch sẽ được sử dụng trong ứng dụng bạn sắp xây dựng.

  • Vào Settings => Calendars => Create new calendar

Nhập các thông tin cần thiết vào lịch mới cần tạo rồi bấm nút tạo lịch

3 . Sử dụng Google calendar API trong ứng dụng ruby on rails

Tạo một project ruby on rails.

  • Cài đặt gem google-api-client

    install gem google-api-client

Trong Gemfile

gem “google/api_client”

Để ứng dụng truy xuất được vào API thì có 2 cách:

  • Sử dung OAuth 2.0 với clientID và clientSecret để truy xuất.

    tạo file lưu thông tin của clientID và clientSecret( bạn có thể tìm hiều thêm về cách sử dụng của OAuth2.0 trong ruby on rails.

google-api oauth-2-login --scope=https://www.googleapis.com/auth/calendar --client-id=CLIENT_ID --client-secret=CLIENT_SECRET

  • Sử dụng API key.

a. Sử dụng OAuth 2.0 để truy cập Google API:
Trong file app/initializers/omniauth.rb

app/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, CLIENT_ID, CLIENT_SECRET, {
access_type: 'offline',
scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/calendar',
redirect_uri:'http://localhost/auth/google_oauth2/callback'
}
end

CLIENT_ID, CLIENT_SECRET : keys mà chúng ta lấy từ Google API console. Chúng có thể được lưu vào file config .yml hay truyền trực tiếp vào trong file.
access_type: “offline”: Này nói rằng bạn muốn truy cập vào dữ liệu của người dùng ngay cả khi họ không ở trình duyệt.
Scope: Phạm vi truy xuất.

Add a callback routes: OmniAuth sẽ tự thiết lập cho chúng ta một callback in routes /auth/google-oauth2.

Routes.rb

match "/auth/:provider/callback" => "sessions#create"

Trong controller sẽ thực hiện 2 công việc sau:

  • Lấy dữ liệu xác thực của google thông qua Omniauth.
    Sử dụng mã token từ data auth để yêu cầu một danh sách các lịch từ google calendar.
    class SessionsController < ApplicationController
      def create
        // What data comes back from OmniAuth?
        @auth = request.env["omniauth.auth"]

        // Use the token from the data to request a list of calendars

        @token = @auth["credentials"]["token"]
        client = Google::APIClient.new
        client.authorization.access_token = @token
        service = client.discovered_api('calendar', 'v3')
        @result = client.execute(
            api_method: service.calendar_list.list,
            parameters: {},
            headers: {"Content-Type" =>"application/json"})
      end
end

trong đó

  • discovered_api: nhập thông tin của api google sẽ dùng, ở đây là calendar.
  • api_method: các method truy xuất của api ở đây là dùng để lấy danh sách các lịch. có thê vào đây để tham khảo thêm các method của api:API Methods
  • parameters: các thông tin truyền vào tùy theo các api_method, ví dụ như api_method là calendar.events.insert thì cần truyền vào id của calendar, thời gian bắt đầu và kết thúc của event....

View the results:

sử dụng @auth và @result.data cho kết quả ra màn hình:

<%= debug @auth %>
<%= debug @result.data %>

b. Sử dụng API key để truy xuất api

Nếu sử dụng api key, bạn không cần phải lưu thông tin ClientID và client_secret. Trong controller chỉ cần:

class SessionsController < ApplicationController
  def create
    client = Google::APIClient.new
    client.authorization = nil
    service = client.discovered_api("calendar", "v3")
    @result = client.execute(
      key: API_key,
      api_method: service.calendar_list.list,
      parameters: {},
      headers: {"Content-Type" => "application/json"})
  end
end

0