这个问题已被多次询问,并且根据this这样的答案,似乎API直到最近才支持这一点,因为here提到有新的范围允许访问共享日历。但它仍然无效。
我在两个平台上测试了这个:Azure和Microsoft Graph
我将Office API v.1.0调用为:
授权网址:
https://login.microsoftonline.com/common/oauth2/authorize?client_id=%1$s&redirect_uri=%2$s&response_type=code
令牌网址:
https://login.microsoftonline.com/common/oauth2/token
日历网址:
https://outlook.office.com/api/v1.0/Me/Calendars
它只为我提供了当前登录/授权用户创建的日历。
由于这不起作用,我尝试使用API的第2版,但我得到以下内容:
Additional technical information: Correlation ID: 7abf370a-d918-4514-bd74-cf5fc93fe3cf Timestamp: 2016-10-31 09:32:06Z AADSTS70001: Application 'f7571710-84e2-4444-8bfe-5eef92f4a46d' is not supported for this API version.
所以我尝试使用Microsoft Graph Application
我的应用程序还包含所有必需的权限。
我打电话给office API v2.0:
授权网址:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=%1$s&redirect_uri=%2$s&response_type=code&scope=%3$s
范围是:
private static $scopes = array( 'https://outlook.office.com/calendars.read', 'https://outlook.office.com/calendars.readwrite', 'https://outlook.office.com/calendars.read.shared', 'https://outlook.office.com/calendars.readwrite.shared', );
令牌网址:
https://login.microsoftonline.com/common/oauth2/v2.0/token
日历网址:
https://outlook.office.com/api/v2.0/Me/Calendars
再次不给我共享的日历。
感谢任何帮助。
答案 0 :(得分:2)
这里有很多东西:)但是,这里的关键似乎是你期望/Me/Calendars
包含共享日历。它不是。要访问已共享的其他人日历,您必须通过/Users/<id>/Calendars/
网址进行访问。
例如,如果bob@contoso.com登录,并且bill@contoso.com与他分享了他的日历,那么:
/Me/Calendars
只能在Bob的邮箱中显示日历/Users/bill@contoso.com/Calendars
会显示Bill与Bob分享的日历更新:我们这边似乎存在阻塞问题。我们正在努力。
答案 1 :(得分:1)
<强>更新。我找到了一个有效的解决方案。
GET / users('{id}')/ calendars('{id}')/ events
GET / me / calendars('{id}')/ events
有一些规则可供您分享,可在以下网址找到:https://developer.microsoft.com/en-us/graph/docs/concepts/known_issues#calendars
替代解决方法:
您可以使用API访问群组日历和群组活动。群组日历可以与组织内部或外部的任何人共享。您只需创建一个组,添加您想要读/写访问权限的任何成员,而不是共享用户日历。只要用户是该组的成员,添加到组日历的任何事件都将通过标准/ me / events GET请求来实现。
我发现您需要授予以下权限:
祝你好运!
答案 2 :(得分:0)
我已经能够通过使用以下端点来执行我认为您正在询问的内容(使用Outlook API从已与Outlook日历共享的日历中获取事件):
.../api/v2.0/Users('PRIMARY_USER_ID')/Calendars('SHARED_CALENDAR_ID')/Events
从此端点,您应该能够从已与Outlook / Office 365帐户直接共享的任何日历中获取事件/信息。
当您首次使用Outlook帐户登录并通过Microsoft的身份验证过程时,PRIMARY_USER_ID(正如我在此处所称的那样)会作为响应对象的一部分返回给您。这不是您尝试访问的日历的ID,而是与其他日历共享的主日历(您可以在api/v2.0/me
端点找到的日历)的ID。我见过的所有ID都以一串字母和数字的形式返回。
CALENDAR_ID是您尝试从中获取事件的共享日历的ID。如果您向.../api/v2.0/me/calendars/
发出请求,则可以为每个共享日历查看这些ID。这将返回与您共享的每个日历,有关所有者的信息以及该日历的“ID”。
如果您插入这些ID并向上面的网址发出请求,您应该能够从API获取日历事件。