commit a95242ad1a2d15bd9f0aac63d09dfe8eefffe203
parent 2d99d48c19028a6c8ecda797e4e57602befde203
Author: Hugo Soucy <hugo@soucy.cc>
Date: Sat, 24 Feb 2018 07:34:01 -0500
Continue the draft about rewritemap url shortner.
Diffstat:
1 file changed, 58 insertions(+), 2 deletions(-)
diff --git a/draft/2018/02/un-raccourcisseur-d-url-pour-site-statique.md b/draft/2018/02/un-raccourcisseur-d-url-pour-site-statique.md
@@ -24,13 +24,69 @@ Il faut que l'emsemble des URLs que vous voulez raccourcir soient
disponibles sous la forme d'un *array*. Comme je l'écrivais plus haut,
dans ce *array*, l'ordre doit être immuable, puisque que ce sera le
nombre qui, correspond à la position de chaque entrée qui servira à
-créer la chaîne de caractère courte. Cet *array* peut être construit
-et ordonné à la volée.
+créer la chaîne de caractère courte.
+Pour ma part, je stock mes URLs dans un fichier JSON qui, contient un
+objet dont les clés sont les URLs longs et les valeurs sont les
+chaînes raccourcies.
+
+Ce JSON est créé lorsque je lance le générateur de site statique pour
+la première fois. Ensuite, je vérifie son existence et une nouvelle
+entrée est faite si la clée n'est pas déjà présente dans le JSON en
+question.
+
+Moi j'ai choisi JSON, mais évidemment, cela pourrait être fait avec un
+autre format de donnée, comme par exemple SQLite. Sinon, voilà à quoi
+ressemble ma fonction en lua :
+
+```
+function link.makeshorts()
+ local links = {}
+ local links_db = Ferron.site.path .. Ferron.site.siteconfig.paths.data .. "/shortlinks.json"
+
+ -- If `links_db` dosen't exists create it
+ if path.isfile(links_db) == false then
+ local counter = 0
+
+ fileutils.pushfilecontent(links_db, "")
+
+ for k, v in tableutils.sortdescendingpairs(Ferron.site.pagestable) do
+ if v.rellink ~= "" then
+ counter = counter + 1
+
+ links[v.rellink] = fileutils.shorturlencode(counter)
+ end
+ end
+ else
+ links = json.decode(fileutils.pullfilecontent(links_db))
+
+ for k, v in tableutils.sortdescendingpairs(Ferron.site.pagestable) do
+ if v.rellink ~= "" and links[v.rellink] == nil then
+ links[v.rellink] = fileutils.shorturlencode(tableutils.length(links) + 1)
+ end
+ end
+ end
+
+ return fileutils.pushfilecontent(links_db, json.encode(links, {indent = true}))
+end
+```
Convertir les nombres en chaîne de caractère
--------------------------------------------
+Dans le bloc de code qui précède, c'est la fonction
+`fileutils.shorturlencode()` qui transforme l'identifiant numérique de
+la position de chaque entrée, en courte chaîne de caractère. C'est ce
+que l'on appelle
+une [application bijective](https://fr.wikipedia.org/wiki/Bijection).
+
+J'ai créé une version en lua pour mon générateur de site statique, en
+me basant sur la version JavaScript que l'on retrouve sur GitHub dans
+le
+répertoire
+[ShortURL](https://github.com/delight-im/ShortURL). D'ailleurs, j'ai
+ajouté ma contribution à la douzaine de langage déjà.
+
Appliquer les redirection avec `RewriteMap`
-------------------------------------------