Files
recipe-app/backend/src/quick-import/parsers

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 extendar
  • ica.parser.ts Optimerad parser för ica.se
  • generic.parser.ts Generisk fallback-parser för okända sidor

Så lägger du till en ny parser

  1. 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 }
  }
}
  1. 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

  1. Kolla om sidan använder JSON-LD: Öppna DevTools → Sök efter <script type="application/ld+json">
  2. Om JSON-LD finns → kopiera strukturen och anpassa parseIngredientLine()
  3. 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