Mercell S2C dossier ophalen
Wanneer en waarom
web_fetch op s2c.mercell.com faalt met ROBOTS_DISALLOWED, en de /today/{id}-pagina is een Angular single-page app: de HTML bevat geen data. De data is echter publiek (geen login) en komt via een RPC-achtige API. Deze skill praat rechtstreeks met die API met bash/curl of het meegeleverde script, zodat je niet opnieuw hoeft te reverse-engineeren.
Gebruik het script scripts/mercell.py. Het lost het tender-id op uit een /today/-URL of een kaal nummer, vertaalt labels naar het Nederlands, rekent tijden om naar Europe/Amsterdam en kan het hele dossier downloaden.
Snelstart
# alleen de planning/mijlpalen (standaard)
python3 scripts/mercell.py 224100 --what planning
# hele dossier: gegevens + planning + documentenlijst, weggeschreven naar md
python3 scripts/mercell.py https://s2c.mercell.com/today/224100 --what dossier --md dossier.md
# alle aanbestedingsstukken downloaden naar een map
python3 scripts/mercell.py 224100 --download ./stukken
Alleen stdlib nodig (geen pip install). Draai vanuit de skillmap of geef het volledige scriptpad op.
Werkwijze
- Bepaal het tender-id. Een gebruiker plakt vaak
https://s2c.mercell.com/today/224100; het id is het getal na/today/. Een kaal getal mag ook. - Kies wat er gevraagd wordt:
- "planning / mijlpalen / tijdschema" ->
--what planning - "aanbestedingsgegevens / opdrachtgever / procedure" ->
--what details - "hele dossier / aanbestedingsstukken / leidraad + planning + documenten" ->
--what dossier - "download de stukken / geef me de documenten" -> voeg
--download <map>toe (werkt met elke--what)
- "planning / mijlpalen / tijdschema" ->
- Standaard schrijf je het resultaat inline; met
--md <bestand>naar een markdown-bestand. Presenteer gedownloade documenten en het md-bestand metpresent_files. - Respecteer de bestandsnaamvoorkeur van de gebruiker voor md-bestanden die je zelf aanmaakt (compact-onderwerp gevolgd door
vYYYYMMDD).
Wat "het hele aanbestedingsdossier" bevat
Het snelst en compleetst is de export-ZIP (T{nr}-Export-YYYYMMDD.zip). Die bevat het volledige gepubliceerde dossier: Beschrijving, Planning, de volledige leidraad met alle bijlagen (UEA, kerncompetenties, selectie-/gunningscriteria, voorwaarden) en de gepubliceerde antwoorden. --download haalt deze ZIP(s) plus losse export-PDF's en de Nota van Inlichtingen op. Wil je de losse bestanden zien, pak dan de ZIP uit met unzip.
Belangrijke details (voor handmatig werk of debuggen)
- API-basis:
https://api.s2c.mercell.com/api/v1 - URL-patroon:
{basis}/{Controller}/{Methode}?{queryparams} - Stuur headers mee:
Origin: https://s2c.mercell.com,Referer: https://s2c.mercell.com/, een browser-User-Agent,Accept: application/json. Zonder deze headers kan de API weigeren. - Datums in de JSON zijn UTC (
...Z); reken om naar Europe/Amsterdam. - Labels zijn localisatiesleutels (
str_...). Vertaal via het bestand opTranslationUrluitUtil/RetrieveSystemSettings(nl =.../live-translations/nl-NL.json). Let op: sleutels in dat bestand zijn lowercase, dus case-insensitief matchen.UserDefinedNamegaat vóór op de vertaalde sleutel.
Publieke endpoints (controller PublishedTender, param tenderId)
| Methode | Inhoud |
|---|---|
GetPublishedTenderDetails |
opdrachtgever, contactpersoon, procedure, kenmerk, onderdelen |
GetPublishedTenderPlanningData |
planning/mijlpalen per ronde en fase |
GetPublishedTenderExports |
export-ZIP('s) met het volledige dossier + losse export-PDF's |
GetPublishedClarificationAnswersData |
Nota van Inlichtingen (gepubliceerde antwoorden) |
GetPublicTenderAnnouncements |
mededelingen (kan null zijn) |
GetPublishedChildTendersPublications |
percelen (lots) |
GetPublishedTenderRoundAndRequirementsData |
eisen/vragenlijsten |
Documenten downloaden: DefaultDocument/GetSignedUrlByDocumentId?documentId={id} geeft { "Url": "<signed blob-url>" }; haal daarna die URL op om het bestand te downloaden. Bestandsnaam staat in het Name-veld naast het DocumentId.
Planning-JSON, structuur
Array met een record per (deel)tender. Relevante velden: TenderName, TenderId, Rounds (met UserDefinedName zoals "Selectiefase"/"Gunningsfase"), Phases, en Dates met per mijlpaal: Type, Date (UTC of null), OrderNumber, TenderProcessRoundId, Name (sleutel), UserDefinedName, NoTimeSet. Groepeer op TenderProcessRoundId en gebruik de rondenaam als kop wanneer er meer dan één ronde is.
Let op de context: in een selectiefase toont het platform de sluiting van ronde 1 met de generieke sleutel "Deadline voor het indienen van offertes", terwijl het feitelijk om de aanmelding gaat. Benoem dat als het relevant is.
Nieuwe endpoints vinden
Werkt een gewenst gegeven nog niet? Herleid het endpoint uit de app-bundel: haal https://s2c.mercell.com/runtime.<hash>.js (chunk-map) en main.<hash>.js op, en zoek naar get controller(){return"..."} en .get("Methode",{param:...}). Het URL-patroon blijft {basis}/{controller}/{methode}?{params}.
Wijzigingshistorie
- 1.0 (2026-09-09): eerste versie met tenderdata, planning en dossier via de publieke Mercell S2C-API, inclusief download van het exportdossier.