Skip to content
Coding

Google Calendar API 使用整理

Google Calendar API 使用整理

最近開始思考有什麼樣的需求可以當作小小的 side project 練習,剛好最近疫情的關係比較多人請假,我就把腦筋動到了請假系統身上。在目前的請假流程中,有一個部分是填寫 google 表單,送出之後會自動新增到 google calendar 上,只要有加入這個日曆的人都可以看到。

系統沒有要規劃的很複雜,但讓我比較困惑的是 google calendar 有沒有辦法搭配道系統裡。查一查才知道原來 google 的功能好像甚麼都有 API 可以用 XD 所以爬了一下文,決定紀錄一下使用 google calendar 的過程。


使用前的準備

申請 Token

  • 進入 Google Cloud Platform,預設會幫你建立一個新的專案,如果要更改可以點選畫面上方的 My First Project。不需要的話,直接點選畫面左側的選單,從 API 與服務 中選擇 程式庫。
  • 搜尋 Google Calendar API 並啟用,等 loading 跑完後會出現 管理 的按鈕,或是從選單的 API 與服務 中找到 憑證,點選畫面上方的 新增憑證,選擇 服務帳戶 的選項。
可以看到頁面最下方的服務帳戶列表,已經有我之前新增過的一筆憑證。
  • 輸入 服務帳戶詳細資料 後按下送出,接著會回到憑證頁面,找到最下面的 服務帳戶 那一列,點選右側的編輯,找到畫面上方的 金鑰,點擊 新增金鑰,選擇 JSON 的格式後按下建立,瀏覽器會自動下載這份檔案,請不要隨意刪除,如果遺失了只能重新產生一份金鑰。
或是參考畫面左側的標題和分類,從選單進入也可以。

建立 Calendar

  • 進入 Google Calendar 後選擇一個建立好的日曆,從 設定和共用 進入日曆的設定。
移動到日立上方的話會出現三個點,點下去找到設定和共用的選項。
  • 找到 與特定使用者共用日曆 的選項,點選 新增邀請對象。這裡的 email 要輸入剛才那份金鑰 JSON 檔中,client_email_form 的欄位內容,權限要記得調整成 進行變更並管理共用設定。
剛剛下載完成的那份金鑰 JSON 檔內容。
  • 接著把網頁往下拉,找到 整合日曆 的區塊,記下這個 日曆 ID,接下來會使用到。

到目前為止,需要使用的部分都準備完成了,接下來要進入到程式的部分。


新增一個活動

新增好一個專案之後,從 Nuget 將 Google.Apis.Calendar.v3 新增到專案內,並加入下列程式碼。

執行之後回到日歷的頁面,就會看到剛剛新增上去的活動了!

Event.Id

Google.Apis.Requests.RequestError
Invalid resource id value. [400]
Errors [
        Message[Invalid resource id value.] Location[ - ]
        Reason[invalid] Domain[global]
]

測試的過程中有出現這個 error,看了官方文件之後發現問題是出在 Event 上,於是選擇另用比較不容易重複的 GUID 去作為參數帶上去。另外,文件上有提到只能使用小寫的英文字母和數字,要記得注意。

https://developers.google.com/calendar/api/v3/reference/events/insert

EventDateTime.TimeZone

完整的清單可以參考這裡。


除了範例裡提到的 Insert 之外,基本的 CRUD 都有 API 可以接,但我目前的系統還沒有這部分的功能要實作,所以沒有特別研究。

另外,官方文件所提供的註冊方法,使用的憑證類別和範例中的不太一樣,我個人認為比較麻煩,所以選擇了服務帳戶的方法。雖然大部分的功能都可以使用,但像是 Event.Attendees 這個邀請參與者的部分,就需要另外設定好權限才可以使用。

以上就是這次的內容,如果有任何使用上的疑問,或是解釋上的錯誤,都歡迎跟我說喔!我們下次見。

參考文章

TimeZone List
Google Calendar Api with .NET
At least one client secrets (Installed or Web) should be set