feat(sources): ajoute quitoque.fr comme source de recettes importable #52
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/quitoque-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 #37 — 5e adaptateur de source.
Conception
Calqué sur
marmiton.ts, le plus fin des wrappers scrapés :fetchDetail/parsedélèguent tels quels àjsonLdRecipeAdapter— une page recette quitoque.fr porte unRecipeschema.org, seul élément d'un tableau JSON-LD de premier niveau, déjà géré nativement parfindRecipeNode(vérifié dans le ticket).rekeySourceErrorre-labellisejsonLdRecipe→quitoque(copie locale, comme 750g / manger-bouger).list()est site-spécifique :GET https://www.quitoque.fr/recettes?page=N(page 1 implicite si pas de curseur), scrape des cartes<a class="card__content_header" href="/recettes/…">— image réelle dansdata-src(srcn'est qu'un placeholder lazy-load),hrefrelatif résolu contre l'origine. L'extraction est agnostique à l'ordre des attributs.queryest un filtre sous-chaîne best effort sur les titres de la page courante (même lacune assumée que750g.ts). Fin de liste = page sans aucune carte (commemarmiton.ts) ; le filtrequeryne bloque pas l'avancée si la page brute avait des cartes.Enregistré dans
registerAllRecipeSources()→syncRecipeSourcescrée sa ligneSource(household-toggleable).Tests
apps/api/test/recipe-sources/quitoque.test.ts(stubFetchHtml, pas de base) : scrape de plusieurs cartes →RecipeSourceListItems (URL absolue, image depuisdata-src),nextCursor: "2"; page vide → fin de liste ; curseur →?page=N(URL capturée) ; filtre parquery; erreursRecipeSourceFetchError/ParseErrorre-labelliséesquitoque;parsesur un JSON-LD tableau-de-premier-niveau →portions/ingredients/stepscorrects. Vérifié localement : 9/9.apps/api/test/sources/sources-index.test.ts: nouveau cas « registers Quitoque ».Docs
backend-architecture.md— sectionquitoque.tsajoutée, et la ligne «registerAllRecipeSources()n'enregistre aujourd'hui que TheMealDB » (fausse depuis longtemps) corrigée entheMealDb, marmiton, 750g, mangerBouger, quitoque. Le reste de la staleness de cette section (paragraphes Marmiton/750g/MangerBouger absents) est laissé au rattrapage global mentionné sur le ticket.build+lintverts.🤖 Generated with Claude Code