orgmode-to-gemini-blog/atom_generate.py

65 lines
3.1 KiB
Python
Raw Normal View History

2024-11-02 18:30:04 +01:00
import os
2025-02-23 16:59:59 +01:00
import json
2024-11-02 18:30:04 +01:00
from datetime import datetime
2024-11-16 00:21:38 +01:00
import argparse
2025-02-23 16:59:59 +01:00
from utils import get_blog_template_conf
2024-11-18 11:18:50 +01:00
from website_config import configs_sites
2024-11-16 00:21:38 +01:00
# Configuration des arguments de la ligne de commande
2025-02-23 16:59:59 +01:00
parser = argparse.ArgumentParser(description="Générer un flux Atom des articles.")
2025-02-23 15:50:56 +01:00
parser.add_argument("blog", help="Le nom du dossier de blog.")
2024-11-16 00:21:38 +01:00
args = parser.parse_args()
2025-02-23 16:59:59 +01:00
template_content = get_blog_template_conf(args.blog)
website_ndd = template_content['NDD']
2024-11-02 18:30:04 +01:00
2025-02-23 16:59:59 +01:00
# Charger les données du fichier articles_info.json
json_file = f'sources/{args.blog}/build/articles_info.json'
with open(json_file, 'r', encoding='utf-8') as f:
articles_info = json.load(f)
2025-01-29 14:41:34 +01:00
2025-02-23 16:59:59 +01:00
# Trier les articles par date décroissante
sorted_articles = sorted(articles_info.values(), key=lambda x: x['date'], reverse=True)
2025-02-23 15:50:56 +01:00
2025-02-23 19:12:15 +01:00
# Convert the date string to a valid ISO format
def convert_to_iso(date_str):
# Check if the string contains 'T' and replace it with a single 'T'
if 'T' in date_str:
date_str = date_str.replace('T', '', 1) # Replace only the first occurrence
return f"{date_str[:4]}-{date_str[4:6]}-{date_str[6:8]}T{date_str[8:10]}:{date_str[10:12]}:{date_str[12:14]}"
2024-11-02 18:30:04 +01:00
# Génération du flux Atom
2025-02-23 16:59:59 +01:00
with open(f"html-websites/{args.blog}/feed/index.xml", "w", encoding="utf-8") as f:
2024-11-02 18:30:04 +01:00
f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
f.write('<feed xmlns="http://www.w3.org/2005/Atom">\n')
2025-02-23 16:59:59 +01:00
f.write(f' <title>Flux Atom des articles de {args.blog}</title>\n')
f.write(f' <link href="{website_ndd}/feed"/>\n')
2025-02-23 19:12:15 +01:00
f.write(f' <updated>{datetime.fromisoformat(convert_to_iso(sorted_articles[0]["date"])).strftime("%Y-%m-%dT%H:%M:%S+00:00")}</updated>\n')
2025-01-03 22:58:47 +01:00
f.write(' <id>tag:' + website_ndd + ',2023:/feed</id>\n')
f.write(' <author>\n')
2025-02-23 16:59:59 +01:00
f.write(f' <name>{configs_sites[args.blog]["AUTHOR"]}</name>\n')
f.write(f' <email>{configs_sites[args.blog]["EMAIL"]}</email>\n')
2025-01-03 22:58:47 +01:00
f.write(' </author>\n')
f.write(f' <link rel="self" href="{website_ndd}/feed"/>\n')
2025-02-23 19:12:15 +01:00
print(f"Génération du flux Atom pour {len(sorted_articles)} articles")
2025-02-23 16:59:59 +01:00
# Boucle des articles
for article in sorted_articles:
f.write(' <entry>\n')
f.write(f' <id>tag:{website_ndd},2023:{article["slug"]}</id>\n')
f.write(f' <title>{article["title"]}</title>\n')
f.write(f' <link href="{website_ndd}/{article["slug"]}"/>\n')
f.write(' <content type="html"><![CDATA[\n')
f.write(f' {article["html_content"]}\n')
f.write(' ]]></content>\n')
f.write(f' <summary>{article.get("extract", "")}</summary>\n')
2025-02-23 19:12:15 +01:00
f.write(f' <published>{datetime.fromisoformat(convert_to_iso(article["date"])).strftime("%Y-%m-%dT%H:%M:%S+00:00")}</published>\n')
f.write(f' <updated>{datetime.fromisoformat(convert_to_iso(article["date"])).strftime("%Y-%m-%dT%H:%M:%S+00:00")}</updated>\n')
2025-02-23 16:59:59 +01:00
f.write(' <author>\n')
f.write(f' <name>{configs_sites[args.blog]["AUTHOR"]}</name>\n')
f.write(f' <email>{configs_sites[args.blog]["EMAIL"]}</email>\n')
f.write(' </author>\n')
f.write(' </entry>\n')
f.write('</feed>')