Nouvelle source de recettes : ohmonbento.com #40
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Contexte
Ajouter https://ohmonbento.com (blog de cuisine japonaise/bento) comme
nouvelle source de recettes importable — 5e adaptateur après TheMealDB,
Marmiton, 750g, Manger Bouger (+ Quitoque déjà planifié mais pas encore
implémenté, issue #37).
Vérification de fraîcheur faite avant de planifier celui-ci : aucun drift
depuis le ticket Quitoque — toujours exactement les 4 mêmes adaptateurs
enregistrés dans
apps/api/src/sources/index.ts,quitoque.tsn'existetoujours pas,
recipe-source-adapter.ts/json-ld-recipe.ts/marmiton.tsinchangés. Détail non noté sur #37 : il existe aussi
apps/api/test/recipe-sources/json-ld-recipe.test.ts,recipe-source.test.tset
recipe-source-sync.test.ts— tests du bloc générique/registre, pasd'un site précis, à ne pas confondre avec le futur
ohmonbento.test.ts.Vérifications effectuées sur ohmonbento.com
C'est le candidat le plus simple des 5 — plus proche de Marmiton
(délégation intégrale, zéro patch JSON-LD) que de 750g/Manger Bouger (qui
corrigent chacun un vrai bug du JSON-LD de leur site) :
/wp-admin/— site WordPressclassique (confirmé aussi par
admin-ajax.php, les chemins/wp-content/uploads/...).vérifié en direct :
https://ohmonbento.com/?s=liste bien toutes lesrecettes ("SEARCH RESULTS").
?s=&paged=N— vérifié en direct, fonctionneidentiquement pour une recherche vide ou non (pas de branchement
nécessaire côté adaptateur, contrairement à 750g). Le site n'a que 23
pages au total aujourd'hui (
?s=&paged=2→ titre de page "Page 2 à23"). Page hors limites (
paged=24) → vraie 404 (vérifié via leréseau) — même signal de fin que Marmiton, pas l'heuristique plus fragile
de 750g ("page sans carte").
/kamameshi/— permalien plat, sanspréfixe) : JSON-LD WP Recipe Maker (confirmé par la signature
#wprm-recipe-<id>-step-...dans les URLs d'étapes) enveloppé dans un@graphYoast SEO (Person, WebSite, ImageObject, BreadcrumbList, WebPage, Person, BlogPosting, Recipe) — vérifié contre le code réelque
findRecipeNode(json-ld-recipe.ts:79-92) gère déjà nativement cecas précis : un objet racine sans
@typemais avec un@graphtableau→ récursion dans le tableau → trouve le nœud
Recipe. Zéro retouchenécessaire, comme Marmiton, contrairement à 750g/Manger Bouger.
recipeYield: ["2", "2 portions"]→extractPortionsprend déjà lepremier élément d'un tableau puis regex
\d+→2. Géré nativement,aucun changement requis.
recipeIngredient: lignes françaises propres ("300 g de riz rondjaponais (Japonica)", "1 c. à soupe de sauce soja claire (usukuchi
shōyu)"...). Deux petites bizarreries WPRM à surveiller (pas à
corriger dans l'adaptateur, même sort que les cas similaires déjà
documentés sur le ticket Quitoque) : double espace quand aucune unité
n'est précisée ("3 champignons shiitake"), et notation en fraction
("1/2 c. à café de sel") — au pire un ingrédient finit non résolu,
dans le flux de revue manuelle déjà existant.
recipeInstructions:HowToStep[]avectext/nameidentiques —flattenInstructionsprend déjà.texten priorité, sans conséquence.ItemListJSON-LD(contrairement à Marmiton — vérifié : seulement
Person, WebSite, BreadcrumbList, SearchResultsPagesur cette page), mais chaque carte estun seul élément simple à scraper, encore plus direct qu'avec Quitoque
(pas de piège lazy-load
data-src) :<div class="entry-thumb"><a href="/<slug>/"><img alt="<titre réel>" src="<url image réelle>"></a></div>.Conception proposée
Nouveau fichier
apps/api/src/sources/ohmonbento.ts, structure calquée surmarmiton.tspourfetchDetail/parse(délégation intégrale + helperrekeySourceErrordupliqué comme dans les 3 autres adaptateurs scrapés),mais avec un
list()par scraping de cartes HTML façon 750g/Quitoque —plus simple ici, un seul élément par carte :
Fichiers à toucher
apps/api/src/sources/ohmonbento.ts(nouveau) — l'adaptateur ci-dessus.apps/api/src/sources/index.ts— ajouteregisterRecipeSource(ohMonBentoAdapter)dansregisterAllRecipeSources().apps/api/test/recipe-sources/ohmonbento.test.ts(nouveau) — mêmeconvention
stubFetchHtml/globalThis.fetchquemarmiton.test.ts/750g.test.ts/manger-bouger.test.ts. Cas à couvrir :list()parsebien les cartes d'une page fixture, requête vide et non vide sur la même
URL, 404 → fin de liste (
items: [],nextCursor: null) ;fetchDetail/parsedélèguent bien et re-labellisentsourceKeyen casd'erreur ;
parsesur une fixture JSON-LD réelle (forme@graphYoast +RecipeWPRM) produit les bonsportions/ingredients/steps.specs/backend-architecture.md— ajoute la section ohmonbento au mêmeformat que les autres adaptateurs (sans corriger la staleness déjà
connue du reste de cette section — signalée sur le ticket #37, hors
sujet ici aussi).
Hors scope
?s=<terme>&paged=Nest la même URL que la recherche vide — lemécanisme est assez simple pour ne pas nécessiter plus d'investigation
avant l'implémentation.
ohmonbento partagent un motif proche) en helper commun — à envisager si
un futur 6e site suit le même besoin, pas avant.
🤖 Filed by Claude Code