Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
index.sh (8066B)
1 #! page 2 title: Comment j\'ai volé les 407 128 mot valides au scrabble francophone à la Fédération Française de Scrabble 3 author: Arthur Pons 4 description: et implémenté un service qui vérifie si un mot est valide sur bebou 5 publication: 2025-05-10 6 7 section: main 8 9 Article pas relu 10 11 ## Si vous voulez simplement l'utiliser 12 13 La liste complète par taille et ordre alphabétique des mots valides au scrabble 14 francophone le 10 mai 2025 (1,2Mo) : 15 http://bebou.netlib.re/scrabble/mots-valides-scrabble.gz 16 17 Pour le dezipper faire `gunzip mots-valides-scrabble.gz`. 18 19 Pour vérifier si un mot est valide en ligne accédez au lien suivant en modifiant 20 le mot recherché : http://bebou.netlib.re/scrabble/mot 21 Si le site vous fait télécharger un truc c'est qu'il est valide, sinon il ne 22 l'est pas. 23 24 Sinon si vous voulez un formulaire vous pouvez utiliser la version CGI : 25 http://bebou.netlib.re/cgi-bin/scrabble.cgi 26 27 Si vous avez le fichier en local pour vérifier si un mot existe vous pouvez 28 lancer la commande : 29 30 < mots-valides-scrabble grep "^mot$" 31 32 ## Introduction 33 34 [Timothée](https://timothee.goguely.com/) a récemment joué au scrabble et s'est 35 plaint des sites depuis lesquels on peut vérifier si un mot est valide. J'en 36 fais donc ma mission de trouver un moyen de rendre cela plus facile. 37 38 ## Trouver la liste des mots 39 40 Comme d'habitude le plus difficile est de trouver la source des données. Il 41 semblerait que le dictionnaire du scrabble ne soit pas équivalent aux 42 dictionnaires français "classiques" puisqu'il existe un dictionnaire dédié 43 nommé l'[Officiel Du 44 Scrabble](https://www.fisf.net/officiel-du-scrabble/presentation.html) (ODS). 45 Ce dictionnaire est le résultat d'une collaboration entre Larousse dont le 46 dictionnaire faisait référence jusqu'en 89 et la Fédération Internationale du 47 Scrabble Francophone (FISF). La [page au sujet de la sortie de la neuvième 48 édition du 49 dictionnaire](https://www.fisf.net/fisf/dernieres-actualites/10284-l-ods-9-vient-de-paraitre.html) 50 m'a permis de confirmer que le jeux de donnée que j'ai constitué est bien à 51 jour entre autre parce qu'il ne contient plus certaines insultes 52 homophobes, raciste et sexistes. La FISF, ces dangereux wokistes. 53 54 J'ai cherché sur le site de la FISF si le dictionnaire était disponible sans 55 succès. Il y a bien des applications mobiles qui fonctionnent sans internet et 56 qui donc contiennent la base d donnée en locale [un peu à la manière du 57 DES](/crisco-des/) mais ne connaissant rien en appli mobile j'ai évité. 58 59 ## Le vérificateur de mots de la FFS 60 61 En cherchant sur le site de la Fédération Française de Scrabble j'ai trouvé 62 leur [vérificateur de mot](https://www.ffscrabble.fr/verificateur-de-mots/). Ce 63 vérificateur fonctionne en récupérant ce qui est inscrit dans la boite de 64 dialogue et en appelant une api REST que l'on peut appeler de la sorte et qui 65 nous renvoie de l'HTML : 66 67 $ curl -Ls 'https://www.ffscrabble.fr/wp-admin/admin-ajax.php' \ 68 -H 'referer: https://www.ffscrabble.fr/verificateur-de-mots/' \ 69 --data-raw 'action=verifier_mot&mot=manger' 70 71 <span class="answer right-answer"> 72 Le mot <b>"manger"</b> est valide 73 <img class="valid-invalid" src="https://www.ffscrabble.fr/wp-content/uploads/2024/02/check_circled_button_background.png" /> 74 <br> 75 Le joueur qui a contesté reçoit une pénalité de 5 points 76 </span> 77 78 Super. Sauf que pour avoir la liste des mots valides il faudrait tester tous 79 les mots existants auprès de cet API. Ce n'est pas raisonnable. J'ai eu 80 l'intuition qu'il devait exister une "action" du type "recuperer_mot" qui 81 permette d'obtenir une liste. J'ai utilisé le débogueur des outils de 82 développement de Firefox pour lire le JS fourni avec le site. J'ai cherché 83 la chaîne "action:" puis je suis tombé sur [ce 84 fichier](https://www.ffscrabble.fr/wp-content/plugins/ffsc-jeux-mots/js/jeu-mots.js) 85 contenant une action `get_mots` très prometteuse : 86 87 88 $ curl -Ls 'https://www.ffscrabble.fr/wp-admin/admin-ajax.php' \ 89 -H 'referer: https://www.ffscrabble.fr/verificateur-de-mots/' \ 90 --data-raw 'action=get_mots&longueur=2&nombre=2' 91 92 <div class="mot-item"> 93 <span class="mot-affiche" data-mot="PU">PU</span> 94 <input type="text" class="mot-saisi"> 95 </div> 96 <div class="mot-item"> 97 <span class="mot-affiche" data-mot="IL">IL</span> 98 <input type="text" class="mot-saisi"> 99 </div> 100 101 ## Le vol 102 103 ### La collection 104 105 Ce script permet de successivement demander 1 millions de mots des 106 longueurs de 2 à 15 : 107 108 for i in $(seq 2 15); do 109 curl -Ls 'https://www.ffscrabble.fr/wp-admin/admin-ajax.php' \ 110 -H 'referer: https://www.ffscrabble.fr/verificateur-de-mots/' \ 111 --data-raw "action=get_mots&longueur=${i}&nombre=1000000" > "$i" 112 done 113 114 ### Le nettoyage 115 116 On se retrouve avec 14 fichiers numérotés de 2 à 15. remplis d'HTML. On peut 117 les parser de la sorte : 118 119 for i in $(seq 2 15);do 120 < "$i" sed -E 's/<[^>]+>/\n/g' | #on retire l'html 121 grep . > "$i.parsed" # et les lignes vides 122 done 123 124 Et constituer un fichier global en faisant : 125 126 for i in $(seq 2 15);do 127 < "$i.parsed" sort #on trie par ordre alpha 128 done | 129 sed -E 's/.*/\L&/' > res #et on met tout en minuscule 130 131 ## Le service 132 133 Maintenant à notre tour d'imaginer un service équivalent. En local si nos mots 134 sont dans le fichier `res` le plus simple reste de faire : 135 136 $ < res grep "^mot$" 137 mot 138 139 Si la commande renvoie quelque chose c'est bon, sinon c'est pas bon. 140 On peu éventuellement le rendre un peu plus explicite en faisant : 141 142 < res grep -q "^mot$" && echo "valide" || echo "non valide" 143 144 Avec Timothée on a fait [une version 145 CGI](http://bebou.netlib.re/cgi-bin/scrabble.cgi) mais je voulais aussi tester 146 autre chose. Et si l'on s'amusait à créer un fichier texte par mot valide. On 147 pourrait ensuite tenter d'accèder à une url. Si on a une 404 le mot n'est pas 148 valide, si on a un retour le mot l'est. 149 150 Pour créer les fichiers on peut faire : 151 152 $ sed 's/^/echo "oui" > /g' res | sh 153 154 Cela va créer pour chaque ligne (mot) une commande : 155 156 $ echo "oui" > mot 157 158 Attention, cela génère +400 mille mots dans le dossier courant. Sur des 159 systèmes modernes ce n'est pas un souci, et même étonnament rapide, mais sur 160 des systèmes plus vieux ou avec un disque lent je suppose que cela est une 161 assez mauvaise idée. 162 163 Reste que l'on aimerait y accéder en faisant `site.com/scrabble/mot` et que par 164 défaut en absence d'extension le navigateur va nous faire télécharger le 165 fichier plutôt que d'afficher "oui" à l'écran. J'en suis resté là, j'ai un peu 166 la flemme de modifier la conf du serveur pour lui faire dire que dans ce 167 dossier spécifiquement les fichier sans extension sont à traiter comme des 168 fichiers texte. Si vuos savez comment le faire sous nginx je suis preneur. 169 170 ## Discussion 171 172 Si j'aime bien cette solution puisqu'elle n'implique aucun code (ça c'est du 173 vrai no code) je pense qu'elle n'est pas possible avec du matériel et/ou des OS 174 et/ou des systèmes de fichier assez vieux ayant mal optimisé la création de 175 fichier. Sur le serveur il y a 3,7 millions d'inodes dont 600 milles utilisés 176 après avoir créé nos 400 milles fichiers : 177 178 Sys. de fichiers Inœuds IUtil. ILibre IUti% Monté sur 179 /dev/mmcblk0p2 3786960 599438 3187522 16% / 180 [...] 181 182 Autrement dit l'existance de ce service sous cette forme occupe un peu plus de 183 10% de la totalité des fichiers disponibles sur le rasp et 66% des fichiers 184 existants. 185 186 Question performance le serveur web n'a aucun mal, le fait que le dossier soit 187 blindé de fichiers n'est pas un souci pour trouver le bon. 188 189 Pour vérifier si effectivement le luxe de ne pas avoir besoin de code n'est 190 abordable que dans la mesure où l'on a une carte sd relativement grosse et 191 performante, un système de fichier et un os moderne il faudrait tenter 192 d'héberger le même service sur un OS ancien. Peut-être un article pour une 193 prochaine fois.