Compare commits

..

No commits in common. "52173f384393cc0f43cb28da8f395f30df981a31" and "baac2fd2f1c44213f7896128a5a34fe9fec347ef" have entirely different histories.

5 changed files with 88 additions and 134 deletions

View File

@ -18,7 +18,7 @@ output_file = f'sources/{blog_folder}/converted/tags.json' # Fichier de sortie
html_output_folder = f'html-websites/{blog_folder}/tag' # Dossier de sortie pour les fichiers HTML html_output_folder = f'html-websites/{blog_folder}/tag' # Dossier de sortie pour les fichiers HTML
html_output_folder_index = f'html-websites/{blog_folder}/tags' # Dossier de sortie pour les fichiers HTML html_output_folder_index = f'html-websites/{blog_folder}/tags' # Dossier de sortie pour les fichiers HTML
excluded_tags = {'PROPERTIES', 'CREATED', 'ID', 'END'} excluded_tags = {'PROPERTIES', 'CREATED', 'ID', 'END'}
automatic_tagging_enabled = global_config['automatic_tagging_enabled'] automatic_tagging_enabled = True
count_not_tagged_files = 0 count_not_tagged_files = 0
count_orgfiles = 0 count_orgfiles = 0
@ -38,10 +38,62 @@ def find_org_files(directory):
return org_files return org_files
def add_tags_from_content(tags=None, file_content="", words_to_check=None):
"""
Ajoute des tags à l'ensemble `tags` si les mots correspondants sont trouvés dans le contenu du fichier.
:param tags: Ensemble de tags (set). Si None, un nouvel ensemble est créé (type set, optionnel).
:param file_content: Contenu du fichier (str).
:param words_to_check: Liste de mots à repérer (list). Si None, une liste vide est utilisée (type list, optionnel).
:return: Ensemble de tags mis à jour (set).
"""
# Initialiser l'ensemble tags s'il est None
if tags is None:
tags = set()
# Initialiser la liste words_to_check s'il est None
if words_to_check is None:
words_to_check = []
# Convertir le contenu du fichier en minuscules pour une recherche insensible à la casse
file_content_lower = file_content.lower()
# Parcourir chaque mot à vérifier
for word in words_to_check:
# Vérifier si le mot est présent dans le contenu du fichier
if word.lower() in file_content_lower:
# Ajouter le tag correspondant à l'ensemble de tags
tags.add(word)
return tags
def extract_tags_from_file(file_path, excluded_tags):
tags = set()
with open(file_path, 'r', encoding='utf-8') as file_content:
tag_found = False
for line in file_content:
if automatic_tagging_enabled:
tags = add_tags_from_content(tags, line, global_config['auto_tag_terms'])
# Check for orgmode tags :tag1:tag2:
if ':' in line:
for word in line.split():
if len(word) and word.startswith(':') and word.endswith(':'):
tag = word[1:-1]
if tag not in excluded_tags:
tags.add(tag)
tag_found = True
# Check for #+tags: tag1,tag2
if line.startswith('#+tags:'):
for tag in line[len('#+tags:'):].split(','):
tag = tag.strip()
if tag and tag not in excluded_tags:
tags.add(tag)
tag_found = True
if not tag_found:
print('no tag in the article', file_path)
return tags
def group_files_by_tags(org_files, excluded_tags): def group_files_by_tags(org_files, excluded_tags):

View File

