orgmode-to-gemini-blog/new_article.py

124 lines
4.3 KiB
Python
Raw Normal View History

2024-11-03 12:32:08 +01:00
#!/usr/bin/env python3
2025-02-22 00:06:03 +01:00
# Création de nouvel article de blog
# Exemple de commande :
# python new_article.py [blog_dir] [lang] "article_title"
2024-11-11 23:20:04 +01:00
import os
2024-11-03 12:32:08 +01:00
from datetime import datetime
2024-11-16 00:21:38 +01:00
import argparse
2025-02-28 16:37:59 +01:00
import sys
2024-11-03 12:32:08 +01:00
# Configuration des arguments de la ligne de commande
parser = argparse.ArgumentParser(description="Générer un nouvel article en mode orgmode.")
2025-02-22 18:55:01 +01:00
parser.add_argument("--title", nargs="?", help="Le titre de l'article.")
parser.add_argument("--lang", nargs="?", default="fr", help="La langue de l'article (par défaut : fr pour Français ou en pour English).")
parser.add_argument("--blog_dir", nargs="?", default=None, help="Le nom du dossier de blog (sous source/). Si non spécifié, une liste de dossiers disponibles sera proposée.")
parser.add_argument("--year_prefix_in_slug", nargs="?", default=True, help="Ajouter l'année au début du slug.")
2024-11-03 12:32:08 +01:00
args = parser.parse_args()
2025-02-22 00:06:03 +01:00
# Définition du dossier de base pour les blogs
base_blog_dir = "sources/"
year_prefix_in_slug = args.year_prefix_in_slug
2025-02-22 00:06:03 +01:00
# Si aucun dossier de blog n'est spécifié, proposer une sélection
if args.blog_dir is None:
available_dirs = [d for d in os.listdir(base_blog_dir) if os.path.isdir(os.path.join(base_blog_dir, d))]
if not available_dirs:
print("Aucun dossier de blog trouvé sous", base_blog_dir)
exit(1)
print("Sélectionnez un dossier de blog :")
for i, dir_name in enumerate(available_dirs, start=1):
print(f"{i}. {dir_name}")
choice = input("Entrez le numéro de votre choix : ")
try:
choice = int(choice)
if choice < 1 or choice > len(available_dirs):
raise ValueError
args.blog_dir = available_dirs[choice - 1]
except ValueError:
print("Choix invalide. Annulation.")
exit(1)
2025-02-22 18:55:01 +01:00
if args.title is None or not len(args.title):
2025-02-22 00:06:03 +01:00
args.title = input("Entrez le titre de votre nouvel article: ")
if args.title is None:
print("Vous n'avez pas choisi de titre d'article")
exit(1)
# Vérification de l'existence du dossier de blog
blog_path = os.path.join(base_blog_dir, args.blog_dir)
if not os.path.exists(blog_path):
print(f"Le dossier de blog '{args.blog_dir}' n'existe pas sous '{base_blog_dir}'.")
create_dir = input("Créer le dossier? (o/n) : ")
if create_dir.lower() == 'o':
os.makedirs(blog_path)
print(f"Dossier '{args.blog_dir}' créé sous '{base_blog_dir}'.")
else:
print("Annulation de la création de l'article.")
exit(1)
2024-11-03 12:32:08 +01:00
# Génération du nom de fichier org avec la date et le slug
now = datetime.now()
2024-11-08 17:40:06 +01:00
# date_string = now.strftime("%Y-%m-%d")
date_string = now.strftime("%Y%m%d%H%M%S")
2024-11-03 12:42:10 +01:00
date_string_full = now.strftime("%Y-%m-%d %H:%M:%S")
2024-11-08 17:40:06 +01:00
# date_string_full = now.strftime("%Y%m%d%H%M%S")
2025-02-22 00:06:03 +01:00
slug = ''
if args.title:
slug = args.title.lower().replace(" ", "-")
2024-11-28 23:24:55 +01:00
slug = slug.replace("--", "-")
slug = slug.replace("--", "-")
if year_prefix_in_slug:
schema_slug = f"{now.year}/{slug}"
else:
schema_slug = slug
2025-02-28 16:37:59 +01:00
# Obtenir le chemin absolu du répertoire du script
script_dir = os.path.dirname(os.path.abspath(__file__))
2024-11-11 23:20:04 +01:00
2025-02-28 16:37:59 +01:00
# Ajouter le répertoire du script au path Python
sys.path.append(script_dir)
# Maintenant importer make_article
try:
from utils.maker import make_article
except ImportError:
print("Erreur: Impossible de trouver le module maker.py dans le dossier utils/")
print("Vérifiez que le fichier utils/maker.py existe et est accessible")
sys.exit(1)
2024-11-03 12:32:08 +01:00
2024-11-03 12:42:10 +01:00
import uuid
def create_uuid_property():
uuid_value = uuid.uuid4()
2025-02-23 16:59:59 +01:00
return uuid_value
2024-11-03 12:42:10 +01:00
2025-02-28 16:37:59 +01:00
# Créer le dossier de langue s'il n'existe pas
lang_dir = os.path.join(base_blog_dir, args.blog_dir, f"lang_{args.lang}")
if not os.path.exists(lang_dir):
os.makedirs(lang_dir)
print(f"Dossier de langue '{lang_dir}' créé.")
2025-02-28 16:37:59 +01:00
# Définir le nom du fichier
filename = os.path.join(lang_dir, f"{date_string}__{slug}.org")
# Écriture du fichier org
2025-02-28 16:37:59 +01:00
with open(filename, "w") as f:
uuid = create_uuid_property()
config={
'uuid': uuid,
'slug': slug,
'title': args.title,
'date_string_full': date_string_full,
'date_string': date_string,
'schema_slug': schema_slug,
'blog_dir': args.blog_dir,
2025-02-28 16:37:59 +01:00
'lang': args.lang, # Ajout de la langue dans la config
}
f.write(make_article(config))
2024-11-18 16:01:34 +01:00
2024-11-11 23:20:04 +01:00
print(f"Le fichier '{filename}' a été créé avec succès.")