diff --git a/backend/src/quick-import/parsers/README.md b/backend/src/quick-import/parsers/README.md new file mode 100644 index 00000000..5c7de9c1 --- /dev/null +++ b/backend/src/quick-import/parsers/README.md @@ -0,0 +1,57 @@ +# 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`: + +```typescript +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 } + } +} +``` + +2. Registrera parsern i `quick-import.service.ts`: + +```typescript +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 `