Integrate Microsoft Graph API to Access Planner Tasks
- Start by registering your application in the Azure portal. Acquire the client ID (App ID), tenant ID, and client secret needed for authentication with Microsoft Graph API.
- Install the `requests` library in your Python environment since it will be needed to send HTTP requests to the Graph API.
pip install requests
- Use OAuth 2.0 to acquire an access token that will allow your app to make secure calls to Microsoft Graph. This typically involves sending a POST request to the token endpoint.
import requests
def get_token(tenant_id, client_id, client_secret):
url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
data = {
'client_id': client_id,
'scope': 'https://graph.microsoft.com/.default',
'client_secret': client_secret,
'grant_type': 'client_credentials'
}
response = requests.post(url, headers=headers, data=data)
return response.json().get("access_token")
- Select the required Microsoft Graph API permissions, such as `Group.Read.All` and `Tasks.ReadWrite`, through the Azure portal to enable proper access control.
- Once you have the access token, construct an HTTP GET request to the Microsoft Graph API endpoint for Planner tasks. For example, to get all tasks in a specific planner plan:
def get_planner_tasks(access_token, plan_id):
url = f"https://graph.microsoft.com/v1.0/planner/plans/{plan_id}/tasks"
headers = {
'Authorization': f'Bearer {access_token}',
'Content-Type': 'application/json'
}
response = requests.get(url, headers=headers)
return response.json()
tenant_id = 'your-tenant-id'
client_id = 'your-client-id'
client_secret = 'your-client-secret'
plan_id = 'specific-plan-id'
access_token = get_token(tenant_id, client_id, client_secret)
tasks = get_planner_tasks(access_token, plan_id)
print(tasks)
- Handle the JSON response effectively to parse through the tasks and extract the required information such as task title, details, and status.
- Consider implementing pagination if you're dealing with a large number of results, as Graph API responses can be paginated and include a `@odata.nextLink` for additional data.
def get_all_tasks(access_token, plan_id):
tasks = []
url = f"https://graph.microsoft.com/v1.0/planner/plans/{plan_id}/tasks"
headers = {
'Authorization': f'Bearer {access_token}'
}
while url:
response = requests.get(url, headers=headers).json()
tasks.extend(response.get('value', []))
url = response.get('@odata.nextLink')
return tasks
all_tasks = get_all_tasks(access_token, plan_id)
#print task titles
for task in all_tasks:
print(task['title'])
- Ensure proper error handling is in place for network issues, authentication problems, or any other potential HTTP error responses from the API.