import os import re from datetime import datetime # Chemin du dossier source import argparse # Configuration des arguments de la ligne de commande parser = argparse.ArgumentParser(description="Générer un nouvel article en mode orgmode.") parser.add_argument("blog_dir", help="Le nom du dossier de blog.") args = parser.parse_args() blog_dir = 'sources/'+args.blog_dir # Expression régulière pour extraire la date du contenu de l'article date_regex = re.compile(r"\b(\d{14})\b") # Liste des fichiers org-mode trouvés org_files = [] # Parcourt le dossier source à la recherche de fichiers org-mode for root, dirs, files in os.walk(blog_dir): for file in files: if file.endswith(".org"): # Ouvre le fichier et recherche la première date dans le contenu de l'article with open(os.path.join(root, file), "r", encoding="utf-8") as f: content = f.read() match = date_regex.search(content) if match: date = datetime.strptime(match.group(1), "%Y-%m-%d") # Ajoute le fichier à la liste avec sa date correspondante org_files.append((date, os.path.join(root, file))) # Tri des fichiers par ordre décroissant de date org_files.sort(reverse=True) # Génération du flux Atom atom_feed = {"title": "Flux Atom des articles GMI", "link": "http://www.example.com/atom", "updated": org_files[0][0].strftime("%Y-%m-%dT%H:%M:%SZ"), "entries": []} for date, file in org_files: # Parse le fichier org-mode pour extraire le titre, la description et la date de publication with open(file, "r", encoding="utf-8") as f: content = f.read() title = re.search(r"\*+ (.+)\n", content).group(1) description = re.search(r"\n+ (.+)\n", content, re.DOTALL).group(1) published = date.strftime("%Y-%m-%dT%H:%M:%SZ") # Ajoute l'article au flux Atom atom_entry = {"title": title, "link": file, "summary": description, "published": published} atom_feed["entries"].append(atom_entry) if published > atom_feed["updated"]: atom_feed["updated"] = published # Enregistrement du flux Atom dans un fichier with open("atom.xml", "w", encoding="utf-8") as f: f.write('\n') f.write('\n') f.write(f' {atom_feed["title"]}\n') f.write(f' \n') f.write(f' {atom_feed["updated"]}\n') for entry in atom_feed["entries"]: f.write(' \n') f.write(f' {entry["title"]}\n') f.write(f' \n') f.write(f' {entry["summary"]}\n') f.write(f' {entry["published"]}\n') f.write(' \n') f.write('')