2016-11-02 152 views
2

這個問題已經被多次詢問,並且根據如this的回答,似乎API直到最近才作爲here提及,它提到有新的作用域允許訪問共享日曆。但它仍然不起作用。如何從Office REST API訪問共享日曆?

我已經在兩個平臺上測試了這一點:Azure和微軟圖形

  1. Azure的廣告應用

我在Azure的AD應用程序所需的所有權限: enter image description here

enter image description hereenter image description here

我打電話給Offic Ë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 App
  • 我的應用程序在這裏還包含所有必需的p ermissions。

    enter image description here

    我撥打電話到辦公室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

    相關:http://stackoverflow.com/questions/31055723/access-a-shared-calendar-such-as-a-meeting-room-via-office-365-rest-api – Starx

    +0

    相關:http:///stackoverflow.com/questions/32500915/how-to-read-calendars-which-are-shared-by-others-in-office-365-rest-api – Starx

    +0

    相關:http://stackoverflow.com/questions/28365024/access-shared-calendar-using-the-o365-rest-api/ – Starx

    回答

    0

    很多東西在這裏:)但是,它似乎癥結在於你期望/Me/Calendars包括共享日曆。它不是。爲了訪問已共享的其他人的日曆,您必須通過/Users/<id>/Calendars/網址進行訪問。

    因此,舉例來說,如果[email protected]登錄,並[email protected]oso.com分享了他的日程表與他,然後:

    • /Me/Calendars只會顯示在Bob的郵箱日曆
    • /Users/[email protected]/Calendars會顯示日曆比爾曾與鮑勃

    更新共享:似乎有在我們的身邊阻塞問題。我們正在努力。

    +0

    有趣。那麼有沒有辦法讓用戶將他們的日曆分享到該帳戶? – Starx

    +0

    不,沒有。請注意,即使在Outlook中,您也無法獲得此信息,但您必須知道該用戶與您分享。 –

    +0

    我試過查詢'/ Users /../日曆。它用'{「error」返回了我:{「code」:「ErrorItemNotFound」,「message」:「在商店中找不到指定的對象。」}} – Starx

    0

    我已經能夠做什麼,我相信你問(使用Outlook API從日曆已與您的Outlook日曆共享的事件)通過以下端點:

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

    從此端點,您應該能夠從任何直接與Outlook/Office 365帳戶共享的日曆中獲取活動/信息。

    • 的PRIMARY_USER_ID(正是我在這裏調用它)回來找你,當您第一次使用您的Outlook帳戶登錄,而經過微軟的身份驗證過程中的響應對象的一部分。這不是您嘗試訪問的日曆的ID,而是其他日曆共享的主日曆(您可以在端點api/v2.0/me處找到的那個日曆)的ID。我所看到的所有ID都以一連串用破折號分隔的字母和數字的形式返回。

    • CALENDAR_ID是您嘗試從中獲取事件的共享日曆的ID。如果您向.../api/v2.0/me/calendars/發出請求,則可以查看每個共享日曆的這些ID。這將返回與您共享的每個日曆,有關所有者的信息以及該日曆的「ID」。

    如果你插入這些id並向上面的url發送請求,你應該可以從API獲取日曆事件。

    1

    已更新。我找到了一個工作解決方案

    GET /用戶( '{ID}')/日曆( '{ID}')/事件

    GET /我/日曆( '{ID}')/事件

    https://developer.microsoft.com/en-us/graph/docs/concepts/known_issues#calendars

    另一種解決方法:您需要如何共享和一些規則,可以發現

    您可以訪問羣組日曆,並使用API​​羣體性事件。組日曆可以與組織內部或外部的任何人共享。不要共享用戶日曆,只需創建一個組,添加您想要讀/寫訪問的任何成員。只要用戶是該組的成員,任何添加到組日曆的事件都將通過標準/我/事件GET請求來完成。

    我找到你需要已授予以下權限:

    • Calendars.Read(Calendars.ReadWrite如果寫需要)
    • Calendars.Read.Shared(Calendars.ReadWrite.Shared如果寫需要)
    • Group.Read.All(如果寫需要Group.ReadWrite.All)

    祝您好運!

    +0

    感謝您的有用提示。 – Starx