France Crawler - LeTROT Harness
Version 2 · Recorded the pushed Harness/Greyhound branch location and outstanding main integration.
Historical versionFrance Crawler - LeTROT Harness
<!-- repository-baseline:start -->
Repository location
This crawler is committed and pushed in origin/codex/harness-greyhound-jurisdictions at 490b0c9. That branch is clean and passes 131 tests. It is not yet integrated into origin/main at 4d68b42; consult overview before choosing a base for new work.
<!-- repository-baseline:end -->
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
capturewhen 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.