Sample code for 30+ languages & platforms
Objective-C

MS Graph Calendar List Events

See more Microsoft Calendar Examples

Retrieve a list of events in a calendar. The list contains single instance meetings and series masters.

For more details, see https://docs.microsoft.com/en-us/graph/api/calendar-list-events?view=graph-rest-1.0

Chilkat Objective-C Downloads

Objective-C
#import <CkoHttp.h>
#import <CkoJsonObject.h>
#import <NSString.h>

BOOL success = NO;

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

CkoHttp *http = [[CkoHttp alloc] init];

// Use your previously obtained access token as shown here:
//    Get Microsoft Graph OAuth2 Access Token with Calendars.ReadWrite scope.

CkoJsonObject *jsonToken = [[CkoJsonObject alloc] init];
success = [jsonToken LoadFile: @"qa_data/tokens/msGraphCalendar.json"];
if (success == NO) {
    NSLog(@"%@",jsonToken.LastErrorText);
    return;
}

http.AuthToken = [jsonToken StringOf: @"access_token"];

// Specify the calendar id
[http SetUrlVar: @"id" value: @"AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAgEGAAAA5_vF7TKKdE6bGCRqXyl2PQAClEpRTgAAAA=="];
// Send a GET request to https://graph.microsoft.com/v1.0/me/calendars/{$id}/events
NSString *strResponse = [http QuickGetStr: @"https://graph.microsoft.com/v1.0/me/calendars/{$id}/events"];
if (http.LastMethodSuccess == NO) {
    NSLog(@"%@",http.LastErrorText);
    return;
}

CkoJsonObject *json = [[CkoJsonObject alloc] init];
[json Load: strResponse];
json.EmitCompact = NO;

if ([http.LastStatus intValue] != 200) {
    NSLog(@"%@",[json Emit]);
    NSLog(@"%@%d",@"Failed, response status code = ",[http.LastStatus intValue]);
    return;
}

NSLog(@"%@",[json Emit]);

// Sample output:
// (See parsing code below..)

// {
//   "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('admin%40chilkat.io')/calendars('AQMkADAwATM0MDAAMS1i ... AClEpRTgAAAA%3D%3D')/events",
//   "value": [
//     {
//       "@odata.etag": "W/\"5+vF7TKKdE6bGCRqXyl2PQAClIgmmw==\"",
//       "id": "AQMkADAwATM0MDAAM ... AApRZ7JkAAAA=",
//       "createdDateTime": "2019-04-26T14:31:39.8791929Z",
//       "lastModifiedDateTime": "2019-04-26T14:31:41.2753537Z",
//       "changeKey": "5+vF7TKKdE6bGCRqXyl2PQAClIgmmw==",
//       "categories": [
//       ],
//       "originalStartTimeZone": "Pacific Standard Time",
//       "originalEndTimeZone": "Pacific Standard Time",
//       "iCalUId": "040000008200E ... A230FEBFE5F7486A",
//       "reminderMinutesBeforeStart": 15,
//       "isReminderOn": true,
//       "hasAttachments": false,
//       "subject": "Let's go for lunch",
//       "bodyPreview": "Does mid month work for you?",
//       "importance": "normal",
//       "sensitivity": "normal",
//       "isAllDay": false,
//       "isCancelled": false,
//       "isOrganizer": true,
//       "responseRequested": true,
//       "seriesMasterId": null,
//       "showAs": "busy",
//       "type": "singleInstance",
//       "webLink": "https://outlook.live.com/owa/?itemid=AQMkADAwATM0MDAAMS1iNTcwLWI2NT ... gkal8pdj0AApRZ7JkAAAA%3D&exvsurl=1&path=/calendar/item",
//       "onlineMeetingUrl": null,
//       "recurrence": null,
//       "responseStatus": {
//         "response": "organizer",
//         "time": "0001-01-01T00:00:00Z"
//       },
//       "body": {
//         "contentType": "html",
//         "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=us-ascii\">\r\n</head>\r\n<body>\r\nDoes mid month work for you?\r\n</body>\r\n</html>\r\n"
//       },
//       "start": {
//         "dateTime": "2019-11-15T20:00:00.0000000",
//         "timeZone": "UTC"
//       },
//       "end": {
//         "dateTime": "2019-11-15T22:00:00.0000000",
//         "timeZone": "UTC"
//       },
//       "location": {
//         "displayName": "Harry's Bar",
//         "locationType": "default",
//         "uniqueId": "Harry's Bar",
//         "uniqueIdType": "private"
//       },
//       "locations": [
//         {
//           "displayName": "Harry's Bar",
//           "locationType": "default",
//           "uniqueId": "Harry's Bar",
//           "uniqueIdType": "private"
//         }
//       ],
//       "attendees": [
//         {
//           "type": "required",
//           "status": {
//             "response": "none",
//             "time": "0001-01-01T00:00:00Z"
//           },
//           "emailAddress": {
//             "name": "Adele Vance",
//             "address": "adelev@contoso.onmicrosoft.com"
//           }
//         }
//       ],
//       "organizer": {
//         "emailAddress": {
//           "name": "Matt",
//           "address": "outlook_3A33FCEB9B74CC15@outlook.com"
//         }
//       }
//     }
//   ]
// }

