当前位置: 首页 > 知识库问答 >
问题:

如何從 Office REST API 存取共享日曆?

徐景明
2023-03-14

这个问题被问了好几次,根据像这样的回答,似乎API直到最近才支持这个,这里提到有允许访问共享日历的新范围。但是它仍然不起作用。

我在两个平台上进行了测试:Azure和微软Graph

  1. Azure Ad App

我以如下方式调用Office API v.1.0:

授权URL:

https://login.microsoftonline.com/common/oauth2/authorize?client_id=%1$s&redirect_uri=%2$s&response_type=code

令牌URL:<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.

所以我试着用微软的图形html" target="_blank">应用程序

我这里的应用程序还包含所有必需的权限。

我以如下身份调用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',
);

令牌URL:<code>https://login.microsoftonline.com/common/oauth2/v2.0/token

日历网址:https://outlook.office.com/api/v2.0/Me/Calendars

同样没有给我共享日历。

任何帮助,不胜感激。

共有3个答案

长孙景天
2023-03-14

已更新。我找到了一个有效的解决方案。

获取/用户(“{ id }”)/日历(“{ id }”)/事件

GET /me/calendars('{id}')/events

有一些关于如何分享的规则,可以在以下网址找到:https://developer.microsoft.com/en-us/graph/docs/concepts/known_issues#calendars

另一种变通方法:

您可以使用API访问组日历和组事件。组日历可以与组织内外的任何人共享。只需创建一个组,添加任何您想要读/写权限的成员,而不是共享用户日历。只要用户是该组的成员,添加到组日历中的任何事件都将在标准 /me/eventsGET请求中通过。

我发现您需要获得以下权限:

  • 日历。读取(日历。如果需要写入,请读取)
  • 日历。阅读。共享(日历。读写。如果需要写入,请共享)
  • Group. read. All(Group. ReadWrit. All如果需要写入)

祝你好运!

祝叶五
2023-03-14
匿名用户

通过使用以下endpoint,我已经能够做到我认为您所询问的事情(使用Outlook API从已与您的Outlook日历共享的日历中获取事件):

.../api/v2.0/Users('PRIMARY_USER_ID')/Calendars('SHARED_CALENDAR_ID')/Events

从此endpoint,您应该能够从已直接与您的Outlook/Office 365帐户共享的任何日历中获取事件/信息。

> < li>

当您第一次使用outlook帐户登录并通过Microsoft的验证过程时,PRIMARY_USER_ID(我在这里称之为PRIMARY _ USER _ ID)会作为响应对象的一部分返回给您。这不是您尝试访问的日历的ID,而是与其他日历共享的主日历(您可以在< code>api/v2.0/meendpoint找到的日历)的ID。我见过的所有id都以一串由破折号分隔的字母和数字的形式出现。

CALENDAR_ID是您试图从中获取事件的共享日历的ID。如果您向< code >发出请求,就可以看到每个共享日历的id.../api/v2.0/me/calendars/这将返回与您共享的每个日历、所有者信息以及该日历的“ID”。

如果您插入这些id,并向上面的url发出请求,您应该能够从API获取日历事件。

闻鹤龄
2023-03-14

这里发生了很多事情:)然而,这里的症结似乎是您希望/Me/Calendars包含共享日历。它没有。为了访问已共享的其他人的日历,您必须通过/用户/访问

例如,如果bob@contoso.com登录,和bill@contoso.com已与他共享日历,然后:

  • /Me/日历将仅显示Bob邮箱中的日历
  • /用户/bill@contoso.com/日历将显示Bill与Bob共享的日历

更新:我们这边似乎存在阻塞问题。我们正在努力。

 类似资料:
  • 通过查看shmget()的手动页面,我了解到shmget()调用在内存中分配了#个页面,这些页面可以在进程之间共享。 它是否要创建内核内存页,并将其映射到进程的本地地址空间?还是为该段保留了相同的进程内存页,并将为其他附加进程共享相同的内存页? 调用shmget()时,内核将保留一定数量的段/页。 调用shmat()时,保留的段映射到进程的地址空间/页。 当一个新进程附加到同一段时,前面创建的内核

  • 问题内容: 我对ES官方文档中的以下配额有一个疑问: 如果服务器具有80G内存,则发出以下命令以启动ES节点: 这意味着我只给ES进程提供最大30g内存。Lucene如何使用剩余的50G,因为Lucene在ES流程中运行,所以这只是流程的一部分。 问题答案: 该参数仅指示您为ES Java进程分配了多少 堆 。但是,将RAM分配给堆并不是使用服务器上可用内存的唯一方法。 Lucene确实在ES进程

  • 问题内容: 我试图在共享内存上发布一些随机的东西;出于某些奇怪的原因,阅读器没有选择发件人写的东西 这是发件人: 这是读者: 如果重新启动阅读器,则阅读器确实能够读取发送方已写入的最后一个值。 但是,如果我先启动阅读器,然后再启动发送器,则阅读器不会拾取发送器写入的所有值。 为了使这个更奇怪,如果我在SHM :: read()中取消对printf语句的注释,那么读者有时可以使用。 任何的想法? G

  • 共享内存是两个或多个进程共享的内存。 但是,为什么我们需要共享内存或其他通信方式呢? 重申一下,每个进程都有自己的地址空间,如果任何进程想要将自己的地址空间的某些信息与其他进程进行通信,那么只能通过IPC(进程间通信)技术进行。 我们已经知道,通信可以在相关或不相关的进程之间进行。 通常,使用管道或命名管道来执行相互关联的进程通信。 可以使用命名管道或通过共享内存和消息队列的常用IPC技术执行无关

  • EasySwoole对Swoole table进行了基础的封装。 方法列表 getInstance() 该方法用于获取TableManager管理器实例 add($name,array $columns,$size = 1024) 该方法用于创建一个table get($name):?Table 该方法用于获取已经创建好的table 示例代码 TableManager::getInstance()

  • shmat是shared memory attach的缩写。而attach本意是贴的意思。 如果进程要使用一段共享内存,那么一定要将该共享内存与当前进程建立联系。即经该共享内存挂接(或称映射)到当前进程。 shmdt则是shmat的反操作,用于将共享内存和当前进程分离。在共享内存使用完毕后都要调用该函数。 函数原型 #include <sys/types.h> #include <sys/shm.