Mein Unternehmen hat Google Kalender verwendet, um zu schreiben, dass "das, was ich heute getan habe" in meinem täglichen Bericht aus dem Kalender entfernt werden sollte.
Sie müssen gdata und dateutil von PyPI installieren.
daily.py
# -*- coding: utf-8 -*-
import gdata.acl.data
import gdata.calendar.data
import gdata.calendar.service
import gdata.service
from datetime import date, timedelta
from dateutil import parser
import re
class DailyReport(object):
def __init__(self, email, password, name, when=0):
self._name = name
self.set_date(when)
self._password = password
self._email = email
self._calendar = gdata.calendar.service.CalendarService()
def set_date(self, when=0):
today = date.today()
t = timedelta(days = when * -1)
d = today - t
#Da es ein Werktag ist, werde ich samstags und sonntags entfernen.
if d.weekday() >= 5:
t = timedelta(days = d.weekday() - 4)
self._date = d - t
else:
self._date = d
def login(self):
self._calendar.email = self._email
self._calendar.password = self._password
self._calendar.source = 'daily_report'
self._calendar.ssl = True
self._calendar.ProgrammaticLogin()
def get_schedule(self):
query = self.get_calendar_event_query()
feed = self._calendar.CalendarQuery(query)
schedule = []
for i, event in zip(xrange(len(feed.entry)), feed.entry):
row = {}
row['subject'] = event.title.text
if event.when and event.when[0].start_time:
row['start_time'] = parser.parse( event.when[0].start_time ).strftime('%H:%M')
if event.when and event.when[0].end_time:
row['end_time'] = parser.parse( event.when[0].end_time ).strftime('%H:%M')
schedule.append(row)
self._schedule = schedule
return schedule
def get_calendar_event_query(self):
query = gdata.calendar.service.CalendarEventQuery('default', 'private', 'full')
query.start_min = self._date.strftime('%Y-%m-%dT00:00:00')
query.start_max = self._date.strftime('%Y-%m-%dT23:59:59')
query.orderby = 'starttime'
query.sortorder = 'ascending'
query.max_results = 200
return query
def report_with_template(self, template):
template = re.sub("__subject__", self._date.strftime('%Y-%m-%d'), template)
template = re.sub("__name__", self._name, template)
template = re.sub("__contents__", self.make_contents_from_schedule(), template)
return template
def make_contents_from_schedule(self):
contents = ""
for item in self._schedule:
contents += "%s〜%s %s\n" % (item['start_time'], item['end_time'], item['subject'])
return contents
template = """
[Tagesbericht]__name__ __subject__
◆ Das Ziel dieses Monats
◆ Das heutige Geschäft
__contents__
◆ Der Zeitplan von morgen
◆ Weitergabe, Informationen usw.
"""
if __name__ == "__main__":
dr = DailyReport("your email", "your password", "your name", 0)
dr.login()
dr.get_calendar_event_query()
dr.get_schedule()
print dr.report_with_template(template)
Das vierte Argument, das an DailyReport übergeben wird, ist 0 für heute und -1 für gestern. Manchmal schreibe ich am nächsten Tag einen täglichen Bericht. Ich frage mich, ob dies mit raw_input genommen werden sollte.
Wenn Sie eine zweistufige Authentifizierung haben, können Sie diese übrigens nur verwenden, wenn Sie ein Kennwort für die App generieren. Ich hoffe ich kann es mit OAuth machen, aber ist das okay?