Zendesk est-il utile pour une mairie ?
Question
Est-ce que Zendesk peut être utile pour une mairie ?
Réponse
Oui, tout à fait. Une mairie est même un type d'organisation qui peut tirer beaucoup de bénéfices d'un outil comme Zendesk, à condition d'avoir suffisamment de demandes des administrés.
Les principaux usages sont les suivants :
- Guichet unique : toutes les demandes des citoyens (état civil, urbanisme, voirie, déchets, éclairage public, etc.) arrivent au même endroit.
- Répartition automatique : chaque demande est transmise au bon service (technique, urbanisme, mairie, CCAS...).
- Suivi des dossiers : le citoyen peut connaître l'état d'avancement de sa demande sans avoir à téléphoner.
- Historique : tous les échanges sont conservés.
- Base de connaissances : les réponses aux questions fréquentes sont accessibles directement aux habitants.
- Statistiques : la mairie peut mesurer les délais de traitement et identifier les demandes les plus fréquentes.
Exemple :
- Un habitant signale un lampadaire en panne.
- Un ticket est créé automatiquement.
- Le service technique est averti.
- Le citoyen reçoit un accusé de réception.
- Une fois la réparation effectuée, il est informé de la clôture du dossier.
Pour une petite commune, Zendesk peut cependant être surdimensionné en raison de son coût et de sa richesse fonctionnelle.
Quel système équivalent pour une commune de 2 500 habitants ?
Pour une commune d'environ 2 500 habitants, des solutions plus légères sont généralement mieux adaptées.
Quelques exemples :
- GLPI (logiciel libre)
- osTicket (logiciel libre)
- Zammad (logiciel libre)
- Freshdesk (solution commerciale)
Les besoins d'une petite commune sont souvent limités à :
- dépôt d'une demande ;
- attribution à un service ;
- suivi de l'état d'avancement ;
- échanges avec le demandeur ;
- statistiques simples.
Un développement spécifique en PHP peut également répondre à ces besoins avec une interface très simple, quelques tables SQLite (ou des fichiers JSON), un suivi des dossiers et des notifications par courriel.
Pourquoi proposer un développement PHP alors que GLPI est libre ?
Question
Tu dis qu'un développement en PHP est moins coûteux, mais tu cites aussi plusieurs logiciels libres comme GLPI. N'est-ce pas contradictoire ?
Réponse
Ce n'est pas une contradiction, mais deux situations différentes.
Les logiciels comme GLPI, Zammad ou osTicket sont effectivement gratuits dans leur version libre. Cependant, leur utilisation n'est pas totalement gratuite.
Une mairie doit généralement prévoir :
- l'installation ;
- la configuration ;
- les mises à jour ;
- les sauvegardes ;
- la formation des agents ;
- les éventuelles adaptations.
Si ces opérations sont confiées à un prestataire, elles représentent un coût non négligeable.
À l'inverse, un développement spécifique en PHP n'est réellement intéressant que s'il est conçu pour être réutilisé dans de nombreuses communes.
Par exemple :
- développement initial : 200 heures ;
- installation dans 100 communes.
Le coût du développement est alors amorti sur l'ensemble des installations.
Dans ce cas, le logiciel peut devenir :
- moins coûteux ;
- plus simple à utiliser ;
- parfaitement adapté aux besoins des petites communes.
En revanche, si une seule mairie commande un logiciel entièrement spécifique, un logiciel libre comme GLPI sera généralement moins cher, car il existe déjà et possède de nombreuses fonctionnalités prêtes à l'emploi.
Conclusion
Il n'y a donc pas de contradiction.
- Pour une seule commune, un logiciel libre comme GLPI est souvent la meilleure solution économique.
- Pour équiper un grand nombre de petites communes, un logiciel spécifique, simple et développé une seule fois peut devenir plus intéressant, tant sur le plan financier que sur celui de la facilité d'utilisation.
C'est probablement sur ce créneau — les communes de 1 000 à 5 000 habitants — qu'un logiciel spécialisé, beaucoup plus simple que GLPI, pourrait apporter une réelle valeur ajoutée.
Oui, c'est tout à fait possible aujourd'hui. Mieux encore, ce n'est plus de la science-fiction : les grands modèles de langage (LLM) permettent désormais de construire ce type d'application.
L'idée n'est pas de remplacer les agents de la mairie, mais de leur faire gagner énormément de temps.
Principe général
L'habitant pose sa question :
« Je voudrais refaire ma toiture. Ai-je besoin d'une autorisation ? »
ou
« Mon lampadaire est en panne depuis une semaine. »
ou
« Comment inscrire mon enfant à la cantine ? »
Le logiciel :
- comprend la question ;
- identifie le sujet ;
- recherche les informations dans la documentation de la mairie ;
- rédige une réponse adaptée ;
- si nécessaire, crée automatiquement un dossier destiné au service concerné.
L'agent municipal peut alors :
- envoyer directement la réponse proposée ;
- ou la modifier avant validation.
Architecture
Une architecture simple pourrait être la suivante :
Habitant
│
▼
Formulaire Web
│
▼
PHP
│
├── Classification de la demande
├── Recherche documentaire
├── IA
├── Gestion des tickets
└── Réponse
Les connaissances
L'IA n'invente rien.
Elle s'appuie uniquement sur :
- les délibérations ;
- les arrêtés municipaux ;
- les règlements ;
- le PLU ;
- les comptes rendus du conseil ;
- les horaires ;
- les procédures internes ;
- les formulaires administratifs ;
- les pages du site Internet.
Toutes ces informations peuvent être converties en Markdown, PDF ou texte.
Une base documentaire
Par exemple :
documents/
urbanisme.md
cantine.md
état-civil.md
associations.md
déchets.md
élections.md
eau.md
...
Chaque document contient les informations officielles.
Fonctionnement
L'utilisateur demande :
Je veux construire un abri de jardin de 18 m².
Le logiciel :
- détecte le mot « abri de jardin » ;
- ouvre le document urbanisme.md ;
- recherche les passages concernés ;
- envoie uniquement ces passages à l'IA ;
- l'IA rédige la réponse.
Elle ne répond jamais à partir de ses connaissances générales mais uniquement à partir des documents municipaux.
Pourquoi PHP suffit
PHP joue uniquement le rôle d'orchestrateur.
Il :
- reçoit la question ;
- recherche les documents utiles ;
- appelle éventuellement une IA ;
- enregistre le dossier ;
- envoie les courriels ;
- affiche la réponse.
Le travail "intelligent" est réalisé par le modèle de langage.
Peut-on se passer d'OpenAI ?
Oui.
On peut utiliser un modèle local comme :
- Mistral ;
- Llama ;
- Gemma ;
- Qwen.
Le fonctionnement reste identique.
Une idée encore plus intéressante
La plupart des communes de moins de 5 000 habitants possèdent très peu de documents.
Souvent :
- moins de 300 pages de règlements ;
- quelques centaines de comptes rendus ;
- quelques formulaires.
Toute cette documentation peut être indexée.
Le logiciel devient alors un véritable "secrétaire numérique" de la mairie.
Ce qui ferait la différence
À mon avis, l'innovation ne résiderait pas dans l'IA elle-même.
Elle résiderait dans un logiciel extrêmement simple :
- une seule interface ;
- une seule barre de recherche ;
- une seule boîte de réception ;
- des réponses proposées automatiquement ;
- un suivi des dossiers ;
- une base documentaire qui s'enrichit au fil du temps.
L'objectif serait qu'une secrétaire de mairie puisse l'utiliser sans formation particulière.
Pour les petites communes, un tel logiciel serait probablement plus adapté qu'un outil généraliste comme GLPI, car il serait conçu spécifiquement pour leur organisation et leurs besoins quotidiens.
Coût d'utilisation des modèles locaux
Lorsque je parle de Mistral, Llama, Gemma ou Qwen, il faut distinguer deux situations.
1. Utilisation en local
Le modèle est installé sur votre propre ordinateur ou sur le serveur de la mairie.
Coût logiciel
- Mistral : gratuit (certains modèles sont sous licence Apache 2.0)
- Llama : gratuit pour la plupart des usages, sous licence Meta
- Gemma : gratuit (Google)
- Qwen : gratuit (Alibaba)
Le coût des licences est donc généralement 0 €.
Le seul coût est le matériel.
Matériel
Pour une petite mairie (2 500 habitants), un simple PC peut suffire.
Exemple :
- processeur récent (Intel i5/i7 ou AMD Ryzen)
- 32 Go de RAM
- SSD de 1 To
Prix : 800 à 1 500 €
Pour un meilleur confort :
- carte graphique NVIDIA 12 à 24 Go
Prix total :
1 500 à 3 000 €
Une fois acheté, il n'y a pratiquement plus de coût d'utilisation.
Le modèle peut répondre à des milliers de questions par jour.
2. Utilisation via Internet (API)
Le modèle tourne sur les serveurs d'un fournisseur.
On paie uniquement ce que l'on consomme.
Par exemple :
- OpenAI
- Mistral AI
- Anthropic
- Cohere
Le coût est calculé en fonction du nombre de tokens (morceaux de texte).
Pour une petite mairie recevant :
- 20 demandes par jour
- soit environ 600 demandes par mois
le coût mensuel est généralement de l'ordre de :
- 2 à 10 € avec un petit modèle ;
- 10 à 30 € avec un modèle plus performant.
Autrement dit, le coût est souvent inférieur à celui d'un abonnement téléphonique.
3. Quel est le plus économique ?
Pour une mairie de 2 500 habitants :
- si les demandes sont peu nombreuses, l'API est souvent la solution la moins coûteuse ;
- si le volume devient important ou si la confidentialité est essentielle, un modèle local devient intéressant.
4. Mon choix
Si je devais concevoir un logiciel destiné à des centaines de petites communes, je proposerais une architecture hybride.
- Le logiciel fonctionne entièrement en PHP.
- Toutes les données restent stockées dans la mairie.
- Le client choisit son moteur d'IA.
Par exemple :
- Mode économique : utilisation d'une API (quelques euros par mois).
- Mode souverain : modèle local (aucun coût d'utilisation après l'achat du matériel).
Ainsi, la même application pourrait être installée aussi bien dans une petite commune rurale que dans une ville plus importante, sans changer son fonctionnement.
Comment cela se passerait concrètement ?
Prenons l'exemple d'une mairie de 2 500 habitants.
L'objectif est de construire un assistant municipal intelligent.
1. Le citoyen pose une question
Sur le site de la mairie, il écrit simplement :
Bonjour, je voudrais refaire ma toiture.
ou
Mon voisin fait du bruit tous les soirs.
ou
À quelle heure ouvre la mairie ?
Il clique sur Envoyer.
2. Le serveur PHP reçoit la question
Le script PHP enregistre la demande.
Par exemple :
Question :
Je voudrais refaire ma toiture.
3. PHP recherche les documents utiles
Il possède une base documentaire.
Par exemple :
documents/
urbanisme.md
cantine.md
associations.md
élections.md
plu.md
déchets.md
horaires.md
...
Le logiciel recherche automatiquement les documents qui parlent de :
- toiture
- déclaration préalable
- permis de construire
Il ne sélectionne que les documents utiles.
4. Construction du contexte
PHP fabrique alors un texte ressemblant à ceci :
Tu es l'assistant de la mairie.
Tu réponds uniquement à partir des documents suivants.
=====
Document urbanisme.md
...
=====
Document PLU.md
...
=====
Question du citoyen
Je voudrais refaire ma toiture.
C'est ce texte qui sera envoyé au modèle d'IA.
5. Le modèle répond
Le modèle lit uniquement ces documents.
Il répond par exemple :
Si votre projet consiste uniquement à remplacer les tuiles à l'identique, aucune autorisation n'est généralement nécessaire.
En revanche, si vous modifiez l'aspect extérieur de la toiture, une déclaration préalable peut être obligatoire.
Vous pouvez retirer le formulaire CERFA à l'accueil de la mairie ou le télécharger sur le site.
Cette réponse est renvoyée au PHP.
6. PHP affiche la réponse
L'habitant voit immédiatement la réponse.
Il peut ensuite cliquer sur :
- Je souhaite être rappelé.
- Je souhaite déposer une demande.
- Cette réponse ne répond pas à ma question.
Où intervient réellement l'IA ?
Le modèle n'a jamais accès à toute la base documentaire.
Il reçoit uniquement :
- quelques pages pertinentes ;
- la question.
Quelques secondes plus tard, il oublie tout.
Il ne conserve aucune mémoire de la commune.
Si l'on utilise un modèle local
À la place d'OpenAI, on installe par exemple Qwen ou Mistral sur un ordinateur de la mairie.
Le déroulement est exactement le même.
La seule différence est que, lorsque PHP arrive à l'étape 4, il envoie la requête à un programme installé sur le réseau local.
Navigateur
│
▼
PHP
│
▼
Serveur IA de la mairie
│
▼
Réponse
│
▼
Navigateur
Aucune donnée ne quitte la mairie.
Ce qui est intéressant
Le logiciel n'est pas lié à une IA particulière.
Il peut fonctionner avec :
- OpenAI ;
- Mistral AI ;
- Ollama ;
- LM Studio ;
- Qwen ;
- Llama ;
- Gemma.
Le code PHP reste pratiquement identique.
Il suffit de changer la fonction qui envoie la question au modèle.
Ainsi, si dans deux ans un nouveau modèle est deux fois plus performant et dix fois moins cher, il suffira de modifier cette seule fonction sans réécrire tout le logiciel.
En réalité, l'IA n'indexe pas directement les pages. C'est une idée très répandue, mais ce n'est pas ainsi que fonctionnent les systèmes modernes.
Le schéma est généralement le suivant.
1. Découpage des documents
Chaque document est découpé en petits morceaux (appelés chunks).
Par exemple :
urbanisme.md
----------------------
Chunk 1
Présentation du service
----------------------
Chunk 2
Déclaration préalable
----------------------
Chunk 3
Permis de construire
----------------------
Chunk 4
Abri de jardin
----------------------
Chunk 5
Piscine
Chaque morceau contient entre 300 et 1 000 mots.
2. Calcul d'un vecteur (Embedding)
Chaque morceau est envoyé dans un petit modèle spécialisé.
Ce modèle ne produit pas une réponse.
Il produit un vecteur de nombres.
Par exemple :
Chunk 4
↓
[0.241,
-0.773,
0.015,
...
0.918]
Il peut contenir :
- 384 nombres
- 768 nombres
- 1 024 nombres
- 1 536 nombres
- etc.
Ce vecteur représente la signification du texte.
Deux textes ayant le même sens auront des vecteurs très proches, même s'ils utilisent des mots différents.
3. Stockage
Tous ces vecteurs sont enregistrés.
Vecteur 1 → Chunk 1
Vecteur 2 → Chunk 2
Vecteur 3 → Chunk 3
...
On parle alors de base vectorielle.
4. Une question arrive
Le citoyen écrit :
Puis-je construire un cabanon de 15 m² ?
La question est elle aussi transformée en vecteur.
Question
↓
Embedding
↓
[0.238,
-0.770,
0.011,
...
0.921]
5. Recherche des voisins les plus proches
Le logiciel compare ce vecteur avec tous les autres.
Il calcule une distance.
Les plus utilisées sont :
- similarité cosinus (Cosine Similarity)
- distance euclidienne
- produit scalaire (Dot Product)
Les morceaux les plus proches sont sélectionnés.
Par exemple :
Question
↓
Chunk 4 : 99 %
Chunk 3 : 94 %
Chunk 7 : 71 %
Chunk 15 : 22 %
Le logiciel garde uniquement les meilleurs résultats.
6. Envoi au LLM
Seuls ces morceaux sont envoyés au modèle.
Le modèle ne lit donc jamais les 500 documents.
Il ne lit que :
Question
+
Chunk 4
+
Chunk 3
+
Chunk 7
Il peut alors rédiger une réponse.
Les algorithmes utilisés
En pratique, plusieurs familles d'algorithmes interviennent.
Embedding
Ils transforment le texte en vecteurs.
Exemples :
- BGE
- E5
- Jina Embeddings
- Mistral Embed
- OpenAI Embeddings
Recherche vectorielle
Ils retrouvent rapidement les vecteurs les plus proches.
Les plus connus sont :
- FAISS (Facebook)
- HNSW (Hierarchical Navigable Small World)
- Annoy
- ScaNN
Ces algorithmes sont optimisés pour rechercher des voisins dans des espaces contenant parfois des millions de vecteurs.
Base vectorielle
Elle stocke les vecteurs.
Exemples :
- ChromaDB
- Qdrant
- Milvus
- Weaviate
- Pinecone
Dans ton cas
Pour une mairie de 2 500 habitants, tu n'as probablement que :
- quelques centaines de fichiers ;
- quelques milliers de morceaux (chunks).
C'est extrêmement petit pour les outils actuels.
Tu pourrais même te passer d'une base vectorielle spécialisée.
Une solution très simple serait :
- convertir tous les documents en chunks ;
- calculer leurs embeddings une seule fois ;
- enregistrer les vecteurs dans une base SQLite ;
- lors d'une question, calculer l'embedding de la question ;
- comparer ce vecteur à tous les autres.
Avec seulement quelques milliers de vecteurs, cette comparaison prend généralement moins d'une seconde sur un PC ordinaire.
Autrement dit, il est tout à fait envisageable de construire un assistant municipal intelligent en PHP, avec SQLite pour stocker les documents et les embeddings, sans avoir besoin d'une infrastructure complexe.
Je pense qu'il faut distinguer deux objectifs.
- Construire rapidement une maquette du nouveau site.
- Constituer une base documentaire qui servira ensuite à l'IA.
Je te proposerais donc un seul outil qui réalise les deux.
Étape 1 : Exploration du site
Le programme explore tout le site à partir de l'URL d'accueil.
Par exemple :
php site2md.php https://www.mairie.fr
Il récupère toutes les URL.
Étape 2 : Filtrage
Il conserve uniquement :
- HTML
- HTM
- TXT
- éventuellement DOCX et ODT
Il ignore :
- JPG
- PNG
- WEBP
- GIF
- SVG
- MP4
- MP3
- ZIP
- CSS
- JS
- polices...
Étape 3 : Téléchargement
Il télécharge uniquement ces documents.
Étape 4 : Extraction
Pour chaque page HTML :
- suppression du menu
- suppression du footer
- suppression des scripts
- suppression des styles
- récupération de
<main>,<article>ou du contenu principal
Pour chaque PDF :
- extraction automatique du texte.
Étape 5 : Conversion
Tous les documents deviennent du Markdown.
Par exemple :
sources/
urbanisme.md
cantine.md
ecoles.md
budget2025.md
compte_rendu_2025_04_12.md
...
Étape 6 : Création d'un index
Le programme génère automatiquement un fichier.
index.json
contenant :
- titre
- URL d'origine
- date
- catégorie
- résumé
- chemin du fichier Markdown
Pourquoi je choisirais PHP
Parce que tu maîtrises déjà :
- PHP
- Bash
- SQLite
- Markdown
Tu n'as donc pas besoin d'ajouter un nouvel environnement.
PHP peut très bien :
- télécharger les pages (cURL) ;
- analyser le HTML (DOMDocument) ;
- convertir en Markdown ;
- gérer SQLite.
On peut utiliser Bash uniquement pour lancer le programme.
Je n'utiliserais wget que pour une seule chose
Explorer le site.
Par exemple :
wget \
--spider \
--recursive \
--no-parent \
--quiet \
https://www.mairie.fr
Il est très performant pour découvrir toutes les URL.
Ensuite, je laisserais PHP faire tout le reste.
Le résultat final
À la fin, tu disposerais de quatre répertoires.
/projet
site2md.php
/sources
*.md
/pdf
*.pdf
/cache
index.json
Tu pourrais alors :
- reconstruire le site avec ton CMS Markdown ;
- faire des recherches dans tous les documents ;
- ajouter ensuite une IA sans rien modifier à la structure.
Pourquoi je te conseille cette architecture
Elle est progressive.
- Tu obtiens rapidement une copie exploitable du site.
- Tu reconstruis le nouveau site en Markdown.
- Plus tard, tu ajoutes l'assistant intelligent en réutilisant exactement les mêmes fichiers Markdown.
Ainsi, le travail réalisé aujourd'hui servira directement à la future IA, sans avoir à recommencer l'extraction des données.
Conception du collecteur de site municipal
Objectif
Créer un outil PHP permettant de récupérer l'ensemble des ressources utiles d'un site Internet de mairie afin de préparer une refonte complète.
Le principe fondamental est :
La collecte conserve les sources originales. Aucune transformation n'est réalisée pendant cette phase.
Le collecteur sert uniquement à réaliser une copie documentaire fidèle du site existant.
Principe général
Entrée :
URL du site municipal
Exemple :
https://www.mairie-exemple.fr
Sortie :
collecte_mairie/
contenant toutes les ressources récupérées.
Architecture générale
Site de la mairie
|
▼
Explorateur de liens
|
▼
Filtrage des ressources
|
▼
Téléchargement
|
▼
Classement automatique
|
▼
Rapport de collecte
1. Exploration du site
Le programme commence par l'URL principale.
Exemple :
https://www.mairie-exemple.fr
Il analyse les liens présents dans :
- les pages HTML ;
- les feuilles CSS ;
- les scripts JavaScript ;
- les documents liés.
Il ne quitte jamais le domaine de la mairie.
Exemple :
Autorisé :
https://www.mairie-exemple.fr/contact
Refusé :
https://facebook.com/mairie
2. Sélection des ressources
Ressources conservées
Pages
.html
.htm
Stockées dans :
html/
Documents administratifs
.pdf
.doc
.docx
.odt
Stockés dans :
documents/
pdf/
Tableurs
.xls
.xlsx
.csv
Stockés dans :
tableurs/
Ressources techniques
Conservées car elles permettent de comprendre l'ancien site.
.css
.js
Stockage :
assets/css/
assets/js/
Icônes et éléments graphiques légers
Conservés :
.svg
.ico
petits .png
Stockage :
assets/icons/
3. Ressources ignorées
Pour éviter de récupérer des centaines de mégaoctets inutiles :
.mp4
.mp3
.wav
.zip
.rar
Les grandes images décoratives sont également ignorées :
.jpg
.jpeg
sauf si elles sont identifiées comme logo ou icône.
4. Organisation des fichiers
Le résultat final :
collecte_mairie/
├── html/
│
├── pdf/
│
├── documents/
│
├── tableurs/
│
├── assets/
│ ├── css/
│ ├── js/
│ └── icons/
│
└── meta/
├── urls.csv
├── fichiers.csv
└── rapport.txt
5. Gestion des doublons
Chaque fichier récupéré reçoit une empreinte :
SHA256
Exemple :
contact.html
SHA256 :
a82f94c8e5...
Si le même fichier apparaît plusieurs fois :
- il n'est téléchargé qu'une fois ;
- toutes les références sont conservées dans le rapport.
6. Conservation des informations
Pour chaque ressource :
Nom du fichier
URL d'origine
Date de récupération
Type de fichier
Taille
Empreinte SHA256
Exemple :
fichier;url;type;taille;hash
contact.html;
https://mairie.fr/contact;
html;
15200;
8ab43d...
7. Reprise après interruption
Le programme doit pouvoir être arrêté puis relancé.
Exemple :
Premier lancement :
Pages analysées : 300
PDF récupérés : 40
Arrêt.
Deuxième lancement :
Pages déjà récupérées : ignorées
Nouvelles pages : téléchargées
Aucun travail inutile n'est refait.
8. Technologies utilisées
L'environnement reste volontairement simple.
PHP
Pour :
- exploration ;
- téléchargement ;
- classement ;
- génération des rapports.
Bibliothèques natives :
cURL
DOMDocument
fichiers JSON ou CSV
Bash / Termux
Pour :
- lancer le programme ;
- automatiser les sauvegardes ;
- archiver le résultat.
9. Commande unique
L'utilisateur lance :
php mairie2collect.php https://www.mairie-exemple.fr
Le programme affiche :
Début de collecte
HTML : 245 fichiers
PDF : 67 fichiers
DOC/DOCX : 14 fichiers
CSS : 9 fichiers
JS : 6 fichiers
Icônes : 18 fichiers
Taille totale :
320 Mo
Collecte terminée.
10. Ce qui n'est volontairement pas fait
Le collecteur ne :
- convertit pas les HTML ;
- ne crée pas de Markdown ;
- ne nettoie pas les textes ;
- ne modifie pas les PDF ;
- ne fait pas d'analyse IA.
Ces opérations appartiennent à une deuxième étape.
Résultat attendu
À la fin de cette phase, on possède une archive complète et fiable du site municipal.
Cette archive pourra ensuite servir à :
- reconstruire un nouveau site ;
- analyser l'organisation de l'information ;
- créer une nouvelle arborescence ;
- alimenter un moteur de recherche ;
- préparer un assistant IA municipal.
La collecte devient donc une étape indépendante, stable et réutilisable.
mairie2collect.php — Collecteur de site municipal amélioré
Objectif
Ce programme réalise uniquement la collecte des sources.
Il ne transforme rien.
Il conserve :
- HTML
- DOC/DOCX/ODT
- XLS/XLSX/CSV
- CSS
- JS
- SVG
- ICO
- petites images PNG/JPG utiles
Il génère :
- une copie organisée du site ;
- un inventaire CSV ;
- un cache permettant la reprise ;
- un rapport de collecte.
Utilisation
Analyse sans téléchargement :
php mairie2collect.php https://www.mairie.fr --dry-run
Collecte complète :
php mairie2collect.php https://www.mairie.fr
Limiter la profondeur :
php mairie2collect.php https://www.mairie.fr --depth=5
Structure générée
collecte_mairie/
├── html/
├── pdf/
├── documents/
├── tableurs/
├── assets/
│ ├── css/
│ ├── js/
│ └── icons/
│
└── meta/
├── urls.csv
├── fichiers.csv
└── rapport.txt
Code PHP
Je vais fournir le code complet dans le message suivant afin de conserver un bloc Markdown unique et éviter une coupure du programme.
Le programme intégrera directement :
- lecture automatique de sitemap.xml ;
- exploration des liens ;
- profondeur maximale ;
- conservation des chemins d'origine ;
- détection MIME ;
- filtrage des images ;
- mode simulation ;
- reprise après interruption ;
- gestion des doublons.
Analyse approfondie du code source de la page d'accueil d'Estagel
Les informations supplémentaires que tu fournis permettent d'aller beaucoup plus loin.
On peut maintenant identifier beaucoup plus précisément l'architecture technique utilisée par Réseau des Communes / NEOPSE.
Ma première conclusion :
Ce n'est pas un simple site HTML. C'est une véritable plateforme CMS propriétaire avec génération dynamique de pages, système de widgets, personnalisation par commune et infrastructure mutualisée.
1) Confirmation : plateforme NEOPSE
Le premier indice très fort est ici :
var u="//matomo-client.neopse.com/";
et :
https://static.neopse.com/
On retrouve plusieurs domaines appartenant à NEOPSE :
static.neopse.com
matomo.neopse.com
matomo-client.neopse.com
Cela confirme que :
- les fichiers statiques ne sont pas forcément sur le serveur de la mairie ;
- les images et ressources peuvent être servies depuis l'infrastructure NEOPSE ;
- le suivi statistique est centralisé.
Architecture probable :
Visiteur
|
|
estagel.fr
|
|
Serveurs Réseau des Communes / NEOPSE
|
+-- HTML
+-- CSS
+-- JS
+-- Images
+-- Matomo
2) Ce n'est pas un CMS classique
On peut quasiment exclure :
- WordPress ;
- Joomla ;
- Drupal.
Pourquoi ?
Parce que le code contient des éléments propres à leur plateforme :
xmlns:ff4j
xmlns:esi
notamment :
xmlns:esi="http://www.edge-delivery.org/esi/1.0"
ESI signifie :
Edge Side Includes
C'est une technologie utilisée pour assembler des pages côté serveur ou CDN.
Cela indique une architecture plus industrielle.
3) Utilisation probable d'un framework professionnel
L'indice :
xmlns:ff4j="http://www.w3.org/1999/xhtml"
FF4J correspond probablement à :
Feature Flipping for Java
C'est une bibliothèque Java permettant d'activer/désactiver des fonctionnalités.
Cela laisse penser que le backend pourrait être développé en Java.
Architecture possible :
Application Java
|
|
------------------------
| |
Base de données Générateur HTML
|
|
Gestion communes
Gestion menus
Gestion contenus
Gestion utilisateurs
Je précise : ce n'est pas une preuve absolue, mais c'est un indice très fort.
4) Le système de personnalisation est très poussé
Cette partie est intéressante :
#w_headline
#w_44vmgbr2l
#w_dm455tmfy
#w_ez8ne90kx
#w_w5a7v1zv1
#w_wmxocox59
#w_y652xyj73
Ces identifiants sont générés automatiquement.
Cela ressemble à un système de blocs :
Page accueil
+----------------+
| Bloc actualité |
| id=w_headline |
+----------------+
+----------------+
| Agenda |
| id=w_xxxxx |
+----------------+
+----------------+
| Liens utiles |
| id=w_xxxxx |
+----------------+
Chaque commune peut donc probablement composer sa page avec des modules.
5) Le gros défaut : génération excessive de CSS
La partie :
<style class="notranslate" title="customCss">
contient énormément de CSS spécifique.
Exemple :
#w_w5a7v1zv1 .bg {
background-color: rgba(224,122,127,0.7);
}
Cela signifie :
Chaque bloc possède son propre style.
C'est pratique pour un administrateur non informaticien :
"je change la couleur du bloc"
Mais techniquement :
- CSS énorme ;
- difficile à maintenir ;
- beaucoup de répétitions ;
- performances moins bonnes.
6) Les polices
On voit :
Montserrat
Inter
Jost
Lato
Lora
Merriweather
Nunito
Open Sans
Outfit
Roboto
Roboto Condensed
Roboto Slab
Ils chargent énormément de polices Google.
Pour un site simple, c'est excessif.
Cela permet probablement de proposer dans l'administration :
"choisir la police du site".
Mais le coût :
- plusieurs requêtes réseau ;
- ralentissement ;
- dépendance Google Fonts.
7) Les bibliothèques JavaScript
On confirme :
Bootstrap
bootstrap.min.js
jquery-3.2.1.min.js
popper.min.js
Donc Bootstrap 4 environ.
Carrousels
Trois systèmes :
owlcarousel
slick
splide
C'est surprenant.
Un développement plus propre choisirait un seul composant.
Cela ressemble à une plateforme qui a grandi par ajout successif de fonctionnalités.
8) Le menu confirme le fonctionnement interne
Exemple :
/fr/rb/2338780/page-d-accueil
On retrouve :
rb
probablement rubrique.
Puis :
2338780
identifiant interne.
Puis :
page-d-accueil
nom lisible.
Donc :
TYPE / ID / SLUG
Architecture classique d'un CMS métier.
9) Comparaison avec un CMS moderne simple
Leur approche
Base de données
|
|
CMS propriétaire
|
|
HTML généré
|
|
Navigateur
Avantages :
- gestion centralisée ;
- très adapté à 500 ou 1000 communes ;
- administration simplifiée ;
- thèmes personnalisables.
Inconvénients :
- dépendance fournisseur ;
- migration difficile ;
- structure incompréhensible ;
- code lourd.
Une approche comme celle que tu développes
Markdown
|
|
Parser
|
|
HTML
|
|
Navigateur
Avantages :
- simplicité ;
- fichiers lisibles ;
- migration facile ;
- contrôle total.
Inconvénients :
- moins adapté à des milliers d'utilisateurs ;
- moins d'administration graphique.
10) Mon jugement technique après ces nouvelles informations
Je modifie légèrement mon analyse précédente.
Ce n'est pas une architecture "ancienne bricolée".
C'est une architecture professionnelle.
Elle semble conçue pour :
- industrialiser des centaines de sites municipaux ;
- permettre aux agents municipaux de modifier sans coder ;
- mutualiser une plateforme.
Par contre :
elle est lourde.
Pour une seule commune comme Estagel, cette puissance est probablement largement supérieure au besoin réel.
Les points qui me gênent techniquement
1. Dépendance forte à NEOPSE
Les ressources :
static.neopse.com
matomo.neopse.com
montrent une dépendance infrastructurelle.
2. Beaucoup de JavaScript et CSS
La page d'accueil de 1700 lignes HTML n'est pas choquante pour une plateforme.
Mais elle indique un système très riche.
3. Personnalisation par accumulation
Les nombreux blocs :
#w_xxxxxxxxx
font penser à un constructeur de pages.
C'est efficace, mais rarement élégant.
Conclusion finale
Avec ce code source, je dirais :
Réseau des Communes utilise une vraie plateforme CMS propriétaire professionnelle développée par NEOPSE, probablement basée sur une architecture Java, avec génération dynamique de sites municipaux.
Ce n'est pas un mauvais produit.
Mais c'est un choix opposé à une philosophie de sobriété :
- eux : plateforme industrielle clé en main ;
- toi : système léger, maîtrisable et transparent.
Le vrai sujet n'est donc pas la qualité technique.
Le vrai sujet est :
la commune accepte-t-elle de confier une partie de son autonomie numérique à un éditeur spécialisé ?
Le WHOIS montre qu'ils ont fait un choix correct en laissant le domaine à la commune. Le prochain point à examiner serait le contrat : c'est lui qui dira si la réversibilité des contenus est réellement garantie.