up doc, add tags to autodetect

This commit is contained in:
Tykayn 2024-11-16 00:21:38 +01:00 committed by tykayn
parent 63d51307d5
commit 530b8b7553
9 changed files with 49 additions and 33 deletions

View File

@ -13,7 +13,19 @@ Pour un article en langue En (english), sur le blog cipherbliss_blog, donner le
python3 new_article.py cipherbliss_blog en "Creation of a gemini blog" python3 new_article.py cipherbliss_blog en "Creation of a gemini blog"
``` ```
On peut se faire un alias de commande en bash pour n'avoir à remplir que le titre pour un blog donné. On peut se faire un alias de commande en bash pour n'avoir à remplir que le titre pour un blog donné.
### Inclure des images
Dans un article on souhaite avoir des thumbnails liées à leur version plus grande et hébergées sur notre site.
Placez vos images et autres documents de votre article dans le dossier, puis lancez la commande de conversion et déplacement de vos fichiers.
```commandline
python3 pictures_resize.py
```
Vos miniatures sont crées, et les images originales sont déplacées dans un dossier output/pictures/{année_courante}.
Un texte orgmode sera mis à disposition dans output/images_{année_courante].org pour les intégrer dans votre ou vos articles Org. Un préfixe de chemin relatif de ces images est configuré dans `website_config.py`
Il vous faudra placer les images sur votre serveur.
## prérequis pour installation ## prérequis pour installation

View File

@ -3,7 +3,15 @@ import re
from datetime import datetime from datetime import datetime
# Chemin du dossier source # Chemin du dossier source
source_dir = "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 = args.blog_dir
# Expression régulière pour extraire la date du contenu de l'article # Expression régulière pour extraire la date du contenu de l'article
date_regex = re.compile(r"\b(\d{14})\b") date_regex = re.compile(r"\b(\d{14})\b")
@ -12,7 +20,7 @@ date_regex = re.compile(r"\b(\d{14})\b")
org_files = [] org_files = []
# Parcourt le dossier source à la recherche de fichiers org-mode # Parcourt le dossier source à la recherche de fichiers org-mode
for root, dirs, files in os.walk(source_dir): for root, dirs, files in os.walk(blog_dir):
for file in files: for file in files:
if file.endswith(".org"): if file.endswith(".org"):
# Ouvre le fichier et recherche la première date dans le contenu de l'article # Ouvre le fichier et recherche la première date dans le contenu de l'article

View File