// Use this online tool to generate parsing code from sample JSON: 
// Generate Parsing Code from JSON

NSString *odataContext = 0;
int i;
int count_i;
NSString *odataEtag = 0;
NSString *id = 0;
NSString *createdDateTime = 0;
NSString *lastModifiedDateTime = 0;
NSString *changeKey = 0;
NSString *originalStartTimeZone = 0;
NSString *originalEndTimeZone = 0;
NSString *iCalUId = 0;
int reminderMinutesBeforeStart;
BOOL isReminderOn;
BOOL hasAttachments;
NSString *subject = 0;
NSString *bodyPreview = 0;
NSString *importance = 0;
NSString *sensitivity = 0;
BOOL isAllDay;
BOOL isCancelled;
BOOL isOrganizer;
BOOL responseRequested;
NSString *seriesMasterId = 0;
NSString *showAs = 0;
NSString *v_type = 0;
NSString *webLink = 0;
NSString *onlineMeetingUrl = 0;
NSString *recurrence = 0;
NSString *responseStatusResponse = 0;
NSString *responseStatusTime = 0;
NSString *bodyContentType = 0;
NSString *bodyContent = 0;
NSString *startDateTime = 0;
NSString *startTimeZone = 0;
NSString *endDateTime = 0;
NSString *endTimeZone = 0;
NSString *locationDisplayName = 0;
NSString *locationLocationType = 0;
NSString *locationUniqueId = 0;
NSString *locationUniqueIdType = 0;
NSString *organizerEmailAddressName = 0;
NSString *organizerEmailAddressAddress = 0;
int j;
int count_j;
NSString *displayName = 0;
NSString *locationType = 0;
NSString *uniqueId = 0;
NSString *uniqueIdType = 0;
NSString *statusResponse = 0;
NSString *statusTime = 0;
NSString *emailAddressName = 0;
NSString *emailAddressAddress = 0;

