Bronnen en methoden

Opmerking toevoegen

Je kunt opmerkingen plaatsen via Opmerking toevoegen aan de rechterkant van de pagina.

Doel

Per externe bron de juiste detectiemethode kiezen, zodat we elke relevante opdracht op tijd binnen hebben zonder bronnen te overbelasten. Deze pagina beschrijft de drie methoden die we vandaag inzetten, wanneer we welke gebruiken, en hoe ze technisch in elkaar steken.

Keten per methode

flowchart TD
  subgraph BR["Bron"]
    BR1[DAS-portaal HTML]
    BR2[Open JSON-koppeling]
    BR3[Endpoint met snel signaal]
    BR4[Sequentiële job-id's]
  end

  BR1 --> H[n8n browserrobot]
  BR2 --> A[API-poller]
  BR3 --> W[Cheap-signal watcher]
  BR4 --> F[Fast-watch ingester]

  H --> P[Snippets: snapshot + changed-only + map + add_job]
  A --> P
  W -- "fingerprint flip" --> A
  F --> P

  P --> J[(Vacature in database)]

Welke methode wanneer

Bron-typeVoorbeeldMethodeCadens
HTML-portaal zonder open koppelingHarvey Nash, Maandag, Circle8, TenderNetn8n browserrobot2 uur (TenderNet 6 uur)
HTML-portaal met sequentiële job-id'sFlextendern8n browserrobot + fast-watch (sub-5s)2 uur (n8n) / 3 sec (watcher)
Structuurrijke JSON-koppelingStriive CMS APIAPI-poller15 min
JSON-koppeling met snelheidseisStriive CMS API + watcherCheap-signal watcher die API-poller triggert10 s tijdens werkuren, 5 min daarbuiten
Geen scraper actiefYacht, werken-voor-nederland, Maandag (parent)Placeholder in database, nog te bouwenn.v.t.

n8n browserrobot

1

Workflow start

Een planning in n8n start de workflow elke 2 uur. Per platform een eigen workflow met dezelfde gedeelde bouwstenen.
2

Pagina's ophalen

Een Playwright-browser bezoekt de inhuurpagina's, klikt door tot lijst van openstaande opdrachten en leest titels, eisen, wensen en sluitingsdatum uit.
3

Verwerken

Snippets normaliseren de data, filteren ongewijzigde items eruit en upserten in de database. Voor de gebruiker zichtbaar: nieuwe opportunity in werkbakje binnen 2 uur na publicatie.
4

Cancelled/failed signaal

Faalt een workflow, dan zie je dat als rode rij in /scrapers en in de incident-feed. Er volgt automatische escalatie als het twee runs achter elkaar misgaat.

API-poller

1

Bronregistratie

Per bron staat een record in jobs.platform met method=api-poll en een eigen source_slug, bijvoorbeeld striive-api. Zo blijven HTML- en API-runs apart traceerbaar.
2

Periodieke ronde

De daemon haalt elke 15 minuten alle opdrachten van de bron, doorloopt de pagina-iteratie en past dezelfde snippets toe als n8n.
3

Triggerronde

Buiten de periodieke ronde kan een watcher de daemon vragen om direct een ronde te draaien voor één bron, via een interne POST naar /trigger/:source. De daemon weigert overlappende runs voor dezelfde bron.
4

Zichtbaarheid

Resultaat zie je op /sources in de ops-console. Per bron staat methode, laatste run, duur, succesratio en het aantal nieuwe of gewijzigde rijen.

Cheap-signal watcher

1

Stream-and-abort probe

De watcher start een GET-request, leest alleen de eerste paar kilobytes en sluit de verbinding. In die kilobytes haalt hij twee getallen: het totaal aantal opdrachten en de identifier van de nieuwste.
2

Fingerprint vergelijken

Van die twee maakt hij een hash. Is de hash gelijk aan vorige keer, dan is er niets veranderd. Verschilt hij, dan is er een nieuwe of verdwenen opdracht.
3

Triggeren

Bij een wijziging stuurt hij meteen een trigger naar de API-poller, die dezelfde minuut nog een volledige ronde draait. De watcher zelf doet geen ingestie.
4

Werkuren-bewust

Tijdens werktijd (Mon-Vri 08:00-17:00 Europe/Amsterdam) probeert hij elke 10 seconden, daarbuiten elke 5 minuten. Dat scheelt onnodige verzoeken 's nachts en in het weekend.

Fast-watch (variant zonder triggerstap)

1

Sequentiële id-probe

Sommige bronnen, zoals Flextender, geven elke nieuwe opdracht een oplopend nummer. De watcher checkt elke 3 seconden of <code>laatste-nummer + 1</code> een geldige pagina oplevert. Lukt het, dan is er een nieuwe opdracht uit.
2

Direct verwerken

In plaats van een trigger te sturen leest deze variant de pagina meteen zelf, normaliseert de velden en schrijft direct in de database. Snelheid in plaats van een handshake met de poller.
3

Update-sweep

Naast de nieuwe-id-loop draait er elk uur een ronde langs eerder gepubliceerde opdrachten om wijzigingen op te vangen (verschoven sluitingsdatum, herziene tarieven). De drift-detectie gebeurt downstream via een hash-vergelijking.
4

Belt-and-suspenders

De n8n browserrobot blijft daarnaast op cadens 2 uur lopen. Beide kanalen botsen niet: ze landen op dezelfde dedup-sleutel en updaten &eacute;&eacute;n rij.
Welke methode actief is per platform zie je altijd op één plek: de coverage map in scrapers/README.md. Daar staat ook of een platform op intake, staging, live of sunset staat.