@ -56,7 +56,7 @@ def enrich_one_file(html_content: str, partials: dict = {"header_page": "", "foo
css_content = f.read() css_content = f.read()
css_content = "<style type='text/css'>{css_content}</style>" css_content = "<style type='text/css'>{css_content}</style>"
template_content["CSS_INLINE_CONTENT"] = css_content template_content["CSS_INLINE_CONTENT"] = css_content
template_content["PAGE_SLUG"] = "la_page" template_content["PAGE_SLUG"] = detect_slug_in_file_basename(file)
# remplir le template # remplir le template
html_content = f""" html_content = f"""

View File

@ -1,6 +1,5 @@
import argparse import argparse
import json import json
import os
from collections import defaultdict from collections import defaultdict
from utils import * from utils import *
@ -20,6 +19,7 @@ html_output_folder = f'html-websites/{blog_folder}/tags' # Dossier de sortie po
excluded_tags = {'PROPERTIES', 'CREATED', 'ID', 'END'} excluded_tags = {'PROPERTIES', 'CREATED', 'ID', 'END'}
automatic_tagging_enabled = True automatic_tagging_enabled = True
count_not_tagged_files = 0
count_orgfiles = 0 count_orgfiles = 0
@ -90,14 +90,13 @@ def extract_tags_from_file(file_path, excluded_tags, count_not_tagged_files=0):
tags.add(tag) tags.add(tag)
tag_found = True tag_found = True
if not tag_found: if not tag_found:
count_not_tagged_files = count_not_tagged_files + 1 count_not_tagged_files += 1
print('no tag in the article', file_path) print('no tag in the article', file_path)
return tags return tags
def group_files_by_tags(org_files, excluded_tags, count_not_tagged_files): def group_files_by_tags(org_files, excluded_tags):
tag_to_files = defaultdict(set) tag_to_files = defaultdict(set)
for file_path in org_files: for file_path in org_files:
tags = extract_tags_from_file(file_path, excluded_tags, count_not_tagged_files) tags = extract_tags_from_file(file_path, excluded_tags, count_not_tagged_files)
@ -139,7 +138,7 @@ def generate_html_pages_for_all_tags(tag_to_files, html_output_folder):
print('slug', slug) print('slug', slug)
print('basename_file', basename_file, nom_article) print('basename_file', basename_file, nom_article)
html_content += f" <li><a href='{slug}'>{nom_article}</a></li>\n" html_content += f" <li><a href='/{slug}'>{nom_article}</a></li>\n"
html_content += """ html_content += """
</ul> </ul>
@ -155,7 +154,6 @@ def generate_html_pages_for_all_tags(tag_to_files, html_output_folder):
print(f"Pages HTML générées dans {html_output_folder}") print(f"Pages HTML générées dans {html_output_folder}")
def trouver_slug_in_article(file_path_org): def trouver_slug_in_article(file_path_org):
""" """
Trouve le contenu de la variable #+slug: dans un fichier Org. Trouve le contenu de la variable #+slug: dans un fichier Org.
@ -180,15 +178,10 @@ def trouver_slug_in_article(file_path_org):
def generate_index_page(tag_to_files, html_output_folder): def generate_index_page(tag_to_files, html_output_folder):
index_content = f""" index_content = f"""
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Index des tags</title>
</head>
<body> <body>
<div id="tags_page">
<h1>Index des tags</h1> <h1>Index des tags</h1>
<ul> <ul>
""" """
sorted_tags = sorted(tag_to_files.items()) sorted_tags = sorted(tag_to_files.items())
@ -200,8 +193,8 @@ def generate_index_page(tag_to_files, html_output_folder):
index_content += """ index_content += """
</ul> </ul>
</div>
</body> </body>
</html>
""" """
index_file_path = os.path.join(html_output_folder, "index.html") index_file_path = os.path.join(html_output_folder, "index.html")
@ -213,9 +206,8 @@ def generate_index_page(tag_to_files, html_output_folder):
if __name__ == "__main__": if __name__ == "__main__":
org_files = find_org_files(directory_fr) org_files = find_org_files(directory_fr)
count_not_tagged_files = 0
tag_to_files = group_files_by_tags(org_files, excluded_tags, count_not_tagged_files) tag_to_files = group_files_by_tags(org_files, excluded_tags)
save_to_json(tag_to_files, output_file) save_to_json(tag_to_files, output_file)
generate_html_pages_for_all_tags(tag_to_files, html_output_folder) generate_html_pages_for_all_tags(tag_to_files, html_output_folder)
@ -223,3 +215,4 @@ if __name__ == "__main__":
print(f"Tags et fichiers associés ont été enregistrés dans {output_file}") print(f"Tags et fichiers associés ont été enregistrés dans {output_file}")
print(f"Pages HTML générées dans {html_output_folder}") print(f"Pages HTML générées dans {html_output_folder}")
print(f"Pages non tagguées: {count_not_tagged_files}")

View File

@ -48,7 +48,7 @@ Rédaction, conversion, completion des nouveaux articles, régénération des in
# Sources d'inspiration: # Sources d'inspiration:
Offpunk LazyBlog Dotclear, Wordpress, Hugo, Pélican Pandoc, PandocGmi Offpunk, LazyBlog, Dotclear, Wordpress, Hugo, Pélican, Pandoc, PandocGmi
=> https://github.com/njamescouk/pandocGmi/tree/master https://github.com/njamescouk/pandocGmi/tree/master => https://github.com/njamescouk/pandocGmi/tree/master https://github.com/njamescouk/pandocGmi/tree/master
# Roadmap # Roadmap
@ -63,7 +63,5 @@ Offpunk LazyBlog Dotclear, Wordpress, Hugo, Pélican Pandoc, PandocGmi
# Fait # Fait
* navigation sur les pages d'article * navigation sur les pages d'article
* gestion des langues dans la source et la destination
-gestion des langues dans la source et la destination
* gestion multi site et multi langue * gestion multi site et multi langue

View File

@ -27,7 +27,7 @@
</head> </head>
<body> <body>
<div id="page" class="page__la_page"> <div id="page" class="page__None">
<header id="masthead" class="site-header"> <header id="masthead" class="site-header">
<div class="header-image" style="background: url(https://www.cipherbliss.com/wp-content/uploads/2016/11/bg.jpg)"> <div class="header-image" style="background: url(https://www.cipherbliss.com/wp-content/uploads/2016/11/bg.jpg)">
<a href="/"> <a href="/">

View File

@ -27,7 +27,7 @@
</head> </head>
<body> <body>
<div id="page" class="page__la_page"> <div id="page" class="page__None">
<header id="masthead" class="site-header"> <header id="masthead" class="site-header">
<div class="header-image" style="background: url(https://www.cipherbliss.com/wp-content/uploads/2016/11/bg.jpg)"> <div class="header-image" style="background: url(https://www.cipherbliss.com/wp-content/uploads/2016/11/bg.jpg)">
<a href="/"> <a href="/">
@ -79,7 +79,7 @@
<main class="body-wrap boxed-container"> <main class="body-wrap boxed-container">
<article class="content"> <article class="content">
<div id="page" class="page__la_page"> <div id="page" class="page__None">
<header id="masthead" class="site-header"> <header id="masthead" class="site-header">
<div class="header-image" style="background: url(https://www.cipherbliss.com/wp-content/uploads/2016/11/bg.jpg)"> <div class="header-image" style="background: url(https://www.cipherbliss.com/wp-content/uploads/2016/11/bg.jpg)">
<a href="/"> <a href="/">

View File

@ -2,9 +2,9 @@
# création de nouvel article de blog # création de nouvel article de blog
# exemple de commande # exemple de commande
# python new_article.py cipherbliss_blog fr "Création d'un blog gemini" # python new_article.py cipherbliss_blog fr "Création d'un blog gemini"
import argparse
import os import os
from datetime import datetime from datetime import datetime
import argparse
# Configuration des arguments de la ligne de commande # Configuration des arguments de la ligne de commande
parser = argparse.ArgumentParser(description="Générer un nouvel article en mode orgmode.") parser = argparse.ArgumentParser(description="Générer un nouvel article en mode orgmode.")

View File

@ -7,7 +7,12 @@ global_config = {
"rebuild_files_filter": 2024, "rebuild_files_filter": 2024,
"source_files_extension": "org", "source_files_extension": "org",
# controlled vocabulary to find tags automatically # controlled vocabulary to find tags automatically
"auto_tag_terms": ["illustration", "tuto", "nsfw", "bd", "récit", "science"] "auto_tag_terms": ["illustration", "tuto", "nsfw", "bd", "récit", "science",
"wtf","yaoi","yuri","sondage","entreprise","ai","photos",
"cosplay","festival","fanzine","manif","logiciel","inktober",
"kotlife","féminisme","fantasme","art","sociologie","couple","masturbation",
"boobs","sortirDesFossiles","électrique","maison","GTD","chat","PIM",
"openstreetmap","sauvegarde","mastodon","voyages","bouffe"]
} }
configs_sites = { configs_sites = {
"cipherbliss_blog": { "cipherbliss_blog": {