odataContext = [json StringOf: @"\"@odata.context\""];
i = 0;
count_i = [[json SizeOfArray: @"value"] intValue];
while (i < count_i) {
    json.I = [NSNumber numberWithInt: i];
    odataEtag = [json StringOf: @"value[i].\"@odata.etag\""];
    id = [json StringOf: @"value[i].id"];
    createdDateTime = [json StringOf: @"value[i].createdDateTime"];
    lastModifiedDateTime = [json StringOf: @"value[i].lastModifiedDateTime"];
    changeKey = [json StringOf: @"value[i].changeKey"];
    originalStartTimeZone = [json StringOf: @"value[i].originalStartTimeZone"];
    originalEndTimeZone = [json StringOf: @"value[i].originalEndTimeZone"];
    iCalUId = [json StringOf: @"value[i].iCalUId"];
    reminderMinutesBeforeStart = [[json IntOf: @"value[i].reminderMinutesBeforeStart"] intValue];
    isReminderOn = [json BoolOf: @"value[i].isReminderOn"];
    hasAttachments = [json BoolOf: @"value[i].hasAttachments"];
    subject = [json StringOf: @"value[i].subject"];
    bodyPreview = [json StringOf: @"value[i].bodyPreview"];
    importance = [json StringOf: @"value[i].importance"];
    sensitivity = [json StringOf: @"value[i].sensitivity"];
    isAllDay = [json BoolOf: @"value[i].isAllDay"];
    isCancelled = [json BoolOf: @"value[i].isCancelled"];
    isOrganizer = [json BoolOf: @"value[i].isOrganizer"];
    responseRequested = [json BoolOf: @"value[i].responseRequested"];
    seriesMasterId = [json StringOf: @"value[i].seriesMasterId"];
    showAs = [json StringOf: @"value[i].showAs"];
    v_type = [json StringOf: @"value[i].type"];
    webLink = [json StringOf: @"value[i].webLink"];
    onlineMeetingUrl = [json StringOf: @"value[i].onlineMeetingUrl"];
    recurrence = [json StringOf: @"value[i].recurrence"];
    responseStatusResponse = [json StringOf: @"value[i].responseStatus.response"];
    responseStatusTime = [json StringOf: @"value[i].responseStatus.time"];
    bodyContentType = [json StringOf: @"value[i].body.contentType"];
    bodyContent = [json StringOf: @"value[i].body.content"];
    startDateTime = [json StringOf: @"value[i].start.dateTime"];
    startTimeZone = [json StringOf: @"value[i].start.timeZone"];
    endDateTime = [json StringOf: @"value[i].end.dateTime"];
    endTimeZone = [json StringOf: @"value[i].end.timeZone"];
    locationDisplayName = [json StringOf: @"value[i].location.displayName"];
    locationLocationType = [json StringOf: @"value[i].location.locationType"];
    locationUniqueId = [json StringOf: @"value[i].location.uniqueId"];
    locationUniqueIdType = [json StringOf: @"value[i].location.uniqueIdType"];
    organizerEmailAddressName = [json StringOf: @"value[i].organizer.emailAddress.name"];
    organizerEmailAddressAddress = [json StringOf: @"value[i].organizer.emailAddress.address"];
    j = 0;
    count_j = [[json SizeOfArray: @"value[i].categories"] intValue];
    while (j < count_j) {
        json.J = [NSNumber numberWithInt: j];
        // ...
        j = j + 1;
    }

    j = 0;
    count_j = [[json SizeOfArray: @"value[i].locations"] intValue];
    while (j < count_j) {
        json.J = [NSNumber numberWithInt: j];
        displayName = [json StringOf: @"value[i].locations[j].displayName"];
        locationType = [json StringOf: @"value[i].locations[j].locationType"];
        uniqueId = [json StringOf: @"value[i].locations[j].uniqueId"];
        uniqueIdType = [json StringOf: @"value[i].locations[j].uniqueIdType"];
        j = j + 1;
    }

    j = 0;
    count_j = [[json SizeOfArray: @"value[i].attendees"] intValue];
    while (j < count_j) {
        json.J = [NSNumber numberWithInt: j];
        v_type = [json StringOf: @"value[i].attendees[j].type"];
        statusResponse = [json StringOf: @"value[i].attendees[j].status.response"];
        statusTime = [json StringOf: @"value[i].attendees[j].status.time"];
        emailAddressName = [json StringOf: @"value[i].attendees[j].emailAddress.name"];
        emailAddressAddress = [json StringOf: @"value[i].attendees[j].emailAddress.address"];
        j = j + 1;
    }

    i = i + 1;
}

NSLog(@"%@",@"Success.");