Compare commits
No commits in common. "52173f384393cc0f43cb28da8f395f30df981a31" and "baac2fd2f1c44213f7896128a5a34fe9fec347ef" have entirely different histories.
52173f3843
...
baac2fd2f1
@ -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):
|
||||||
|
66
testing.py
66
testing.py
@ -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)
|
@ -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
|
||||||
|
55
utils.py
55
utils.py
@ -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>"
|
||||||
|
@ -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",
|
||||||
|
Loading…
Reference in New Issue
Block a user