Selector Agent API

CSS Selector Repair Service with SQLite Cache

Admin Panel Job Logs

Flow

1
GET /selectors?scope=X - Prüfe ob Selektoren gecacht sind
2
Wenn 404 → User startet Anlernen-Flow via POST /repair
3
Nach erfolgreichem Repair → POST /selectors zum Speichern

Selector Store

Method Endpoint Description
GET /selectors?scope=X Selektoren für Scope abrufen
POST /selectors Selektoren speichern
DELETE /selectors?scope=X Selektoren löschen
GET /selectors/scopes Alle Scopes auflisten

POST /selectors Body

{
  "scope": "account_uahash",     // required
  "parser_object": [...]         // required
}

Scope Format

// Vom Plugin erstellt:
scope = "{LINKEDIN_ACCOUNT}_{USER_AGENT_HASH}"

// Beispiel:
scope = "raphael-wintrich_a1b2c3d4"

Repair Endpoints

Method Endpoint Description
POST /repair Selektoren reparieren (mit Claude AI)
POST /refine Nur bestimmte Felder reparieren
GET /job/:jobId Job Status abfragen
POST /job/:jobId/cancel Job abbrechen
GET /stream/:jobId Live Updates (SSE)
POST /test-parsing Selektoren testen (ohne Claude)

POST /repair Body

{
  "parserObject": [...],         // required
  "htmlString": "<html>...",     // required
  "url": "https://...",          // required
  // Optional:
  "containerSelector": "main",
  "maxIterations": 1,
  "model": "sonnet",
  "expectedValues": {
    "name": "Max Mustermann",
    "title": "Developer"
  }
}

Utility

Method Endpoint Description
GET /health Health Check
GET /profiles Test-Profile verwalten
GET /account-selectors Selektoren für Account-Ermittlung (LinkedIn, Xing)

GET /account-selectors Response

{
  "linkedin": {
    "selectors": [".global-nav a[href*=\"/in/\"]", ...],
    "regex": "\\/in\\/([^\\/\\?#]+)",
    "fallback_selectors": ["nav a[href]", ...],
    "fallback_regex": "linkedin\\.com\\/in\\/([^\\/\\?#]+)"
  },
  "xing": { ... }
}

Ablauf im Plugin: Selektoren werden per querySelector() probiert. Auf das gefundene <a>-Element wird die Regex angewendet. Capture-Group 1 = Account-UID.