[PYTHON] Importez "Sapporo City Household Garbage Collection Day Calendar" dans Google Agenda

introduction

Connaissez-vous "Sapporo City ICT Utilization Platform DATA-SMART CITY SAPPORO"?

"Sapporo City ICT Utilization Platform DATA-SMART CITY SAPPORO" exploité conjointement par Sapporo City et Sapporo Industrial Promotion Foundation est des données ouvertes et des mégadonnées appartenant aux secteurs public et privé en tant que plate-forme commune pour créer de l'innovation en utilisant les données. Nous collectons, gérons et fournissons. De plus, les données publiées sur ce site peuvent également être utilisées avec l'API standard CKAN.

Cela étant dit, "Calendrier de la journée de collecte des ordures ménagères de la ville de Sapporo" est ouvert au public ici. Le contenu de cette fois est d'essayer de l'incorporer dans Google Agenda.

Confirmation des données

Jetons un coup d'œil aux données qui sont réellement publiées.

Calendrier de la collecte des ordures ménagères de la ville de Sapporo (1er octobre 2017-8 octobre 2019)


Date,journée,Quartier Chuo 1,Quartier Chuo 2,Quartier Chuo 3,Quartier Chuo 4,Quartier Chuo 5,Quartier Chuo 6,Quartier Toyohei 1,Toyohei Ward 2,Quartier Toyohei 3,Quartier Toyohei 4,Quartier Kiyota 1,Quartier Kiyota 2,Quartier Kita 1,Kita Ward 2,Quartier Kita 3,Quartier Kita 4,Quartier Kita 5,Quartier Kita 6,Quartier Est 1,Quartier Est 2,Quartier Est 3,Quartier Est 4,Quartier Est 5,Quartier Est 6,Quartier Shiraishi 1,Quartier Shiraishi 2,Quartier Shiraishi 3,Quartier Shiraishi 4,Atsushi Ward 1,Quartier Atsushi 2,Quartier Atsushi 3,Quartier Atsushi 4,Quartier Minami 1,Quartier Minami 2,Quartier Minami 3,Quartier Minami 4,Quartier Minami 5,Quartier Minami 6,Quartier Minami 7,Nishi-ku 1,Nishi-ku 2,Nishi-ku 3,Nishi-ku 4,Quartier Teina 1,Quartier Teina 2,Quartier Teina 3
2017-10-01,journée,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
2017-10-02,Mois,1,1,1,10,9,8,10,8,9,1,1,1,1,1,1,10,8,9,1,1,1,10,8,9,9,2,8,1,1,1,1,1,1,1,1,11,9,9,8,1,1,1,9,8,11,8
2017-10-03,Feu,8,10,9,1,1,1,1,1,1,10,9,8,9,10,8,1,1,1,10,8,9,1,1,1,1,1,1,8,9,9,8,2,9,11,8,1,1,1,1,9,11,8,1,1,1,1
…

Calendrier des dates de collecte des déchets ménagers de la ville de Sapporo (1er octobre 2019-30 septembre 2020)


Date,journée,Quartier Chuo 1,Quartier Chuo 2,Quartier Chuo 3,Quartier Chuo 4,Quartier Chuo 5,Quartier Chuo 6,Quartier Toyohei 1,Toyohei Ward 2,Quartier Toyohei 3,Quartier Toyohei 4,Quartier Kiyota 1,Quartier Kiyota 2,Quartier Kita 1,Kita Ward 2,Quartier Kita 3,Quartier Kita 4,Quartier Kita 5,Quartier Kita 6,Quartier Est 1,Quartier Est 2,Quartier Est 3,Quartier Est 4,Quartier Est 5,Quartier Est 6,Quartier Shiraishi 1,Quartier Shiraishi 2,Quartier Shiraishi 3,Quartier Shiraishi 4,Atsushi Ward 1,Quartier Atsushi 2,Quartier Atsushi 3,Quartier Atsushi 4,Quartier Minami 1,Quartier Minami 2,Quartier Minami 3,Quartier Minami 4,Quartier Minami 5,Quartier Minami 6,Quartier Minami 7,Nishi-ku 1,Nishi-ku 2,Nishi-ku 3,Nishi-ku 4,Quartier Teina 1,Quartier Teina 2,Quartier Teina 3
2019-10-1,Feu,8,10,9,1,1,1,1,1,1,10,9,8,9,10,8,1,1,1,10,8,9,1,1,1,1,1,1,8,9,9,8,11,9,2,8,1,1,1,1,9,2,8,1,1,1,1
2019-10-2,eau,10,9,8,9,8,10,9,10,8,8,10,9,10,8,9,9,10,8,9,10,8,9,10,8,11,8,9,11,8,11,11,9,8,9,2,8,8,2,9,8,9,2,2,9,8,2
…

