feat: upgrade needed ressources and fight for each quest
This commit is contained in:
4
.claude/agent-memory/dofus-scraper-architect/MEMORY.md
Normal file
4
.claude/agent-memory/dofus-scraper-architect/MEMORY.md
Normal file
@ -0,0 +1,4 @@
|
||||
# Memory Index
|
||||
|
||||
- [HTML "À prévoir" section](html_a_prevoir_section.md) — Patterns, sélecteurs et mapping texte→combat_type pour la section À prévoir
|
||||
- [Weebly rendering quirks](site_rendering_weebly.md) — Le site est un Weebly : cascades de span, libellés par texte, slugs avec entités HTML
|
||||
@ -0,0 +1,42 @@
|
||||
---
|
||||
name: HTML structure of "À prévoir" section
|
||||
description: Pattern HTML, sélecteurs et règles de mapping pour la section "À prévoir" des pages de quête dofuspourlesnoobs.com
|
||||
type: project
|
||||
---
|
||||
|
||||
Le site est rendu via Weebly. L'en-tête de quête (Prérequis, Position de lancement, Récompenses, À prévoir) tient dans un seul `<div class="paragraph">`, en HTML plat, avec des cascades de `<span>` parasites.
|
||||
|
||||
**Identification de la section** : il n'existe pas de classe CSS dédiée. La seule clé fiable est le libellé textuel `<strong>À prévoir</strong>` (encodé `À prévoir`, parfois suivi d'un espace, parfois `:` à l'intérieur ou à l'extérieur du `<strong>`). Les couleurs `<font color="...">` du header (`#f00` Prérequis, `#3a96b8` Position de lancement, `#5fa233` Récompenses) **ne s'appliquent pas** à À prévoir — ne pas s'en servir comme discriminateur.
|
||||
|
||||
**Structure typique** :
|
||||
```html
|
||||
<strong>À prévoir :</strong>
|
||||
<ul>
|
||||
<li>2 x combats (réalisable en groupe).</li>
|
||||
<li>1 x Donjon Antre du Dragon Cochon.</li>
|
||||
</ul>
|
||||
```
|
||||
|
||||
**Stratégie de parsing robuste** : sur le `inner_html()` du `<div class="paragraph">`, splitter via regex `(?i)<strong[^>]*>\s*À\s*prévoir\s*</strong>\s*:?` puis couper au prochain `<strong` rencontré. Parser ce fragment avec `Html::parse_fragment` et itérer les `<li>`. Cette approche tolère la cascade de `<span>` Weebly mieux que la navigation par siblings.
|
||||
|
||||
**Cas "À savoir"** : sur quêtes simples (cryptologie, mise-à-l'épreuve), un `<strong>À savoir :</strong>` apparaît à la place — texte libre sans `<ul>`. Section distincte, ne pas la confondre.
|
||||
|
||||
**Cas "absence"** : certaines quêtes (la-colere-des-dieux) n'ont ni À prévoir ni À savoir → retourner Vec::new(), c'est valide.
|
||||
|
||||
**Mapping texte → combat_type observé** :
|
||||
- `donjon` dans le texte → `"donjon"` (label = nom du donjon)
|
||||
- `combat` + `seul` → `"solo"`
|
||||
- `combat` + `groupe`/`réalisable en groupe` → `"groupe"`
|
||||
- `combat à vagues` → `"combat_vagues"`
|
||||
- `combat "tactique"` → `"combat_tactique"`
|
||||
- `combats aléatoires` → `"combat_aleatoire"`
|
||||
- `combats contre des monstres` → `"combat_zone"`
|
||||
- `Aller à <lieu>` → `"deplacement"`
|
||||
- `n x <Nom>` sans "combat"/"donjon" → `"item"` (matériaux à fournir)
|
||||
- modifier observé : `évitable` → flag boolean
|
||||
|
||||
**Count** : extraire via regex `^(\d+)\s*x\s*`. Si commence par `Des ` → quantité indéterminée (`"x?"`).
|
||||
|
||||
**Why** : ces patterns ont été validés sur 10 pages réelles (espoirs-et-trageacutedies, dans-la-gueule-du-milimilou, voir-le-dark-vlad-et-mourir-ou-pas, mise-agrave-leacutepreuve, cryptologie, plongeon-et-dragon, le-dragon-noir, une-acircme-en-colegravere, a-la-recherche-de-crocoburio, l-oeuf-de-crocabulia) en avril 2026.
|
||||
|
||||
**How to apply** : utiliser ce mapping dans `src-tauri/src/commands.rs` pour peupler `CombatIndicator`. Si la struct actuelle (combat_type + count) est conservée, le label du donjon/item est perdu — recommander d'ajouter `label: Option<String>` et `evitable: bool` pour préserver l'info riche.
|
||||
@ -0,0 +1,17 @@
|
||||
---
|
||||
name: dofuspourlesnoobs.com is a Weebly site
|
||||
description: Caractéristiques du rendu Weebly du site et conséquences pour le scraping
|
||||
type: project
|
||||
---
|
||||
|
||||
dofuspourlesnoobs.com est hébergé sur Weebly. Conséquences pratiques pour le scraping :
|
||||
|
||||
- Le contenu est servi en HTML statique côté serveur — pas de SPA, pas besoin de headless browser.
|
||||
- L'éditeur WYSIWYG produit des **cascades énormes de `<span>` vides** (parfois 100+ niveaux) autour du moindre fragment de texte. Tous les sélecteurs doivent ignorer cette pollution (utiliser `.text()` qui aplatit, ou splitter directement sur `inner_html()`).
|
||||
- Les libellés de sections (Prérequis, Récompenses, À prévoir, etc.) sont identifiés **par texte**, pas par classe CSS. Aucune classe sémantique n'est ajoutée par Weebly.
|
||||
- Les couleurs sont en `<font color="#xxx">` inline (legacy), pas en CSS. Couleurs vues : `#f00`/`#f70000` Prérequis, `#3a96b8` Position de lancement, `#5fa233` Récompenses. À prévoir n'a pas de couleur propre.
|
||||
- Les caractères accentués sont presque toujours encodés en entités HTML (`À`, `é`, etc.) dans la source — penser à `html.unescape` côté Rust ou utiliser `.text()` de scraper qui décode.
|
||||
- Le `<div class="paragraph">` est le container Weebly de base pour un bloc de texte. Une page de quête type contient : 1 paragraph d'en-tête (méta-données) + N paragraphs d'étapes.
|
||||
- Les slugs d'URL utilisent les entités HTML décodées : `é` → `eacute`, `à` → `agrave`, `ê` → `ecirc`, `ô` → `ocirc`, etc. Exemples : `quecirctes.html`, `mise-agrave-leacutepreuve.html`, `chemin-vers-meacuteriana.html`.
|
||||
|
||||
**How to apply** : quand on conçoit un sélecteur, ne jamais s'appuyer sur la profondeur DOM ni sur des classes CSS sémantiques (elles n'existent pas). S'appuyer sur le texte des `<strong>` et la position relative dans `inner_html()` du paragraph parent.
|
||||
Reference in New Issue
Block a user