我是一个数据分析自由职业者,基本上,一直和python一起工作。不过,我对后端开发并不满意,我对Azure平台还很陌生。
我想要制作一个python脚本来访问我的MS团队,检索所有会议细节并将其保存到一个.CSV文件中。现在,我被困在要进行的身份验证类型和请求的权限之间。
我现在所做的:
代码有两个问题:
如果这两个问题之一得到解决,我相信我能推进这个项目。提前谢谢。
import requests
import webbrowser
from msal import ConfidentialClientApplication
# Global variables
app_id = '8f34\*\*\*\*\*\*\*\*\*\*\*'
tenant_id = '83d6cd3e-\****1'
client_secret = 'q7q8Q\~***
auth_url = f'https://login.microsoftonline.com/%7Btenant_id%7D/'
redirect_uri = 'http://localhost:5000/getAToken'
scopes = \['User.Read',
'User.Read.All', 'User.ReadWrite.All',
'Directory.ReadWrite.All', 'Directory.Read.All',
'Calendars.Read', 'Calendars.ReadWrite',
'OnlineMeetingArtifact.Read.All',
'OnlineMeetings.Read', 'OnlineMeetings.ReadWrite'
\]
# Authentication
client_instance = ConfidentialClientApplication(
client_id=app_id,
client_credential=client_secret,
authority=auth_url,
)
auth_code_flow = client_instance.initiate_auth_code_flow(scopes=scopes, redirect_uri=redirect_uri, response_mode='query')
response_token = client_instance.acquire_token_by_auth_code_flow(auth_code_flow)
# try with code flow
access_token_id = response_token\['access_token'\]
# Query formation
base_url = 'https://graph.microsoft.com/v1.0/'
team_id = '60ceb0ef-a240-49e2-8e5c-699f5e5412a0'
member_id = 'mariam@wy3j6.onmicrosoft.com'
meeting_id = '319f92bd-c51c-4b06-8a5b-855a37cece02'
meeting_url = 'https://teams.microsoft.com/l/meetup-join/19%3a11e577f766f546a7853aea1e850e3750%40thread.tacv2/1668153593347?context=%7b%22Tid%22%3a%2283d6cd3e-ef7a-4380-9d01-cf12a8a47931%22%2c%22Oid%22%3a%22540d95bb-40b4-4b06-a84d-7b70c9fd1f23%22%7d'
members = 'users/'
events = f'{members}/{member_id}events?$select=isOnlineMeeting,onlineMeeting,attendees,start,end,'
meeting_attendance_report = f'me/onlineMeetings/{meeting_id}/attendanceReports'
headers = {'Authorization': 'Bearer ' + access_token_id}
# Save values from query response
# 1. Query to retrieve all subscribed Users' ids
users_lst: list = \[\]
end_point = base_url + members
response = requests.get(end_point, headers=headers)
print(response) # \<Response \[200\]\>
print(response.json())
if response.ok:
\[users_lst.append(user\['id'\]) for user in response.json()\['value'\]\]
response.close()
# 2. Query to retrieve any calendar meeting happened for this user
# Keeps the meeting join url to use while retrieving attendance records.
meetings: list = \[\]
end_point = base_url + events
response = requests.get(end_point, headers=headers)
print(response) # \<Response \[200\]\>
print(response.json())
if response.ok:
for event in response.json()\['value'\]:
if event\['isOnlineMeeting'\]:
event_record = {
'meeting_url': event\['onlineMeeting'\]\['joinUrl'\],
'attendees': event\['attendees'\],
'start_time': event\['start'\],
'end_time': event\['end'\],
}
meetings.append(event_record)
# 3. Report
report_lst: dict
end_point = base_url + f"/me/onlineMeetings?$filter=JoinWebUrl%20eq%20'{meeting_url}'"
response = requests.get(end_point, headers=headers)
print(response)
print(response.json())
发布于 2022-12-02 08:23:26
我尝试在我的环境中复制相同的结果,结果如下所示:
如果您想在没有用户交互的情况下生成访问令牌,那么请使用客户端-凭据流授予类型。
为了从Microsoft查询在线会议,我创建了一个Azure AD应用程序,并授予Application权限,如下所示:
根据您的需求,授予Application权限OnlineMeetingArtifact.Read.All
,OnlineMeetings.ReadWrite.All
。
通过引用Mariam提供的文档,I使用下面的代码生成了访问令牌
import msal
ClientId = '50adf559-f68e-4a75-8710-XXXXXXXXX'
ClientSecret = '***************'
authorityurl = 'https://login.microsoftonline.com/fb134080-e4d2-45f4-9562-XXXXXXXXX'
scope = ['https://graph.microsoft.com/.default']
client = msal.ConfidentialClientApplication(ClientId, authority=authorityurl, client_credential=ClientSecret)
token = client.acquire_token_silent(scope, account=None)
if token:
access = 'Bearer ' + token['access_token']
print('Access token was loaded from cache')
if not token:
token_result = client.acquire_token_for_client(scopes=scope)
access_token = 'Bearer ' + token_result['access_token']
print('Access token acquired from Azure AD')
print(access_token)
使用上面生成的访问,您可以从Microsoft:获得OnlineMeetings:
GET https://graph.microsoft.com/v1.0/communications/onlineMeetings/?$filter=filter
参考:
https://stackoverflow.com/questions/74414073
复制相似问题