我有一个脚本可以抓取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
模块执行此操作,但我不确定。任何帮助表示赞赏。
答案 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
希望这会有所帮助。