PureBasic Google Calendar: Insert an Event

Back to Index

Inserts a new event to a specified calendar.
This example inserts an event into the calender specified by ID = "support@chilkatcloud.com"
Returns the JSON of the event that was created.

Documentation: https://developers.google.com/google-apps/calendar/v3/reference/events/insert


IncludeFile "CkJsonObject.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkOAuth2.pb"

Procedure ChilkatExample()

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success.i

    ;   Provide a previously obtained OAuth2 access token.
    oauth2.i = CkOAuth2::ckCreate()
    If oauth2.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkOAuth2::setCkAccessToken(oauth2, "OAUTH2_ACCESS_TOKEN")
    CkRest::ckSetAuthOAuth2(rest,oauth2)

    success = CkRest::ckConnect(rest,"www.googleapis.com",443,1,1)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkOAuth2::ckDispose(oauth2)
        ProcedureReturn
    EndIf

    ;  The following code creates the JSON request body.
    ;  The JSON created by this code is shown below.
    jsonReq.i = CkJsonObject::ckCreate()
    If jsonReq.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckUpdateString(jsonReq,"kind","calendar#event")
    CkJsonObject::ckUpdateString(jsonReq,"status","confirmed")
    CkJsonObject::ckUpdateString(jsonReq,"summary","QXQC")
    CkJsonObject::ckUpdateString(jsonReq,"description","21st Annual QXQC Gathering")
    CkJsonObject::ckUpdateString(jsonReq,"location","Quigley's Irish Pub, 43 E Jefferson Ave, Naperville, IL 60540, USA")
    CkJsonObject::ckUpdateString(jsonReq,"start.dateTime","2017-12-09T20:00:00-06:00")
    CkJsonObject::ckUpdateString(jsonReq,"end.dateTime","2017-12-09T23:00:00-06:00")
    CkJsonObject::ckUpdateString(jsonReq,"attendees[0].email","dean@example.com")
    CkJsonObject::ckUpdateString(jsonReq,"attendees[0].responseStatus","needsAction")
    CkJsonObject::ckUpdateString(jsonReq,"attendees[1].email","support@chilkatcloud.com")
    CkJsonObject::ckUpdateBool(jsonReq,"attendees[1].organizer",1)
    CkJsonObject::ckUpdateBool(jsonReq,"attendees[1].self",1)
    CkJsonObject::ckUpdateString(jsonReq,"attendees[1].responseStatus","accepted")
    CkJsonObject::ckUpdateString(jsonReq,"attendees[2].email","ajay@example.com")
    CkJsonObject::ckUpdateString(jsonReq,"attendees[2].responseStatus","needsAction")
    CkJsonObject::ckUpdateString(jsonReq,"attendees[3].email","jim@example.com")
    CkJsonObject::ckUpdateString(jsonReq,"attendees[3].responseStatus","needsAction")
    CkJsonObject::ckUpdateString(jsonReq,"attendees[4].email","gilian@example.com")
    CkJsonObject::ckUpdateString(jsonReq,"attendees[4].responseStatus","needsAction")
    CkJsonObject::ckUpdateBool(jsonReq,"reminders.useDefault",1)

    sbReq.i = CkStringBuilder::ckCreate()
    If sbReq.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckEmitSb(jsonReq,sbReq)

    CkRest::ckAddHeader(rest,"Content-Type","application/json")

    sbJson.i = CkStringBuilder::ckCreate()
    If sbJson.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkRest::ckFullRequestSb(rest,"POST","/calendar/v3/calendars/support@chilkatcloud.com/events",sbReq,sbJson)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkOAuth2::ckDispose(oauth2)
        CkJsonObject::ckDispose(jsonReq)
        CkStringBuilder::ckDispose(sbReq)
        CkStringBuilder::ckDispose(sbJson)
        ProcedureReturn
    EndIf

    If CkRest::ckResponseStatusCode(rest) <> 200
        Debug "Received error response code: " + Str(CkRest::ckResponseStatusCode(rest))
        Debug "Response body:"
        Debug CkStringBuilder::ckGetAsString(sbJson)
        CkRest::ckDispose(rest)
        CkOAuth2::ckDispose(oauth2)
        CkJsonObject::ckDispose(jsonReq)
        CkStringBuilder::ckDispose(sbReq)
        CkStringBuilder::ckDispose(sbJson)
        ProcedureReturn
    EndIf

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(json,sbJson)

    ;  The following code parses the JSON response.
    ;  A sample JSON response is shown below the sample code.
    kind.s
    etag.s
    id.s
    status.s
    htmlLink.s
    created.s
    updated.s
    summary.s
    description.s
    location.s
    creatorEmail.s
    creatorSelf.i
    organizerEmail.s
    organizerSelf.i
    startDateTime.s
    endDateTime.s
    iCalUID.s
    sequence.i
    hangoutLink.s
    remindersUseDefault.i
    i.i
    count_i.i
    email.s
    responseStatus.s
    organizer.i
    self.i

    kind = CkJsonObject::ckStringOf(json,"kind")
    etag = CkJsonObject::ckStringOf(json,"etag")
    id = CkJsonObject::ckStringOf(json,"id")
    status = CkJsonObject::ckStringOf(json,"status")
    htmlLink = CkJsonObject::ckStringOf(json,"htmlLink")
    created = CkJsonObject::ckStringOf(json,"created")
    updated = CkJsonObject::ckStringOf(json,"updated")
    summary = CkJsonObject::ckStringOf(json,"summary")
    description = CkJsonObject::ckStringOf(json,"description")
    location = CkJsonObject::ckStringOf(json,"location")
    creatorEmail = CkJsonObject::ckStringOf(json,"creator.email")
    creatorSelf = CkJsonObject::ckBoolOf(json,"creator.self")
    organizerEmail = CkJsonObject::ckStringOf(json,"organizer.email")
    organizerSelf = CkJsonObject::ckBoolOf(json,"organizer.self")
    startDateTime = CkJsonObject::ckStringOf(json,"start.dateTime")
    endDateTime = CkJsonObject::ckStringOf(json,"end.dateTime")
    iCalUID = CkJsonObject::ckStringOf(json,"iCalUID")
    sequence = CkJsonObject::ckIntOf(json,"sequence")
    hangoutLink = CkJsonObject::ckStringOf(json,"hangoutLink")
    remindersUseDefault = CkJsonObject::ckBoolOf(json,"reminders.useDefault")
    i = 0
    count_i = CkJsonObject::ckSizeOfArray(json,"attendees")
    While i < count_i
        CkJsonObject::setCkI(json, i)
        email = CkJsonObject::ckStringOf(json,"attendees[i].email")
        responseStatus = CkJsonObject::ckStringOf(json,"attendees[i].responseStatus")
        organizer = CkJsonObject::ckBoolOf(json,"attendees[i].organizer")
        self = CkJsonObject::ckBoolOf(json,"attendees[i].self")
        i = i + 1
    Wend

    Debug "Example Completed."


    CkRest::ckDispose(rest)
    CkOAuth2::ckDispose(oauth2)
    CkJsonObject::ckDispose(jsonReq)
    CkStringBuilder::ckDispose(sbReq)
    CkStringBuilder::ckDispose(sbJson)
    CkJsonObject::ckDispose(json)


    ProcedureReturn
