je partage mes scripts pour automatiser la création des méta-données de mes billets.
La partie la plus chiante des sites statiques est de créer les entêtes des fameux fichiers MD ou RST qui serviront ensuite pour créer les pages HTML. Bien que seuls un titre, une date soient nécessaires pour un article, Pelican vous permet d'ajouter beaucoup plus d'informations telles que des balises, des auteurs, des catégories et bien plus encore. Cependant, créer un nouveau fichier avec un titre, la bonne date/heure et d'autres champs peut prendre du temps et est répétitif (ou laxatif au choix), j'ai donc cherché un moyen de gagner du temps et des frappes sur claviers, en automatisant tout ça comme on peut trouver chez Hugo ou/et surtout Hexo.
En allant me promener sur la toile à la recherche de comment faisaient les gars de leurs cotés, je suis allé sur un premier site qui me conduisa sur un second et là je vis une lumière... Je pensais faire un script bash avec des echo
à la pelle un truc qui aurait pu ressembler à ceci:
#!/bin/bash
#
# Script qui génère un template pour les posts Pelican
#
# On dégage les accents, espaces, "():,!?" etc du slug (l'URL du post),
# enlève un "-" éventuel avant .md, et met tout le slug en minuscules
# C'est moche et long, mais il faut ce qu'il faut
SLUG=$(echo $1 | sed "s/ /-/g;s/[():,!?]//g;s/'/-/g;s/[àâäÀÂÄ]/a/g; s/[éèêëÉÈÊË]/e/g; s/[îïÎÏ]/ i/g; s/[ôöÖÔ]/o/g; s/[ûüùÛÜÙ]/u/g; s/[çÇ]/c/g; s/\(.*\)-$/\1/g" | tr "[:upper:]" "[:lower:]")
{
echo "Title:" $1;
echo "Date:" $(date +"%Y-%m-%d %H:%M"); # format 2012-08-09 15:33
echo "Author: SpF";
echo "Tags: ";
echo "Slug:" $SLUG; # génération du slug
echo "#Status: published";
echo "Summary: ";
} > $SLUG.md
Mais vu que Pelican est un programme Python, autant un script en Python que j'ai trouvé sur le second site:
import sys
from datetime import datetime
TEMPLATE = """
{title}
{hashes}
:#####date: {year}-{month}-{day} {hour}:{minute:02d}
:#tag:
:category:
:slug: {slug}
:summary:
:status: draft
"""
def make_entry(title):
today = datetime.today()
slug = title.lower().strip().replace(' ', '-')
f_create = "content/{}_{:0>2}_{:0>2}_{}.rst".format(
today.year, today.month, today.day, slug)
t = TEMPLATE.strip().format(title=title,
hashes='#' * len(title),
year=today.year,
month=today.month,
day=today.day,
hour=today.hour,
minute=today.minute,
slug=slug)
with open(f_create, 'w') as w:
w.write(t)
print("File created -> " + f_create)
if __name__ == '__main__':
if len(sys.argv) > 1:
make_entry(sys.argv[1])
else:
print "No title given"
Qu'on met à la racine de notre dossier source (celui qui sert à créer le site), à coté du fichier pelicanconf.py. On le lance via:
$ python make_entry.py "New Post"
File created -> content/2014_12_13_new-post.rst
C'est bien beau mais ça nous fait des fichiers .rts --pour reStructuredText-- et nous on veut du markdown, pas de panique, juste des petits changements:
import sys
from datetime import datetime
TEMPLATE = """
---
title: {title}
#####date: {year}-{month}-{day} {hour}:{minute:02d}
#tag:
category:
slug: {slug}
summary:
status: draft
---
"""
def make_entry(title):
today = datetime.today()
slug = title.lower().strip().replace(' ', '-')
f_create = "content/{}-{:0>2}-{:0>2}-{}.md".format(
today.year, today.month, today.day, slug)
t = TEMPLATE.strip().format(title=title,
hashes='#' * len(title),
year=today.year,
month=today.month,
day=today.day,
hour=today.hour,
minute=today.minute,
slug=slug)
with open(f_create, 'w') as w:
w.write(t)
print("File created -> " + f_create)
if __name__ == '__main__':
if len(sys.argv) > 1:
make_entry(sys.argv[1])
else:
print "No title given"
Puis on l'enregistre comme make_entry-md.py
, maintenant on lance make_entry-md.py
.
$ python make_entry-md.py "New Post"
File created -> content/2014_12_13_new-post.md
On aura les méta-données:
---
title: New Post
#####date: 2020-12-14 19:09
#tag:
category:
slug: new-post
summary:
status: draft
---
Commencer la discussion: Venez écrire un commentaire dans le forum
- Précédent: Suis-je vraiment à 5 secondes près? Pré-bilan 2020 du blog.
- Suivant: Mageia 8 en Bêta 2.