Site-Specifika Parsers
Denna mapp innehåller parsers för olika receptsidor. Varje webbplats kan ha sina egna selectors och datastrukturer.
Arkitektur
base.parser.ts– Bas-klass som alla parsers extendarica.parser.ts– Optimerad parser för ica.segeneric.parser.ts– Generisk fallback-parser för okända sidor
Så lägger du till en ny parser
- Skapa en ny fil, t.ex.
mathem.parser.ts:
import { RecipeParser, ParsedRecipe } from './base.parser';
export class MathemsRecipeParser extends RecipeParser {
canHandle(url: string): boolean {
return /mathem\.se/i.test(url); // Matchar bara mathem.se-URLs
}
parse(html: string): ParsedRecipe {
// Din site-specifika parsing-logik här
// Returnera { name, ingredients, instructions }
}
}
- Registrera parsern i
quick-import.service.ts:
const parsers: RecipeParser[] = [
new IcaRecipeParser(),
new MathemsRecipeParser(), // Din nya parser här
new GenericRecipeParser(), // Måste vara sist (fallback)
];
Bästa praxis
- I18n: Använd svenska användarmeddelanden
- Säkerhet: Sanitera HTML-output innan du använder det
- Robustness: Testa edge-cases (tomma ingredienser, långa instruktioner)
- Prioritering: Mer specifika parsers måste komma före generiska
Tips för att debugga en ny sida
- Kolla om sidan använder JSON-LD: Öppna DevTools → Sök efter
<script type="application/ld+json"> - Om JSON-LD finns → kopiera strukturen och anpassa
parseIngredientLine() - Om inte → analysera HTML-strukturen och justera CSS-selectors
Framtida förbättringar
- Stöd för Puppeteer/Playwright för JavaScript-heavy webbplatser
- Plugin-system för community-bidrag
- Tester per parser