Python Google日历按日期排序

问题描述 投票:0回答:2

我有一个脚本,可从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模块来做到这一点,但我不确定。任何帮助表示赞赏。

python time google-api google-calendar-api
2个回答
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

再次感谢评论中的吉沃德!


0
投票

您可以使用“ orderBy”参数并将其设置为“ updated”,从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

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.