首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从MS图APIV1.0查询OnlineMeetings

从MS图APIV1.0查询OnlineMeetings
EN

Stack Overflow用户
提问于 2022-11-12 15:09:40
回答 1查看 73关注 0票数 0

我是一个数据分析自由职业者,基本上,一直和python一起工作。不过,我对后端开发并不满意,我对Azure平台还很陌生。

我想要制作一个python脚本来访问我的MS团队,检索所有会议细节并将其保存到一个.CSV文件中。现在,我被困在要进行的身份验证类型和请求的权限之间。

我现在所做的:

  • 在Azure上注册了一个应用程序。
  • 授予应用程序访问策略
  • 授予所需的权限
  • 构建了用于:身份验证和令牌获取查询和结果增益的脚本

代码有两个问题:

  1. 如果我使用'ConfidentialClientApplication.acquire_token_by_auth_code_flow'.进行身份验证,则无法获取令牌以形成任何查询此功能需要作为字典的身份验证响应,而我无法得到它。
  2. 如果使用'ConfidentialClient.acquire_token_by_authorization_code'.,则无法获得使用WebJoinURL查询OnlineMeeting的权限这个方法现在在application中被简化了,它不授予应用程序权限。

如果这两个问题之一得到解决,我相信我能推进这个项目。提前谢谢。

代码语言:javascript
运行
复制
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())
EN

回答 1

Stack Overflow用户

发布于 2022-12-02 08:23:26

我尝试在我的环境中复制相同的结果,结果如下所示:

如果您想在没有用户交互的情况下生成访问令牌,那么请使用客户端-凭据流授予类型

为了从Microsoft查询在线会议,我创建了一个Azure AD应用程序,并授予Application权限,如下所示:

根据您的需求,授予Application权限OnlineMeetingArtifact.Read.AllOnlineMeetings.ReadWrite.All

通过引用Mariam提供的文档,I使用下面的代码生成了访问令牌

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
GET https://graph.microsoft.com/v1.0/communications/onlineMeetings/?$filter=filter

参考:

获取onlineMeeting -MicrosoftGraphv1.0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74414073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档