Rappel des dates d'anniversaire pour nerds
Vous avez le plus grand mal à penser aux dates d'anniversaire de votre famille et de vos amis ?
Pour compliquer les choses, ceux-ci se reproduisent de manière exponentielle ?(et la génération des petits enfants commence à peine)
Vous avez renoncé à facebook même si vous trouviez bien pratique de trouver toutes ces infos au même endroit ?
Vous passez plus de temps le nez dans la fenêtre sombre d'un terminal plutôt que dans les livres de photos souvenir ?
VOICI LA SOLUTION
anniv.py (cliquer pour afficher le code)
- anniv.py
#! /usr/bin/env python3 # -*- coding: utf-8 -*- bdays = """\ 23-8-1754 Louis XVI 24-8-1948 Jean-Michel Jarre 15-6-1943 Johnny Hallyday 28-9-1934 Brigitte Bardot """ from datetime import date def str2date(str_date): d, m, y = str_date.split('-') return (int(y), int(m), int(d)) def find_next(bdays, md): if not bdays: return [] match = [] for l in bdays: next_date = (l[0][1], l[0][2]) if len(match): # Check if there is another bday the same day if next_date == (match[0][0][1], match[0][0][2]): match.append(l) else: break elif next_date >= md: match.append(l) return match if len(match) else find_next(bdays, (0,0)) if __name__ == "__main__": converted = [] for l in bdays.splitlines(): tokens = l.strip().split() if tokens: converted.append((str2date(tokens[0]), ' '.join(tokens[1:]))) # Sort by month and day sorted_bdays = sorted(converted, key=lambda d: (d[0][1], d[0][2])) today = date.today() md = (today.month, today.day) next_bdays = find_next(sorted_bdays, md) for bday in next_bdays: bmd = (bday[0][1], bday[0][2]) if bmd == md: print(f"* Aujourd'hui : Anniversaire de {bday[1]} ({today.year-bday[0][0]} ans)\n") else: isnextyear = bmd < md dt = date(today.year if not isnextyear else today.year+1, bmd[0], bmd[1]) - today print(f"* Anniversaire de {bday[1]} dans {dt.days} jours ({today.year-bday[0][0]} ans)\n")
Utilisation
Téléchargez le script çi-dessus et copiez-le à l'endroit de votre choix sur votre système.
Éditez le script pour ajouter les dates d'anniversaire et les noms de vos amis ou autres personnalités préférés.
Il est important de respecter format de la date JJ-MM-AAAA
.
L'ordre chronologique n'a pas d'importance (la liste est triée à chaque exécution du script).
Vous pouvez lancer le script dans un terminal avec la commande :
$ python3 anniv.py
Mais bon comme ça, en brut, c'est un peu austère. Pour un plus bel effet vous pouvez utiliser l'appli cowsay
Pour installer cowsay (moins de 100 Ko) :
$ sudo apt install cowsay
Nous pouvons maintenant afficher la sortie de notre script au travers cowsay :
$ python3 anniv.py | cowsay ______________________________________ / Aujourd'hui : Anniversaire de Michel \ \ 7 ans / -------------------------------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||