2013-07-26 21 views
0

現在,我正在製作一個Python程序,可以從我的Google帳戶中的所有日曆中提取事件;不過,我正在儘可能使該計劃儘可能商業化。就這點而言,爲我自己定製代碼非常簡單,當我知道附加到我的日曆上的所有美國假期活動都是全天活動時,我可以設置一個簡單的if語句來檢查它是否爲假日曆並指定事件請求本身如下:如何在Google日曆中返回所有事件而不知道它是定時還是全天事件

def get_main_events(pageToken=None): 
    events = gc_source.service.events().list(
    calendarId=calendarId, 
    singleEvents=True, 
    maxResults=1000, 
    orderBy='startTime', 
    pageToken=pageToken, 
    ).execute() 
    return events 

因此,這適用於全天事件。之後,我會將結果追加到列表中,並對其進行過濾以僅獲取我想要的事件。現在正從我的主日曆事件是一個容易一點指定我想,因爲他們通常不是全天事件的事件,只是我的工作日程,所以我可以使用:

now = datetime.now() 
now_plus_thirtydays = now + timedelta(days=30) 
def get_main_events(pageToken=None): 
    events = gc_source.service.events().list(
    calendarId=calendarId, 
    singleEvents=True, 
    maxResults=1000, 
    orderBy='startTime', 
    timeMin=now.strftime('%Y-%m-%dT%H:%M:%S-00:00'), 
    timeMax=now_plus_thirtydays.strftime('%Y-%m-%dT%H:%M:%S-00:00'), 
    pageToken=pageToken, 
    ).execute() 
    return events 

現在,我遇到了問題讓程序可用於商業用途以及我自己,以上只會從我的主日曆中返回非全日事件。我想知道是否有方法 - 如果是這樣 - 如何 - 運行get事件請求並返回所有結果,無論它們是整天還是隻是一個定時事件發生在天。此外,這一問題的部分原因是在我打印結果代碼的另一部分,我需要使用:

print event['start']['date'] 

爲全天事件,以及:

print event['start']['dateTime'] 

一個非全天的活動。

因此,由於'dateTime'不適用於全天事件,所以我想找出一種方法來設置它,以便我可以評估事件是否全天。即「如果所述事件是全天事件,則使用事件['start'] ['date'],否則使用事件['start'] ['dateTime']

回答

0

因此,通過大量測試,方式使用日誌功能,看看有什麼錯誤與發生的事情:

print event['start']['date'] 

VS:

print event['start']['dateTime'] 

我發現我可以用「嘗試」和「除」使用錯誤的結果對我有利。

這裏是結果修復:

首先初始部分如前面的實際查詢到日曆:

now = datetime.now() 
now_plus_thirtydays = now + timedelta(days=30) 
def get_calendar_events(pageToken=None): 
    events = gc_source.service.events().list(
     calendarId=cal_id[cal_count], 
     singleEvents=True, 
     orderBy='startTime', 
     timeMin=now.strftime('%Y-%m-%dT%H:%M:%S-00:00'), 
     timeMax=now_plus_thirtydays.strftime('%Y-%m-%dT%H:%M:%S-00:00'), 
     pageToken=pageToken, 
     ).execute() 
    return events 

然後,事件處理部:

# Events Portion 
    print "Calendar: ", cal_summary[cal_count] 
    events = get_calendar_events() 
    while True: 
     for event in events['items']: 
      try: 
       if event['start']['dateTime']: 
        dstime = dateutil.parser.parse(event['start']['dateTime']) 
        detime = dateutil.parser.parse(event['end']['dateTime']) 
        if dstime.strftime('%d/%m/%Y') == detime.strftime('%d/%m/%Y'): 
         print event['summary'] + ": " + dstime.strftime('%d/%m/%Y') + " " + dstime.strftime('%H%M') + "-" + detime.strftime('%H%M') 
         # Making a list for the respective items so they can be iterated through easier for time comparison and TTS messages 
         if cal_count == 0: 
          us_holiday_list.append((dstime, event['summary'])) 
         elif cal_count == 1: 
          birthday_list.append((dstime, event['summary'])) 
         else: 
          life_list.append((dstime, event['summary'])) 
        else: 
         print event['summary'] + ": " + dstime.strftime('%d/%m/%Y') + " @ " + dstime.strftime('%H%M') + " to " + detime.strftime('%H%M') + " on " + detime.strftime('%d/%m/%Y') 
         # Making a list for the respective items so they can be iterated through easier for time comparison and TTS messages 
         if cal_count == 0: 
          us_holiday_list.append((dstime, event['summary'])) 
         elif cal_count == 1: 
          birthday_list.append((dstime, event['summary'])) 
         else: 
          life_list.append((dstime, event['summary'])) 
       else: 
        return 
      except KeyError: 
       dstime = dateutil.parser.parse(event['start']['date']) 
       detime = dateutil.parser.parse(event['end']['date']) 
       print event['summary'] + ": " + dstime.strftime('%d/%m/%Y') 
       # Making a list for the respective items so they can be iterated through easier for time comparison and TTS messages 
       if cal_count == 0: 
        us_holiday_list.append((dstime, event['summary'])) 
       elif cal_count == 1: 
        birthday_list.append((dstime, event['summary'])) 
       else: 
        life_list.append((dstime, event['summary'])) 

     page_token = events.get('nextPageToken') 
     if page_token: 
      events = get_calendar_events(page_token) 
     else: 
      if cal_count == (len(cal_id) - 1): # If there are no more calendars to process 
       break 
      else: #Continue to next calendar 
       print "-----" 
       cal_count += 1 
       print "Retrieving From Calendar: ", cal_summary[cal_count] 
       events = get_calendar_events() 
相關問題