rewriter of gemini links

This commit is contained in:
Tykayn 2025-02-28 19:48:30 +01:00 committed by tykayn
parent e73398b3b2
commit 1574a22100
4 changed files with 33 additions and 13 deletions

View file

@ -164,7 +164,7 @@ def generate_index_page(tag_to_files, html_output_folder):
with open(index_file_path, 'w', encoding='utf-8') as index_file:
index_file.write(output_html)
print(f"Page d'index générée dans {index_file_path}")
print(f"Page d'index des tags générée dans {index_file_path}")
if __name__ == "__main__":

View file

@ -33,7 +33,9 @@ J'incite les gens que je connais et fréquente en festival manga / fanzine / des
Je participe à un évènement de l'école d'ingé d'Every où le thème est "les blogs" avec d'autres gens qui le pratiquent depuis un bon bout de temps, genre Korben, Sauvane, etc.
J'avais développé un script de migration des billets en base de données pour aller vers Wordpress.
Je constate aussi que le temps avançant, de plus en plus d'artistes qui avaient ouvert un blog sur une plateforme comme Livejournal, overblog ou d'autres endroits exotiques disposant de flux RSS ne mettent plus leurs oeuvres en ligne (sauf Loish <3 https://blog.loish.net )
Je constate aussi que le temps avançant, de plus en plus d'artistes qui avaient ouvert un blog sur une plateforme comme Livejournal, overblog ou d'autres endroits exotiques disposant de flux RSS ne mettent plus leurs oeuvres en ligne (sauf Loish <3)
[[https://blog.loish.net][Le blog artistique de Loish Van Baarle]]
Les gens se rendent de plus en plus captifs de plateformes privatrices sans flux RSS qui cachent à ses abonnés ce que l'on poste selon son bon vouloir, tout en requérant aux visiteurs d'avoir un compte pour accéder à ce qui est publié.
Je commence mon plan pour sortir de Facebook et Google et envisage des exports de mes données, tout en incitant d'autres à faire de même et à toujours alimenter une adresse personnelle et me mets à héberger mon instance Mastodon et à suivre des artistes dessus.
@ -51,7 +53,8 @@ Constatant qu'il y a un temps non négligeable entre mes écrits et leurs public
Puis lisant du Ploum qui évoque la version finale de son blog parce qu'il en a gros des évolutions bancales et des trucs relou des CMS qui deviennent des monstres, je m'intéresse à la gestion de blog statique et aux capsules gemini.
https://ploum.net/2022-12-04-fin-du-blog-et-derniere-version.html
[[https://ploum.net/2022-12-04-fin-du-blog-et-derniere-version.html][Ploum: fin du blog et dernière version]]
** S'inspirer des meilleurs
Je regarde comment fonctionnent deux ou trois outils de génération de blog statique, en tentant d'y reporter quelques uns de mes contenus: Pelican, Hugo, Offpunk, LazyBlorg, Zola... certains sont affreusement complexes pour comprendre les infos nécessaires à leur utilisation, d'autres beaucoup moins.
@ -76,7 +79,7 @@ J'opte pour un petit ensemble d'outils qui me permettent de générer à partir
- un index qui présente en entier quelques articles puis liste les suivants avec des liens au lieu de faire une infinité de pages
- pas de moteur de recherche interne, on utilise un lien vers un moteur externe
- une mise à disposition de l'intégralité des articles sur une forge logicielle qui cause le Git, ici
https://forge.chapril.org/tykayn/orgmode-to-gemini-blog
[[https://forge.chapril.org/tykayn/orgmode-to-gemini-blog][orgmode-to-gemini-blog]]
- une automatisation de la gestion des nouvelles images
- pas d'administration à plusieurs, bien que c'est tout à fait faisable en partageant un dossier et en ajoutant chacun ses articles avec la gestion de version git.
- un outil en ligne de commande pour simplifier la création de nouvel article avec les quelques infos nécessaires à tout article: titre, date, texte.
@ -91,7 +94,7 @@ La mise à jour des blogs est super simple, un git pull, une génération de blo
Voici les sources du dépot, qui contiennent donc tous mes écrits en ligne sous licence libre CC-BY-SA et en AGPLv3+ pour les scripts:
https://forge.chapril.org/tykayn/orgmode-to-gemini-blog
[[https://forge.chapril.org/tykayn/orgmode-to-gemini-blog][orgmode-to-gemini-blog]]
Pour le fun, ce blog de cipherbliss contient 274 articles, 140 000 mots, qui se lisent en 10h34min si vous lisez à la vitesse moyenne de 220 mots minutes comme beaucoup d'adultes.

1
utils.py Normal file
View file

@ -0,0 +1 @@

View file

@ -445,20 +445,35 @@ def org_to_gmi(org_text: str) -> str:
Args:
- org_text (str): Le texte au format Org à convertir.
"""
# Nettoyer le contenu org en retirant les lignes commençant par #+post
cleaned_content = '\n'.join( line for line in org_text.splitlines() if not line.strip().startswith('#+') )
cleaned_content = '\n'.join(line for line in org_text.splitlines() if not line.strip().startswith('#+'))
org_content = cleaned_content
# print('org to gmi org_content', org_content)
# Conversion du texte Org en GMI via Pandoc
try:
converted_text = pypandoc.convert_text(org_content, 'markdown', format='org')
# Remplacer les apostrophes échappées
converted_text = converted_text.replace('\\\'', '\'')
# Convertir les liens HTML en liens Gemini
# Ajouter des retours à la ligne avant et après les liens web
converted_text = re.sub(r'<(https?://[^>]+)>', r'\n=> \1\n', converted_text)
# Convertir les liens simples <url>
converted_text = re.sub(r'<(https?://[^>]+)>', r'\n=> \1\n\n', converted_text)
# Nettoyer les espaces multiples et retours à la ligne dans les liens simples
converted_text = re.sub(r'(\=\> [^\n]+?)[ \n]{2,}', r'\1 ', converted_text)
# Nettoyer les espaces multiples et retours à la ligne dans les liens avec description
converted_text = re.sub(r'(\=\> [^\n]+?)[ \n]{2,}([^\n]+)', r'\1 \2', converted_text)
# Convertir les liens avec description [texte](url)
converted_text = re.sub(r'\[([^\]]+)\]\(([^)]+)\)', r'\n=> \2 \1\n\n', converted_text)
# Ajouter un saut de ligne devant les lignes commençant par #
converted_text = re.sub(r'(?m)^#', r'\n#', converted_text)
# Remplacer les sauts de ligne multiples par un maximum de 2 sauts de ligne
converted_text = re.sub(r'\n{3,}', '\n\n', converted_text)
output = f"""
@ -657,7 +672,8 @@ Navigation:
if next_article_link:
gemini_content += f"\nArticle suivant:\n{next_article_link}"
gemini_content += f"""-----------------------------------------------
gemini_content += f"""
-----------------------------------------------
=> index.gmi Index des articles
"""
# Sauvegarder le fichier