QDG Knowledge Base Read-only viewer QWebHub
general

France Crawler - LeTROT Harness

Version 1 · Documented the implemented LeTROT routes, lifecycle markers, operation, breeding/supplementary data, storage, limitations, and full-day validation.

Historical version

France Crawler - LeTROT Harness

Last reviewed: 2026-08-08 AEST

Identity and scope

  • Source ID: fr_letrot
  • Discipline: Harness (H)
  • Racing code / ISO country: FRA / FR
  • Adapter: src/formcrawler/sources/fr/letrot.py
  • Discipline module: src/formcrawler/sources/harness.py
  • Base site: https://www.letrot.com/

FormCrawler stores raw LeTROT responses only. It does not parse runner, result, breeding, sectional, or steward values.

Routes and operation

  • Dated calendar: https://www.letrot.com/courses/YYYY-MM-DD
  • Whole-meeting programme: https://www.letrot.com/courses/programme/YYYY-MM-DD/<meeting_id>
  • Individual race detail: https://www.letrot.com/courses/YYYY-MM-DD/<meeting_id>/<race_number>

The dated calendar is ordinary server-rendered HTML. Its embedded first-party event status classifies each meeting as pre-race (INCOMING) or post-race (DEFINITIVE). One programme capture per meeting is the default efficient acquisition unit; individual race URLs remain available for explicit richer captures.

scripts\crawl_letrot_harness.bat START_DATE END_DATE [MEETING_LIMIT_PER_DATE]

python scripts\formcrawler.py capture-date-range `
  --source fr_letrot `
  --start YYYY-MM-DD `
  --end YYYY-MM-DD `
  --page-type meeting_programme

The range is inclusive and requests one dated calendar per day. A limit of 0 performs discovery only. Rerunning the same range with the same queue safely resumes incomplete work.

Lifecycle data

Pre-race programme pages contain every race and runner for the meeting, with race conditions, number, horse, sex/age, distance, driver or jockey, trainer, earnings and published form data.

Post-race programme pages add official rank/result summaries, time and kilometre-rate data. Individual completed race pages additionally expose final arrival, disqualifications, allocations, tracking sectionals, steward decisions, replay links, origins and qualification tables.

Readiness uses raw server markers, not browser-rendered labels: eventStatus=INCOMING for pre-race and eventStatus=DEFINITIVE plus result-rank data for post-race.

Supplementary and breeding information

Qualifications provide entrants, qualifying result/time, sire, dam, damsire, sex/age, speciality and trainer. Race detail pages provide sire, dam, damsire and qualification data before and after racing. Horse profiles provide sire, dam and foal year; country of origin was not observed as a discrete field. Example: Komeo du Dome.

Supplementary resources are documented for review and are not part of the default meeting-programme crawl.

Storage and verification

Artifacts use FormCrawler/h-artifacts/<year>/FRA/fr_letrot/; handoffs use FormParser/inbox/H/<year>/FRA/fr_letrot/.

Live tests on 2026-08-08 completed without a proxy:

  • 2026-08-07 post-race day: one calendar and all 4/4 meeting result programmes, zero retries/failures.
  • 2026-08-09 pre-race day: one calendar and all 16/16 meeting programmes, zero retries/failures.
  • Independent audit: 26 accumulated LeTROT artifacts including smoke/repair evidence; zero byte-length, SHA-256, metadata-identity, URI or FormParser-handoff failures.
  • Full Python suite: 131 passed.

Limitations

  • A historical completed page cannot recreate an earlier immutable pre-race snapshot; pre-race capture must occur while LeTROT reports the meeting as incoming.
  • Country of origin is not exposed as a discrete horse-profile field in the verified example.
  • Individual race pages are not queued by default because a whole-meeting programme is the efficient base acquisition unit. Use direct capture when detailed race-level tracking or steward data must be retained.

Module changelog

  • 2026-08-08: Re-investigation established that the source is server-rendered HTML rather than an API-only Vue shell.
  • 2026-08-08: Implemented dated discovery, lifecycle-aware whole-meeting capture, explicit race-detail capture, friendly artifact labels, launcher, tests and Harness module registration.
  • 2026-08-08: Completed full 4-meeting result and 16-meeting pre-race days and verified every accumulated artifact/handoff.
Updated by Codex on Aug. 8, 2026, 3:47 a.m. · Task: French LeTROT harness implementation and discipline-module separation