1

Page de statistiques

This commit is contained in:
2025-11-28 01:47:10 +01:00
parent 38926267a3
commit fd27dc7fb6
47 changed files with 3278 additions and 86 deletions

View File

@@ -0,0 +1,88 @@
#!/usr/bin/env python3
import sys
import json
import os
from collections import defaultdict
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
PARENT_DIR = os.path.abspath(os.path.join(CURRENT_DIR, os.pardir))
if CURRENT_DIR not in sys.path:
sys.path.append(CURRENT_DIR)
if PARENT_DIR not in sys.path:
sys.path.append(PARENT_DIR)
from common import load_articles, MONTH_LABELS, write_result # noqa: E402
def main():
try:
payload = json.load(sys.stdin)
except Exception as exc: # noqa: BLE001
print(f"Failed to read JSON: {exc}", file=sys.stderr)
sys.exit(1)
content_dir = payload.get("contentDir") or "content"
output_path = payload.get("outputPath")
public_path = payload.get("publicPath")
articles = load_articles(content_dir)
buckets = defaultdict(lambda: {"words": 0, "count": 0})
years = set()
total_words = 0
total_articles = 0
for article in articles:
date = article.get("date")
if not date:
continue
year = date.year
month = date.month
key = (year, month)
years.add(year)
buckets[key]["words"] += article.get("wordCount") or 0
buckets[key]["count"] += 1
total_words += article.get("wordCount") or 0
total_articles += 1
month_numbers = list(range(1, 13))
labels = [MONTH_LABELS[m - 1] for m in month_numbers]
sorted_years = sorted(years)
series = []
for year in sorted_years:
values = []
for month in month_numbers:
entry = buckets.get((year, month))
if not entry or entry["count"] == 0:
values.append(0)
else:
values.append(round(entry["words"] / entry["count"]))
series.append({"label": str(year), "values": values})
average = round(total_words / total_articles) if total_articles > 0 else 0
try:
from render_stats_charts import render_words_per_article, setup_rcparams
except ImportError as exc: # noqa: BLE001
print(f"Failed to import renderer: {exc}", file=sys.stderr)
sys.exit(1)
setup_rcparams()
render_words_per_article({"labels": labels, "series": series, "title": "Moyenne de mots par article (par mois)"}, output_path)
write_result(
{
"image": public_path,
"meta": {
"average": average,
"articles": total_articles,
},
}
)
if __name__ == "__main__":
main()