{{tag>python code linux gw}}
====== 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**
#! /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 |
|| ||
===== Afficher le message à l'ouverture du terminal =====
Dans un terminal :
$ echo "python3 ~/anniv.py | cowsay" >> ~/.bashrc
Remplacer l'emplacement du script ''~/anniv.py'' en fonction de l'endroit où vous l'avez mis sur votre machine.
{{:ressource:code:python:cowsay.png|}}