@ -4,66 +4,6 @@
from utils import * from utils import *
from website_config import configs_sites from website_config import configs_sites
# trouver les articles précédents et suivants
import os
import re
# Fonction pour extraire le basename d'un fichier
def get_basename(file_name):
return os.path.splitext(file_name)[0]
# Chemin du dossier contenant les fichiers orgmode
directory = 'sources/qzine_blog/lang_fr'
# Dictionnaire pour stocker les informations des fichiers
files_dict = {}
# Parcourir les fichiers du dossier
for file_name in os.listdir(directory):
if file_name.endswith('.org'):
file_path = os.path.join(directory, file_name)
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
basename = get_basename(file_name)
date_str, annee, slug = find_year_and_slug_on_filename(basename)
tags = extract_tags_from_file(file_path, global_config['excluded_tags'])
boom = basename.split('__')
title = find_first_level1_title(content)
files_dict[f"{annee}/{slug}"] = {
'path': file_path,
'basename': basename,
'slug': slug,
'slug_with_year': f"{annee}/{slug}",
'date': boom[0],
'annee': annee,
'tags': tags,
'title': title,
'next': None,
'previous': None
}
# Trier les basenames par ordre décroissant
sorted_basenames = sorted(files_dict.keys(), reverse=True)
# Ajouter les noms des articles suivant et précédent
for i in range(len(sorted_basenames)):
basename = sorted_basenames[i]
if i > 0:
files_dict[basename]['previous'] = sorted_basenames[i - 1]
if i < len(sorted_basenames) - 1:
files_dict[basename]['next'] = sorted_basenames[i + 1]
# Afficher le dictionnaire pour vérification
for basename, info in files_dict.items():
print(f"Article: {basename}")
print(f" Path: {info['path']}")
print(f" tags: {info['tags']}")
print(f" title: {info['title']}")
print(f" Previous: {info['previous']}")
print(f" Next: {info['next']}")
print("-" * 40)
# parser = argparse.ArgumentParser(description="Générer un site Web à partir de fichiers HTML.") # parser = argparse.ArgumentParser(description="Générer un site Web à partir de fichiers HTML.")
# parser.add_argument("blog_name", help="Le chemin vers le dossier contenant les fichiers HTML.") # parser.add_argument("blog_name", help="Le chemin vers le dossier contenant les fichiers HTML.")
# parser.add_argument("--title", "-t", default="Mon site Web", help="Le titre du site Web.") # parser.add_argument("--title", "-t", default="Mon site Web", help="Le titre du site Web.")
@ -92,6 +32,6 @@ for basename, info in files_dict.items():
# trouver le bon slug avec l'année # trouver le bon slug avec l'année
# fichier = 'sources/tykayn_blog/lang_fr/20170708T095535_tkblog_918_7-techniques-geniales-pour-maximiser-son-malheur-au-quotidien.org' # fichier = 'sources/tykayn_blog/lang_fr/20170708T095535_tkblog_918_7-techniques-geniales-pour-maximiser-son-malheur-au-quotidien.org'
# fichier = '20170708T095535__techniques-geniales-pour-maximiser-son-malheur-au-quotidien.org' fichier = '20170708T095535__techniques-geniales-pour-maximiser-son-malheur-au-quotidien.org'
# datestr, slug, path = find_year_and_slug_on_filename(fichier) datestr, slug, path = find_year_and_slug_on_filename(fichier)
# print(datestr, slug, path) print(datestr, slug, path)

View File