La première ligne affiche le nom d'élément de chaque colonne, et la deuxième et les lignes suivantes montrent le type de déchets quotidien pour chaque région par ID.

«Chuo-ku 1» et «Chuo-ku 2» après la 3ème colonne de la 1ère ligne sont décrits dans ici. C'est un numéro de zone.

Les ID de type de déchets sur la deuxième ligne et les suivantes sont les nombres résumés dans la «table de correspondance type / nombre de déchets».

Table de correspondance type / nombre de déchets


symbole,Graine d'ordures
1,Déchets brûlables
2,Ordures non brûlables
8,Bouteilles / canettes / animaux
9,Conteneur en plastique
10,Divers
11,Branches / feuilles / herbe
Vide,Aucune collection

Politique de mise en œuvre

Tout d'abord, j'ai décidé d'utiliser Python cette fois, et sur la base des données confirmées, j'ai décidé de l'implémenter avec la politique suivante.

contribution

--CSV du calendrier de la journée de collecte des ordures ménagères de la ville de Sapporo --Pour la lecture CSV, j'utiliserai pandas pour vous faciliter la tâche. Évidemment sur les spécifications: sweat_smile: --Code de région --Saisissez le numéro de zone comme option de ligne de commande.

production

Détails d'implémentation

Comme suit. Vous pouvez également le trouver sur github.

sapporo_gc_calendar.py


"""Rendre le calendrier de la journée de collecte des déchets ménagers de la ville de Sapporo ICI.

Rendre le calendrier de la journée de collecte des déchets ménagers de la ville de Sapporo ical.
Voir ci-dessous pour le fichier original.
https://ckan.pf-sapporo.jp/dataset/garbage_collection_calendar
"""
import sys
from argparse import ArgumentParser, FileType

import dateutil.parser
import pandas
from icalendar import Calendar, Event, vDate


def main():
    """Fonction principale."""
    p = ArgumentParser(description='Rendre le calendrier de la journée de collecte des déchets ménagers de la ville de Sapporo CSV ical')
    p.add_argument('-a', '--area', help='Nom de la zone')
    p.add_argument(
        'input',
        type=FileType(encoding='utf-8'), help='Calendrier de la journée de collecte des ordures ménagères de la ville de Sapporo CSV')
    args = p.parse_args()

    df = pandas.read_csv(args.input, dtype='object')

    if args.area is None:
        print('Nom de zone pouvant être saisi:', file=sys.stderr)
        for area in df.columns[2:]:
            print(' ' + area, file=sys.stderr)

        return

    if args.area not in df.columns[2:]:
        print('Nom de la région introuvable.', file=sys.stderr)
        return

    gctypes = {
        '1': 'Déchets brûlables',
        '2': 'Ordures non brûlables',
        '8': 'Bouteilles / canettes / animaux',
        '9': 'Conteneur en plastique',
        '10': 'Divers',
        '11': 'Branches / feuilles / herbe'
    }

    ical = Calendar()

    for datestr, gctype in zip(df['Date'], df[args.area]):
        if gctype in gctypes:
            dt = dateutil.parser.parse(datestr)
            event = Event()
            event.add('SUMMARY', gctypes[gctype])
            event.add('DTSTART', vDate(dt))
            event.add('DTEND', vDate(dt))
            event.add('TRANSP', 'TRANSPARENT')
            ical.add_component(event)

    print(ical.to_ical().decode('utf-8'))


if __name__ == '__main__':
    main()

Je n'ai pas fait grand-chose, mais je suis accro à un point.

Par conséquent, date.fromisoformat () ne peut pas être utilisé directement pour les fichiers du 1er octobre 2019 au 30 septembre 2020. Pour cette raison, j'essaye d'utiliser dateutil.parser.parse () de python-dateutil.

en conclusion

Importez le fichier au format icalendar généré à l'aide de cet outil dans le calendrier Google et vous avez terminé. Si vous le mettez dans le calendrier Google, vous pouvez l'utiliser pour diverses notifications, donc c'est pratique.

Recommended Posts

Importez "Sapporo City Household Garbage Collection Day Calendar" dans Google Agenda
Importez le calendrier obtenu à partir de "Schedule-kun" dans Google Agenda