HenryM
HenryM

Reputation: 5793

Outlook Calendar API - Python

I am trying to retrieve events from the Outlook Calendar using the API. I only want to retrieve events after today. I'm using the following code (which is basically a cut and paste from Microsoft's tutorial):

def make_api_call(method, url, token, user_email, payload = None, parameters = None):
  # Send these headers with all API calls
  headers = { 'User-Agent' : 'python_tutorial/1.0',
              'Authorization' : 'Bearer {0}'.format(token),
              'Accept' : 'application/json',
              'X-AnchorMailbox' : user_email }

  # Use these headers to instrument calls. Makes it easier
  # to correlate requests and responses in case of problems
  # and is a recommended best practice.
  request_id = str(uuid.uuid4())
  instrumentation = { 'client-request-id' : request_id,
                      'return-client-request-id' : 'true' }

  headers.update(instrumentation)

  response = None

  if (method.upper() == 'GET'):
      response = requests.get(url, headers = headers, params = parameters)
      print response.url
  elif (method.upper() == 'DELETE'):
      response = requests.delete(url, headers = headers, params = parameters)
  elif (method.upper() == 'PATCH'):
      headers.update({ 'Content-Type' : 'application/json' })
      response = requests.patch(url, headers = headers, data = json.dumps(payload), params = parameters)
  elif (method.upper() == 'POST'):
      headers.update({ 'Content-Type' : 'application/json' })
      response = requests.post(url, headers = headers, data = json.dumps(payload), params = parameters)

  return response

This function gets called from the following:

  get_events_url = outlook_api_endpoint.format('/Me/Events')

  query_parameters = {'$select': 'Subject,Start,End',
                      '$orderby': 'Start/DateTime ASC',
                      'startDateTime' : datetime.datetime.now().isoformat(),}

  r = make_api_call('GET', get_events_url, access_token, user_email, parameters = query_parameters)

It simply returns the first 10 entries in the calendar rather than entries from today onwards. How do I get back entries for specific dates?

Upvotes: 3

Views: 7149

Answers (1)

HenryM
HenryM

Reputation: 5793

I've found a solution that works for me. First I've changed events to calendarview, I've capitalised StartDateTime and added EndDateTime so it looks like this:

get_events_url = outlook_api_endpoint.format('/Me/calendarview')

  query_parameters = {'$select': 'Subject,Start,End',
                      '$orderby': 'Start/DateTime ASC',
                      'StartDateTime' : datetime.datetime.now().isoformat(),
                      'EndDateTime' : datetime.datetime(2100,12,31),}

  r = make_api_call('GET', get_events_url, access_token, user_email, parameters = query_parameters)

It works so I'm happy

Upvotes: 1

Related Questions