Python Google日历按日期排序

时间:2015-03-06 23:25:11

标签: python time google-api google-calendar-api

我有一个脚本可以抓取Google Claendar的每个事件,并搜索这些事件,并将包含搜索词的内容打印到文件中。

我遇到的问题是,我需要将它们按日期排序,而这似乎并没有这样做。

while True:
    events = calendar_acc.events().list(calendarId='myCal',pageToken=page_token).execute()
    for event in events['items']:
        if 'Search Term' in event['summary']: 
        #assign names to hit, and date
        find = event['summary']
        date = event['start'][u'dateTime']

    #only print the first ten digits of the date.

    month = date[5:7]
    day = date[8:10]
    year = date[0:4]
    formatted_date = month+"/"+day+"/"+year
    #write a line
    messy.write(formatted_date+" "+event['summary']+"\n\n")

我认为有一种方法可以使用time模块执行此操作,但我不确定。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

以防万一其他人需要这样做。在jedwards的帮助下。

我最终创建了一个空列表:hits
然后将['start']['dateTime']附加为datetime.datetime对象, 和['summary']到包含我"Search Term"的每个事件的列表。像这样:

hits = []
while True:
    events = calendar_acc.events().list(calendarId='My_Calendar_ID', pageToken=page_token).execute()
    for event in events['items']:
        if "Search Term" in event['summary']: 
           hits.append((dateutil.parser.parse(event['start']['dateTime']), event['summary']))

    page_token = events.get('nextPageToken')
    if not page_token:
        break

您只需对列表进行排序,在我的情况下,我将datetime对象剪切为日期。然后将整行写入文件。但是这段代码只是将它打印到控制台。

hits.sort()

for x in hits:
    d = x[0]
    date = "%d/%d/%d"%(getattr(d,'month'),getattr(d,'day'), getattr(d,'year'))
    final = str(date)+"\t\t"+str(x[1])

    print final

再次感谢评论中的jedwards!

答案 1 :(得分:0)

您可以使用“ orderBy”参数并将其设置为“已更新”,从API返回排序列表(按日期升序)。

page_token = None
while True:
    events = service.events().list(calendarId=myID, orderBy='updated', pageToken=page_token).execute()
    for event in events['items']:
        print(event)
        page_token = events.get('nextPageToken')
    if not page_token:
        break

有关更多信息,请参见:https://developers.google.com/calendar/v3/reference/events/list

希望这会有所帮助。