Sample code for 30+ languages & platforms
Tcl

List Google Calendars

See more Google Calendar Examples

Demonstrates how to list the Google Calendars for an account.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

# This example uses a previously obtained access token having permission for the 
# Google Calendar scope.

# In this example, Get Google Calendar OAuth2 Access Token, the access
# token was saved to a JSON file.  This example fetches the access token from the file..
set jsonToken [new_CkJsonObject]

set success [CkJsonObject_LoadFile $jsonToken "qa_data/tokens/googleCalendar.json"]
if {[CkJsonObject_HasMember $jsonToken "access_token"] == 0} then {
    puts "No access token found."
    delete_CkJsonObject $jsonToken
    exit
}

set http [new_CkHttp]

CkHttp_put_AuthToken $http [CkJsonObject_stringOf $jsonToken "access_token"]

set jsonResponse [CkHttp_quickGetStr $http "https://www.googleapis.com/calendar/v3/users/me/calendarList"]
if {[CkHttp_get_LastMethodSuccess $http] != 1} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkJsonObject $jsonToken
    delete_CkHttp $http
    exit
}

puts "$jsonResponse"
puts "-----------------------------"

# This is a sample JSON response:
# (Sample code to iterate over the JSON response is shown below.)

# {
#  "kind": "calendar#calendarList",
#  "etag": "\"p32cfpufit76da0g\"",
#  "nextSyncToken": "CJj8-fLpzNUCEhhzdXBwb3J0QGNoaWxrYXRjbG91ZC5jb20=",
#  "items": [
#   {
#    "kind": "calendar#calendarListEntry",
#    "etag": "\"1465249947472000\"",
#    "id": "support@chilkatcloud.com",
#    "summary": "support@chilkatcloud.com",
#    "timeZone": "America/Chicago",
#    "colorId": "14",
#    "backgroundColor": "#9fe1e7",
#    "foregroundColor": "#000000",
#    "selected": true,
#    "accessRole": "owner",
#    "defaultReminders": [
#     {
#      "method": "popup",
#      "minutes": 10
#     }
#    ],
#    "notificationSettings": {
#     "notifications": [
#      {
#       "type": "eventCreation",
#       "method": "email"
#      },
#      {
#       "type": "eventChange",
#       "method": "email"
#      },
#      {
#       "type": "eventCancellation",
#       "method": "email"
#      },
#      {
#       "type": "eventResponse",
#       "method": "email"
#      }
#     ]
#    },
#    "primary": true
#   },
#   {
#    "kind": "calendar#calendarListEntry",
#    "etag": "\"1502373382732000\"",
#    "id": "#contacts@group.v.calendar.google.com",
#    "summary": "Contacts",
#    "timeZone": "America/Chicago",
#    "colorId": "13",
#    "backgroundColor": "#92e1c0",
#    "foregroundColor": "#000000",
#    "selected": true,
#    "accessRole": "reader",
#    "defaultReminders": []
#   },
#   {
#    "kind": "calendar#calendarListEntry",
#    "etag": "\"1502373376447000\"",
#    "id": "en.usa#holiday@group.v.calendar.google.com",
#    "summary": "Holidays in United States",
#    "timeZone": "America/Chicago",
#    "colorId": "8",
#    "backgroundColor": "#16a765",
#    "foregroundColor": "#000000",
#    "selected": true,
#    "accessRole": "reader",
#    "defaultReminders": []
#   }
#  ]
# }
# 

# Iterate over the JSON response..
set json [new_CkJsonObject]

CkJsonObject_Load $json $jsonResponse

set numCalendars [CkJsonObject_SizeOfArray $json "items"]
set i 0
while {$i < $numCalendars} {
    puts "--- $i ---"
    CkJsonObject_put_I $json $i
    puts "kind: [CkJsonObject_stringOf $json {items[i].kind}]"
    puts "id: [CkJsonObject_stringOf $json {items[i].id}]"

    # Examine the notification settings, if any..
    set numSettings [CkJsonObject_SizeOfArray $json "items[i].notificationSettings.notifications"]
    if {$numSettings > 0} then {
        set j 0
        while {$j < $numSettings} {
            CkJsonObject_put_J $json $j
            puts "Notification Type: [CkJsonObject_stringOf $json {items[i].notificationSettings.notifications[j].type}]"
            puts "Notification Method: [CkJsonObject_stringOf $json {items[i].notificationSettings.notifications[j].method}]"
            set j [expr $j + 1]
        }
    }

    set i [expr $i + 1]
}

delete_CkJsonObject $jsonToken
delete_CkHttp $http
delete_CkJsonObject $json