EndProcedure

Sample JSON Request Body

{
  "kind": "calendar#event",
  "status": "confirmed",
  "summary": "QXQC",
  "description": "21st Annual QXQC Gathering",
  "location": "Quigley's Irish Pub, 43 E Jefferson Ave, Naperville, IL 60540, USA",
  "start": {
    "dateTime": "2017-12-09T20:00:00-06:00"
  },
  "end": {
    "dateTime": "2017-12-09T23:00:00-06:00"
  },
  "attendees": [
    {
      "email": "dean@example.com",
      "responseStatus": "needsAction"
    },
    {
      "email": "support@chilkatcloud.com",
      "organizer": true,
      "self": true,
      "responseStatus": "accepted"
    },
    {
      "email": "ajay@example.com",
      "responseStatus": "needsAction"
    },
    {
      "email": "jim@example.com",
      "responseStatus": "needsAction"
    },
    {
      "email": "gilian@example.com",
      "responseStatus": "needsAction"
    }
  ],
  "reminders": {
    "useDefault": true
  }
}

Sample JSON Response Body

{
  "kind": "calendar#event",
  "etag": "\"3020332888490000\"",
  "id": "oqel9ijr6rgfgqg12b0qtlhfjs",
  "status": "confirmed",
  "htmlLink": "https://www.google.com/calendar/event?eid=b3FlbDlpanI2cmdmZ3FnMTJiMHF0bGhmanMgc3VwcG9ydEBjaGlsa2F0Y2xvdWQuY29t",
  "created": "2017-11-08T18:40:44.000Z",
  "updated": "2017-11-08T18:40:44.245Z",
  "summary": "QXQC",
  "description": "21st Annual QXQC Gathering",
  "location": "Quigley's Irish Pub, 43 E Jefferson Ave, Naperville, IL 60540, USA",
  "creator": {
    "email": "support@chilkatcloud.com",
    "self": true
  },
  "organizer": {
    "email": "support@chilkatcloud.com",
    "self": true
  },
  "start": {
    "dateTime": "2017-12-09T20:00:00-06:00"
  },
  "end": {
    "dateTime": "2017-12-09T23:00:00-06:00"
  },
  "iCalUID": "oqel9ijr6rgfgqg12b0qtlhfjs@google.com",
  "sequence": 0,
  "attendees": [
    {
      "email": "dean@example.com",
      "responseStatus": "needsAction"
    },
    {
      "email": "support@chilkatcloud.com",
      "organizer": true,
      "self": true,
      "responseStatus": "accepted"
    },
    {
      "email": "ajay@example.com",
      "responseStatus": "needsAction"
    },
    {
      "email": "jim@example.com",
      "responseStatus": "needsAction"
    },
    {
      "email": "gilian@example.com",
      "responseStatus": "needsAction"
    }
  ],
  "hangoutLink": "https://plus.google.com/hangouts/_/chilkatcloud.com/qxqc?hceid=c3VwcG9ydEBjaGlsa2F0Y2xvdWQuY29t.oqel9ijr6rgfgqg12b0qtlhfjs",
  "reminders": {
    "useDefault": true
  }
}