Search code examples
pythonazure-active-directorymicrosoft-graph-apiadalazure-ad-msal

Calendar events not fetching | Microsoft Graph API | Using premium personal outlook accounts


I am trying to fetch the calendar events from my personal premium outlook account. It is not a work account. I have a office 365 subscription. Using the same, I have setup Azure actuve directory where I have added my python web application, granted all the required permissions to the app. While accessing the API via web app I am able to fetch profile details, users and all, but unable to get data related to events, calendar etc. I am getting this error - "message": "The tenant for tenant guid \u00*******b5d-*9-4b-b1-c5c***2ec8\u0027 does not exist."

I looked at many solutions on msdn and also on stackoverflow, but everyone told to get a premium account which I did but still the issue is not resolved.

Please help resolving the same. Thankyou in advance :)

I am attaching the copy of my app.config file for your reference.

import os

CLIENT_SECRET = "client secret key" 

AUTHORITY = "https://login.microsoftonline.com/tenant id"

CLIENT_ID = "client id"

REDIRECT_PATH = "/getAToken"    

ENDPOINT =ENDPOINT = 'https://graph.microsoft.com/v1.0/users/{my id}/events
# I also tried 'ENDPOINT = ' 'https://graph.microsoft.com/v1.0/users/{my id}/calendar/events''

SCOPE = ["User.ReadBasic.All"]

SESSION_TYPE = "filesystem"  # So token cache will be stored in server-side session

Solution

  • use 'Oauth' class of python to pass all your token and ADD details like client id, client secret etc. Something like this - (Note config files contains all my details mentioned above.)

    OAUTH = OAuth(APP)
    MSGRAPH = OAUTH.remote_app(
        'microsoft',
        consumer_key=config.CLIENT_ID,
        consumer_secret=config.CLIENT_SECRET,
        request_token_params={'scope': config.SCOPES},
        base_url=config.RESOURCE + config.API_VERSION + '/',
        request_token_url=None,
        access_token_method='POST',
        access_token_url=config.AUTHORITY_URL + config.TOKEN_ENDPOINT,
        authorize_url=config.AUTHORITY_URL + config.AUTH_ENDPOINT)
    

    my config file :

    CLIENT_ID = 'put here'
    CLIENT_SECRET = 'put here'
    REDIRECT_URI = 'http://localhost:5000/login/authorized'
    
    AUTHORITY_URL = 'https://login.microsoftonline.com/common'
    
    AUTH_ENDPOINT = '/oauth2/v2.0/authorize'
    TOKEN_ENDPOINT = '/oauth2/v2.0/token'
    
    RESOURCE = 'https://graph.microsoft.com/'
    API_VERSION = 'v1.0'
    SCOPES = ['User.Read', 'Mail.Send', 'Files.ReadWrite','Calendars.Read', 'Calendars.ReadWrite'] 
    

    now you can call the get events like this :

    eventResponse = MSGRAPH.get('me/events',headers=request_headers()) #request_headers() return all the requeried headers
    print(eventResponce.data)