Я работаю над сценарием, который должен показывать каждую комнату собраний, которая у нас есть, и показывать, свободны они или нет. Я использую 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-часовой период)
Я что-то здесь не так делаю? Заранее спасибо!