Générez des rapports quotidiens à partir de Google Agenda

Notre société a utilisé Google Calrendar pour écrire que "ce que nous avons fait aujourd'hui" dans notre rapport quotidien doit être retiré du calendrier.

Vous devez installer gdata et dateutil à partir de PyPI.

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

        #Puisqu'il s'agit d'un jour ouvrable, je supprimerai les samedis et dimanches.
        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 = """
[Rapport journalier]__name__ __subject__


◆ Objectif de ce mois


◆ L'entreprise d'aujourd'hui
__contents__


◆ L'horaire de demain


◆ Partager, informations, etc.
"""


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)

Le quatrième argument à passer à DailyReport est 0 pour aujourd'hui et -1 pour hier. Parfois, j'écris un rapport quotidien le lendemain. Je me demande si cela doit être pris avec raw_input.

En passant, si vous disposez d'une authentification en deux étapes, vous ne pouvez pas l'utiliser à moins de générer un mot de passe pour l'application. J'espère pouvoir le faire avec OAuth, mais est-ce que ça va?

Recommended Posts

Générez des rapports quotidiens à partir de Google Agenda
Accédez à Google Agenda depuis l'application iOS
Importez le calendrier obtenu à partir de "Schedule-kun" dans Google Agenda
Grattage immédiat des images google!
Générer une requête URL à partir de JSON