feat(sources): ajoute ohmonbento.com comme source de recettes importable #53
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/ohmonbento-recipe-source"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Corrige l'issue #40 — 6e adaptateur, le plus simple des scrapés.
Conception
fetchDetail/parsedélèguent tels quels àjsonLdRecipeAdapter— une page recette ohmonbento.com porte unRecipeWP Recipe Maker enveloppé dans un@graphYoast, déjà géré nativement parfindRecipeNode(récursion dans le tableau).recipeYielden tableau (["2", "2 portions"]) →extractPortionsprend le 1er élément, regex\d+.rekeySourceErrorre-labellisejsonLdRecipe→ohMonBento(copie locale, comme les 4 autres scrapés).list(): recherche WordPressGET https://ohmonbento.com/?s={query}&paged={N}— la même URL quequerysoit vide (tout le catalogue) ou non, aucun branchement (contrairement à750g.tsqui a deux endpoints).?s=toujours présent,&pagedseulement à partir de la page 2. Scrape de cartes<div class="entry-thumb"><a href="/<slug>/"><img alt src>— image danssrc(pas de lazy-loaddata-srcici),hrefrelatif résolu contre l'origine, extraction agnostique à l'ordre des attributs.marmiton.ts), gérée avant le contrôle!response.ok.Enregistré dans
registerAllRecipeSources().Tests
apps/api/test/recipe-sources/ohmonbento.test.ts(stubFetchHtml, pas de base) :entry-thumb→RecipeSourceListItems (URL absolue),nextCursor: "2";{ items: [], nextCursor: null };/?s=identique pour une requête vide, pas depageden page 1 ;query+ page →/?s={q}&paged={n}(URL capturée) ;RecipeSourceFetchErrorkeyedohMonBento;parsesur un@graphYoast + WPRM →portions/ingredients/stepscorrects ;fetchDetail/parsere-labelliséesohMonBento.Vérifié localement : 9/9. +
sources-index.test.ts: nouveau cas « registers Oh mon Bento ».build+lintverts.Docs : section
ohmonbento.tsdansbackend-architecture.md.🤖 Generated with Claude Code
6e adaptateur, le plus simple des scrapés : `fetchDetail`/`parse` délèguent tels quels à `jsonLdRecipeAdapter` — une page recette porte un `Recipe` WP Recipe Maker dans un `@graph` Yoast, déjà géré nativement par `findRecipeNode`. `list()` : recherche WordPress `GET /?s={query}&paged={N}` — **même URL que la requête soit vide (tout le catalogue) ou non**, aucun branchement (contrairement à `750g.ts`). Scrape de cartes `<div class="entry-thumb"><a href="/<slug>/"><img alt src>` — image dans `src` (pas de lazy-load `data-src` ici), `href` relatif résolu contre l'origine. Une page au-delà de la dernière renvoie une vraie 404 → fin de liste propre (comme `marmiton.ts`). `rekeySourceError` dupliqué localement. Enregistré dans `registerAllRecipeSources()`. Tests : `ohmonbento.test.ts` (`stubFetchHtml`, pas de base) — scrape des cartes, 404 = fin de liste, URL `/?s=` identique pour requête vide, query + page dans `/?s={q}&paged={n}`, erreurs re-labellisées `ohMonBento`, `parse` sur un `@graph` Yoast + WPRM (`recipeYield` en tableau géré). Vérifié localement, 9/9. + `sources-index.test.ts` couvre l'enregistrement. Docs : section `ohmonbento.ts` dans `backend-architecture.md`. Closes #40 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>