[PYTHON] Generieren Sie tägliche Berichte aus Google Kalender

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?

Recommended Posts

Generieren Sie tägliche Berichte aus Google Kalender
Greifen Sie über die iOS-App auf Google Kalender zu
Importieren Sie den von "Schedule-kun" erhaltenen Zeitplan in Google Kalender
Sofort von Google-Bildern abkratzen!
Generieren Sie eine URL-Abfrage aus JSON