Day14有提到說Google Calendar API主要有五個常用的項目清單,前面幾天介紹了3個,這邊先把後面兩個講完,再開始講Code相關的內容:
setting的部分顧名思義就是Google Calendar相關的設定,但這邊只能show出來在UI介面更改的設定,沒辦法使用這支API來取得設定。
可以用List或Get的方式取得Google Calendar的設定,這邊是官方列出來支援設定的清單。
設定 ID | 說明 | 接受的值 | 預設值 |
---|---|---|---|
自動新增 Hangouts | 是否自動將 Hangouts 新增到所有活動。請注意,如果 conferenceDataVersion 大於 0,則伺服器會忽略這項設定,因為用戶端必須根據這項設定處理邏輯。(唯讀)。 | 「true」、「false」 | 「false」 |
日期欄位順序 | 顯示日期時,日期 (D)、月 (M) 和年份 (Y) 的順序應該一致。 | 「MDY」、「DMY」、「YMD」 | 「MDY」 |
預設事件長度 | 建立時沒有明確時間長度的預設事件時間長度 (以分鐘為單位)。 | 正數 | 「60」 |
格式 24 小時 | 是否以 24 小時格式顯示時間。 | 「true」、「false」 | 「false」 |
隱藏邀請 | 是否隱藏使用者受邀但未採取行動 (例如回覆) 的活動。 | 「true」、「false」 | 「false」 |
隱藏週末 | 是否顯示週末時應隱藏週末。 | 「true」、「false」 | 「false」 |
語言代碼 | 使用者所在地區。 | 「{0/}」代表 | 「en」 |
僅限提醒開啟回應事件 | 是否只應回覆使用者的回覆狀態為「是」和「不確定」的活動。 | 「true」、「false」 | 「false」 |
顯示拒絕活動 | 是否要在使用者的日曆中顯示 [回覆] 回覆使用者的活動。 | 「true」、「false」 | 「true」 |
時區 | 使用者時區的 ID。 | 請參閱 http://www.iana.org/time-zones | 「Etc/GMT」 |
使用鍵盤快速鍵 | 是否要啟用鍵盤快速鍵。 | 「true」、「false」 | 「true」 |
weekStart | 一週是否為星期日 (0)、星期一 (1) 或星期六 (6)。 | 「0」、「1」、「6」 | 「0」 |
GET https://www.googleapis.com/calendar/v3/users/me/settings/**setting**
這是Setting:get,只要打上settingId就可以查詢該setting的內容,如果不知道settingId的話,可以用List來查詢
GET https://www.googleapis.com/calendar/v3/users/me/settings
這邊是Setting:list,有三個選用的參數可以下,這邊最主要會用到的就是maxResults,也就是response回傳的最大上限,預設為100,若有需要更改的話可以在body中帶上,這邊show一下setting:list出來的結果。
{
"kind": "calendar#settings",
"etag": "\"p32kelh6kgvao20o\"",
"nextSyncToken": "00001696170540873000",
"items": [
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "autoAddHangouts",
"value": "true"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "defaultEventLength",
"value": "60"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "dateFieldOrder",
"value": "MDY"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "weekStart",
"value": "1"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "format24HourTime",
"value": "false"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "hideInvitations",
"value": "false"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "locale",
"value": "en"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "remindOnRespondedEventsOnly",
"value": "false"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "showDeclinedEvents",
"value": "true"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "timezone",
"value": "Asia/Taipei"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "useKeyboardShortcuts",
"value": "true"
},
{
"kind": "calendar#setting",
"etag": "\"\"",
"id": "hideWeekends",
"value": "false"
}
]
}
這邊List出來的內容剛好可以對應到上面的表格,用對照的方式就會知道每一個內容的設定長什麼樣子了。
ACL(Access Control List),這個List主要是用來管控權限的,這邊主要也透過List來看一下可以管控的內容。
{
"kind": "calendar#aclRule",
"etag": etag,
"id": string,
"scope": {
"type": string,
"value": string
},
"role": string
}
上方為回傳json的內容,用官方文件看一下每一個key代表的意思
資源名稱 | 值 | 說明 | Notes |
---|---|---|---|
etag | etag | 資源的 ETag。 | |
id | string | 存取控制清單 (ACL) 規則的 ID。詳情請參閱https://developers.google.com/calendar/concepts/sharing?hl=zh-tw#sharing_calendars。 | |
kind | string | 資源類型 (「calendar#aclRule」)。 | |
role | string | 指派給範圍的角色。可能的值包括: | |
• 「none」:不提供存取權。 | |||
• 「freeBusyReader」:提供有空/忙碌資訊的讀取權限。 | |||
• 「reader」:提供日曆的讀取權限。具備讀取權限的使用者會看到私人活動,但系統會隱藏活動詳細資訊。 | |||
• 「writer」:提供日曆的讀寫權限。具有寫入者存取權的使用者可以看到私人活動,而使用者也能看到活動詳細資訊。 | |||
• 「owner」:提供日曆擁有權。這個角色具備寫入者角色的所有權限,並且具備查看和操控 ACL 的權限。 | 可寫入 | ||
scope | object | 這項 ACL 規則授予的https://developers.google.com/calendar/concepts/sharing?hl=zh-tw#sharing_calendars範圍。 | |
scope.type | string | 範圍類型。可能的值包括: | |
• 「default」:公開範圍。這是預設值。 | |||
• 「user」:將範圍限制為單一使用者。 | |||
• 「group」:將範圍限制在某個群組。 | |||
• 「domain」:將範圍限定在某個網域。注意:「default」或公開範圍的權限授予任何使用者 (無論是否經過驗證)。 | |||
scope.value | string | 使用者或群組的電子郵件地址 (或範圍名稱),視範圍類型而定。「default」類型時省略。 | 可寫入 |
從表格中可以知道是可以用API來更改權限的,因為role的部分是可以寫入的
GET https://www.googleapis.com/calendar/v3/calendars/**calendarId**/acl
要取得ACL:list,要先取得昨天講到的calendarId,這邊則會回傳所有有權限的userId
{
"kind": "calendar#acl",
"etag": "\"\"",
"nextSyncToken": "00001694952290249000",
"items": [
{
"kind": "calendar#aclRule",
"etag": "\"00000000000000000000\"",
"id": "user:@group.calendar.google.com",
"scope": {
"type": "user",
"value": "@group.calendar.google.com"
},
"role": "owner"
},
{
"kind": "calendar#aclRule",
"etag": "\"\"",
"id": "user:@gmail.com",
"scope": {
"type": "user",
"value": "@gmail.com"
},
"role": "owner"
}
]
}
由於一個是被創建出來的calendar,一個是原本使用的calendar,因此兩個都是owner
如果需要更改role的話,可以利用其他api來更改。
在正式進入code之前,由於google calendar API在使用的時候會需要Google OAuth 2.0的驗證,在Google Workspace上面測試會自動開啟google的認證頁面,但是在golang中要怎麼驗證呢?看起來明天要開始Survey這段了。