hugo.soucy.cc

The personnal website source code of Hugo Soucy. Creates from an homebrewed static website generator (Ferron).
Log | Files | Refs

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:
Mdraft/2018/02/un-raccourcisseur-d-url-pour-site-statique.md | 60++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
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` -------------------------------------------