@ -1,21 +1,40 @@
#!/bin/bash #!/bin/bash
# script de déploiement pour syncroniser le site web statique et sa capsule gemini # script de déploiement pour syncroniser le site web statique et sa capsule gemini
# on part du principe que ce dépot est cloné sur le serveur pour simplifier la mise à jour
# chemins sur le serveur : # chemins sur le serveur :
racine_sites_statiques="/poule/encrypted/www/" racine_sites_statiques="/poule/encrypted/www/"
images_inbox="$racine_sites_statiques/tykayn-inbox/blogs-output-pictures" images_inbox="/poule/encrypted/www/tykayn-inbox/blogs-output-pictures"
images_destination="$racine_sites_statiques/tykayn.fr/wp-content/uploads/i/" images_destination="/poule/encrypted/www/tykayn.fr/wp-content/uploads/i/"
racine_depot_git="/home/poule/encrypted/stockage-syncable/www/development/html/orgmode-to-gemini-blog" # on part du principe que ce dépot est cloné sur le serveur pour simplifier la mise à jour
racine_depot_git="/poule/encrypted/www/orgmode-to-gemini-blog"
# on copie les fichiers générés dans les dépots servis pour chaque nom de domaine # on copie les fichiers générés dans les dépots servis pour chaque nom de domaine
mv "$images_inbox/*" $images_destination mv "$images_inbox/*" $images_destination
# rsync -a $racine_depot_git/templates/style_general.css $racine_sites_statiques/cipherbliss.com/ #cp $racine_depot_git/templates/style_general.css $racine_sites_statiques/cipherbliss.com/
rsync -a $racine_depot_git/html-websites/cipherbliss_blog/* $racine_sites_statiques/cipherbliss.com/ #cp $racine_depot_git/html-websites/cipherbliss_blog/index.html $racine_sites_statiques/cipherbliss.com/
rsync -a $racine_depot_git/html-websites/tykayn_blog/* $racine_sites_statiques/tykayn.fr/ #cp $racine_depot_git/html-websites/cipherbliss_blog/lang_fr/ $racine_sites_statiques/cipherbliss.com -r
rsync -a $racine_depot_git/html-websites/qzine_blog/* $racine_sites_statiques/qzine.fr/ #cp $racine_depot_git/html-websites/cipherbliss_blog/lang_en/ $racine_sites_statiques/cipherbliss.com -r
#
#cp $racine_depot_git/templates/style_general.css $racine_sites_statiques/cipherbliss.com/
#cp $racine_depot_git/html-websites/tykayn_blog/index.html $racine_sites_statiques/tykayn.fr/
#cp $racine_depot_git/html-websites/tykayn_blog/lang_fr/ $racine_sites_statiques/tykayn.fr -r
#cp $racine_depot_git/html-websites/tykayn_blog/lang_en/ $racine_sites_statiques/tykayn.fr -r
#
#cp $racine_depot_git/templates/style_general.css $racine_sites_statiques/cipherbliss.com/
#cp $racine_depot_git/html-websites/qzine_blog/index.html $racine_sites_statiques/tykayn.fr/
#cp $racine_depot_git/html-websites/qzine_blog/lang_fr/ $racine_sites_statiques/qzine.fr -r
#cp $racine_depot_git/html-websites/qzine_blog/lang_en/ $racine_sites_statiques/tykayn.fr -r
#
#cp $racine_depot_git/templates/style_general.css $racine_sites_statiques/cipherbliss.com/
#cp $racine_depot_git/html-websites/dragonfeu_blog/index.html $racine_sites_statiques/dragonfeu_blog/
#cp $racine_depot_git/html-websites/dragonfeu_blog/lang_fr/ $racine_sites_statiques/dragonfeu_blog -r
#cp $racine_depot_git/html-websites/dragonfeu_blog/lang_en/ $racine_sites_statiques/dragonfeu_blog -r
chown -R www-data:www-data $racine_sites_statiques/tykayn.fr rsync -a /poule/encrypted/www/tykayn-inbox/cipherbliss_blog/* /poule/encrypted/www/cipherbliss.com/
chown -R www-data:www-data $racine_sites_statiques/cipherbliss.com rsync -a /poule/encrypted/www/tykayn-inbox/tykayn_blog/* /poule/encrypted/www/tykayn.fr/
chown -R www-data:www-data $racine_sites_statiques/qzine.fr rsync -a /poule/encrypted/www/tykayn-inbox/qzine_blog/* /poule/encrypted/www/qzine.fr/
chown -R www-data:www-data /poule/encrypted/www/tykayn.fr
chown -R www-data:www-data /poule/encrypted/www/cipherbliss.com
chown -R www-data:www-data /poule/encrypted/www/qzine.fr

View File

@ -173,61 +173,6 @@ def extract_body_content(html_content):
print('---- extract_body_content : no body found in this html') print('---- extract_body_content : no body found in this html')
return html_content return html_content
def add_tags_from_content(tags=None, file_content="", words_to_check=None):
"""
Ajoute des tags à l'ensemble `tags` si les mots correspondants sont trouvés dans le contenu du fichier.
:param tags: Ensemble de tags (set). Si None, un nouvel ensemble est créé (type set, optionnel).
:param file_content: Contenu du fichier (str).
:param words_to_check: Liste de mots à repérer (list). Si None, une liste vide est utilisée (type list, optionnel).
:return: Ensemble de tags mis à jour (set).
"""
# Initialiser l'ensemble tags s'il est None
if tags is None:
tags = set()
# Initialiser la liste words_to_check s'il est None
if words_to_check is None:
words_to_check = []
# Convertir le contenu du fichier en minuscules pour une recherche insensible à la casse
file_content_lower = file_content.lower()
# Parcourir chaque mot à vérifier
for word in words_to_check:
# Vérifier si le mot est présent dans le contenu du fichier
if word.lower() in file_content_lower:
# Ajouter le tag correspondant à l'ensemble de tags
tags.add(word)
return tags
def extract_tags_from_file(file_path, excluded_tags):
tags = set()
with open(file_path, 'r', encoding='utf-8') as file_content:
tag_found = False
for line in file_content:
if global_config['automatic_tagging_enabled']:
tags = add_tags_from_content(tags, line, global_config['auto_tag_terms'])
# Check for orgmode tags :tag1:tag2:
if ':' in line:
for word in line.split():
if len(word) and word.startswith(':') and word.endswith(':'):
tag = word[1:-1]
if tag not in excluded_tags:
tags.add(tag)
tag_found = True
# Check for #+tags: tag1,tag2
if line.startswith('#+tags:'):
for tag in line[len('#+tags:'):].split(','):
tag = tag.strip()
if tag and tag not in excluded_tags:
tags.add(tag)
tag_found = True
if not tag_found:
print('no tag in the article', file_path)
return tags
def remove_properties_section(text): def remove_properties_section(text):
pattern = r"<h1 id=\"article\">Article</h1>.+?</ul>" pattern = r"<h1 id=\"article\">Article</h1>.+?</ul>"

View File

@ -4,13 +4,11 @@ global_config = {
"slug_with_year": True, "slug_with_year": True,
# "show_logs": False, # "show_logs": False,
"show_logs": True, "show_logs": True,
"automatic_tagging_enabled": True,
"rebuild_files_filter": 2024, "rebuild_files_filter": 2024,
"source_files_extension": "org", "source_files_extension": "org",
"excluded_tags": ['PROPERTIES', 'CREATED', 'ID', 'END','CUSTOM_ID'],
# 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", "wtf", "yaoi", "yuri", "sondage", "entreprise", "ai", "photos",
"cosplay", "festival", "fanzine", "manif", "logiciel", "inktober", "cosplay", "festival", "fanzine", "manif", "logiciel", "inktober",
"kotlife", "féminisme", "fantasme", "art", "sociologie", "couple", "masturbation", "kotlife", "féminisme", "fantasme", "art", "sociologie", "couple", "masturbation",
"boobs", "sortirDesFossiles", "électrique", "maison", "GTD", "chat", "PIM","mastoart", "boobs", "sortirDesFossiles", "électrique", "maison", "GTD", "chat", "PIM","mastoart",