diff --git a/linking_articles_prev_next.py b/linking_articles_prev_next.py index f533647e..30a29281 100644 --- a/linking_articles_prev_next.py +++ b/linking_articles_prev_next.py @@ -17,7 +17,7 @@ import time # Importer le module time start_time = time.time() # Configs pour tester generate_linkings_json = True -generate_articles = True + # Configurer argparse pour prendre le blog en argument @@ -48,7 +48,21 @@ destination_html = f'html-websites/{args.blog}/' destination_gmi = f'gemini-capsules/{args.blog}/' # Dictionnaire pour stocker les informations des fichiers -files_dict = {} +# Vérifier si le fichier JSON existe déjà +json_file = destination_json + '/articles_info.json' +if os.path.exists(json_file): + print(f"Chargement du fichier JSON existant: {json_file}") + try: + with open(json_file, 'r', encoding='utf-8') as f: + files_dict = json.load(f) + print(f"Fichier JSON chargé avec succès, {len(files_dict)} articles trouvés") + except Exception as e: + print(f"Erreur lors du chargement du fichier JSON: {e}") + files_dict = {} +else: + print("Aucun fichier JSON existant trouvé") + files_dict = {} + def get_first_picture_url(content): # Utiliser une expression régulière pour trouver la première URL d'image dans le contenu @@ -100,11 +114,12 @@ Navigation: print(f"Erreur lors de la sauvegarde du fichier : {e}") return output +count_articles = len(os.listdir(directory)) +counter=0 +rebuild_counter = 0 +pandoc_runs_counter = 0 + if generate_linkings_json : - count_articles = len(os.listdir(directory)) - counter=0 - rebuild_counter = 0 - pandoc_runs_counter = 0 print(f"Génération des liens entre articles pour {count_articles} articles") print(f"run_pandoc: {run_pandoc}") @@ -180,9 +195,19 @@ if generate_linkings_json : if rebuild_this_article_html: rebuild_counter += 1 + + # Garder le contenu HTML existant si déjà présent + if f"{annee}/{slug}" in files_dict and 'html_content' in files_dict[f"{annee}/{slug}"]: + html_content = files_dict[f"{annee}/{slug}"]['html_content'] + html_content_without_h1 = files_dict[f"{annee}/{slug}"]['html_content_without_h1'] + else: + html_content_without_h1 = re.sub(r'

.*?

', '', html_content) + + if run_pandoc and rebuild_this_article_html or force_html_regen: # convertir le contenu d'article org vers html - print(f"BRRRRRRRRRRRR pandoc time {time.strftime('%H:%M:%S')} : Conversion de {file_name} en html") + print(f"\033[91mBRRRRRRRRRRRRR pandoc time {time.strftime('%H:%M:%S')} : Conversion de {file_name} en html\033[0m") + html_content = pypandoc.convert_text(content_without_h1, 'html', format='org') pandoc_runs_counter += 1 else: @@ -195,6 +220,8 @@ if generate_linkings_json : + + files_dict[f"{annee}/{slug}"] = { 'path': file_path, 'basename': basename, @@ -213,7 +240,7 @@ if generate_linkings_json : 'last_html_build': last_html_build_time, 'last_gemini_build': last_gemini_build, 'org_content': content, # Contenu Org original - 'html_content_without_h1': re.sub(r'

.*?

', '', html_content), # Contenu HTML converti sans le titre de premier niveau + 'html_content_without_h1': html_content_without_h1, # Contenu HTML converti sans le titre de premier niveau 'html_content': html_content # Contenu first_picture_urlHTML converti } @@ -253,9 +280,14 @@ for i in range(len(sorted_basenames)): os.makedirs(destination_json, exist_ok=True) json_file=destination_json+'/articles_info.json' -with open( json_file, 'w', encoding='utf-8') as json_file: - files_dict_serialized = json.dumps(files_dict, ensure_ascii=False, indent=4) - json_file.write(files_dict_serialized) + + + +if pandoc_runs_counter > 0 or not os.path.exists(json_file): + print(f"\033[91m Les articles ont changé, Génération du json {json_file} \033[0m") + with open( json_file, 'w', encoding='utf-8') as json_file: + files_dict_serialized = json.dumps(files_dict, ensure_ascii=False, indent=4) + json_file.write(files_dict_serialized) @@ -344,8 +376,15 @@ Pages: f.write(output_index_gmi) print(f"Page d'index gemini générée dans {gmi_index_file}") -# Appel de la fonction pour générer la page d'index -generate_blog_index(destination_json + '/articles_info.json', 'templates/html/index.html.jinja', destination_html + '/index.html') + +# Générer la page d'index seulement si des articles ont été convertis +# if pandoc_runs_counter > 0: + # Appel de la fonction pour générer la page d'index +generate_blog_index(destination_json + '/articles_info.json', 'templates/html/index.html.jinja', destination_html + 'index.html') + +print(f"\033[91m index régénéré {destination_html}index.html \033[0m") +# else: + # print("Aucun article n'a été converti, la page d'index n'est pas régénérée") def generate_article_pages(json_file, template_file, output_dir): @@ -395,7 +434,7 @@ def generate_article_pages(json_file, template_file, output_dir): f.write(output_html) print('generate_article_pages: fin de génération de l index') -if generate_articles: +if pandoc_runs_counter: # Appel de la fonction pour générer les pages des articles generate_article_pages(destination_json + '/articles_info.json', 'templates/html/article.html.jinja', destination_html)