我有一个脚本,可从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
模块来做到这一点,但我不确定。任何帮助表示赞赏。
以防万一其他人需要这样做。在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
再次感谢评论中的吉沃德!
您可以使用“ 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
希望这会有所帮助。