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的欄位內容,權限要記得調整成 進行變更並管理共用設定。

- 接著把網頁往下拉,找到 整合日曆 的區塊,記下這個 日曆 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 去作為參數帶上去。另外,文件上有提到只能使用小寫的英文字母和數字,要記得注意。

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