Пространство имен Outlook - Доступ к общедоступному, но ограниченному календарю - PullRequest
0 голосов
/ 18 января 2019

Я работаю над сценарием, который должен показывать каждую комнату собраний, которая у нас есть, и показывать, свободны они или нет. Я использую Python и win32com. Я могу легко получить доступ ко всем моим собраниям следующим образом:

import win32com.client, datetime
def getCalendarEntries(days=1):
    """
    Returns calender entries for days default is 1
    """

    #MailboxToAccess = "MeetingRoomName@Company"
    MailboxToAccess = "MyName@Company"
    #MailboxToAccess = "AnotherPerson@Company"


    Outlook = win32com.client.Dispatch("Outlook.Application")
    ns = Outlook.GetNamespace("MAPI")

    recip = ns.CreateRecipient(MailboxToAccess)
    calendar = ns.GetSharedDefaultFolder(recip, 9)

    appointments = calendar.Items


    appointments.Sort("[Start]")
    appointments.IncludeRecurrences = "True"
    today = datetime.datetime.today()
    begin = today.date().strftime("%m/%d/%Y")
    tomorrow= datetime.timedelta(days=days)+today
    end = tomorrow.date().strftime("%m/%d/%Y")
    appointments = appointments.Restrict("[Start] >= '" +begin+ "' AND [END] <= '" +end+ "'")
    events={'Start':[],'Subject':[],'Duration':[]}
    for a in appointments:
        adate=(str(a.Start))
        #print a.Start, a.Subject,a.Duration
        events['Start'].append(adate)
        events['Subject'].append(a.Subject)
        events['Duration'].append(a.Duration)
    return events
print (getCalendarEntries())

Таким образом, когда я использую свое собственное имя, я возвращаю все свои встречи на сегодня:

{'Start': ['2019-01-18 12:30:00+00:00', '2019-01-18 15:00:00+00:00'], 'Subject': ['Outlook python test object', 'Outlook python test object 2'], 'Duration': [60, 60]}

Когда я изменяю его на AnotherPerson (я вижу их календарь в outlook!), Я получаю только пустой массив, даже если у них есть встречи на сегодня:

{'Start': [], 'Subject': [], 'Duration': []}

Когда я использую MeetingRoomName (это действительно адрес электронной почты, на который мы отправляем блокировщики комнаты), я получаю следующую ошибку. К этому конференц-залу у всех нас есть доступ к просмотру, мы можем видеть каждое собрание, сколько времени они занимают, и их имя, но в Python я получаю это:

  File "C:\\FileLocation...", line 23, in getCalendarEntries
    appointments.Sort("[Start]")
  File "<COMObject <unknown>>", line 3, in Sort

com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'The operation failed.', None, 0, -2147221233), None)

Я знаю о методе GetFreeBusy, однако отображается только состояние за указанный период. (Это означает, что мне нужно отправить 16 запросов только для того, чтобы получить статус занятости одной комнаты на 8-часовой период)

Я что-то здесь не так делаю? Заранее спасибо!

...