Table des matières
J’ai cherché comment avoir des statistiques avec Hugo, et je suis tombé sur le site de bacardi55.io
Je me suis lancé dans un script python pour générer une image.
Le script va:
- Chercher dans tous les fichiers de mon dossier content/posts qui contient mes articles
- Lire les informations dans l’entête (date)
- Créer un Dataframe Panda pour stocker les informations
- Faire une image des statistiques
import os
import frontmatter
from collections import defaultdict
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
def articles_per_month(content_dir):
monthly_stats = defaultdict(int)
for root, dirs, files in os.walk(content_dir):
for file in files:
if file.endswith(".md"):
with open(os.path.join(root, file), 'r', encoding='utf-8') as f:
post = frontmatter.load(f)
if 'date' in post:
date_value = post['date']
# Convertir en chaîne si nécessaire
if not isinstance(date_value, str):
date_value = str(date_value)
try:
# Conversion en datetime
date = datetime.fromisoformat(date_value)
# Regrouper par mois
month_key = date.strftime('%Y-%m')
monthly_stats[month_key] += 1
except ValueError:
print(f"Format de date invalide : {date_value}")
return monthly_stats
content_dir = "content/posts"
stats = articles_per_month(content_dir)
#for month, count in sorted(stats.items()):
# print(f"{month} : {count} articles")
# Transformer les données en DataFrame Pandas
df = pd.DataFrame(list(stats.items()), columns=["Mois", "Articles"])
df['Mois'] = pd.to_datetime(df['Mois']) # Convertir les mois en datetime
df = df.sort_values("Mois") # Trier par ordre chronologique
# Afficher le DataFrame
#print(df)
# Exporter en fichier CSV
# df.to_csv("articles_par_mois.csv", index=False)
plt.figure(figsize=(10, 5))
plt.plot(df['Mois'], df['Articles'], marker='o')
plt.title('Nombre d\'articles publiés par mois')
plt.xlabel('Mois')
plt.ylabel('Nb articles')
plt.grid()
plt.savefig('stats.png')
#plt.show()
plt.close()
Cela donne:
Et comme je suis feignant, j’ai integré dans mon script Hugo le générateur de statistiques.
#!/bin/bash
# generation de l'image des statistiques
python3 analyse.py
# compression de l'image et cp dans le dossier apropos
cwebp -q 90 stats.png -o stats.webp
rm stats.png
mv stats.webp content/pages/apropos/stats.webp
# creation du site
hugo --minify
# script pour la recherche
python3 -m pagefind --site "public"
Métadonnées
Posté le: 30.12.2024
Nombre de mots: 297
Temps de lecture: 2 minutes
Cet article fait partie de la série: Hugo
Syncthing Mon Article Personnalisé