QDG Knowledge Base Read-only viewer QWebHub
general

Uruguay Crawler - Maroñas

Version 1 · Created the Uruguay crawler page with calendar/meeting/horse endpoints, JSON and XML structures, run commands, limitations, verification, and module changelog.

Uruguay Crawler - Maroñas

Last reviewed: 2026-08-08 AEST

Module identity

  • Country: Uruguay
  • Program/source name: Hipica Maroñas and the associated first-party mobile service
  • Adapter source ID: uy_maronas
  • Python module: src\formcrawler\sources\uy\maronas.py
  • Results launcher: scripts\crawl_maronas_results.bat
  • Horse-profile launcher: scripts\crawl_maronas_horse_profile.bat
  • Discipline: Thoroughbred (T)
  • Racing jurisdiction code: URU
  • ISO country code: UY
  • Public host: hipica.maronas.com.uy
  • First-party service host: mobile-rest-services-v3.azurewebsites.net

Scope and key pages

Public page or action First-party endpoint Artifact
Calendar range: /?start=YYYY-MM-DD&end=YYYY-MM-DD POST /XTurfRestService.svc/GetRacingCalendarHistory Calendar JSON
Meeting: /RacingInfo/RacingDate?RacingDate=<date>&RaceTrackId=<id> GET /XTurfResourcesService.svc/GetRacingDocument?...&exportFormat=XML Complete meeting-result XML
Horse search: /RacingInfo/Search?SearchString=<name> POST /XTurfRestService.svc/SearchParticipants Search JSON
Horse card: /RacingInfo/HorseCard?HorseId=<id> POST /XTurfRestService.svc/GetHorseCard Horse-profile JSON

The calendar covers Maroñas, Las Piedras, Paysandú, and supported interior track meetings returned by the source. Only meetings with ProgramStatusId=1 inside the exact requested range are queued.

Capture workflows

Meeting results

  1. Submit one bounded calendar POST for the entire inclusive range.
  2. Preserve the calendar JSON control artifact.
  3. Filter its returned dates to the requested range.
  4. Read each published meeting's RacingPeriod.RaceTrack identity.
  5. Queue one complete ResultadoCarreraWeb XML document per track meeting.
  6. Validate meeting date and at least one positive official placing.
  7. Store immutable JSON/XML, metadata, and FormParser handoffs.

Exact horse profile

  1. Submit one exact-name search POST.
  2. Inspect Data[] and retain only an equine result (Type=1) whose normalized displayed name exactly matches the requested name.
  3. Queue one horse-card POST for the numeric EntityId.
  4. Validate that Horse.Id matches and Horse.Name is present.
  5. Preserve the raw returned profile, including incomplete breeding and source placeholder dates, for FormParser.

Source and artifact data structure

Calendar JSON

The response is a top-level array. Each date object can expose:

  • Date;
  • RacingDates[];
  • meeting ProgramStatusId and Ordinal;
  • RacingPeriod, including Id and nested RaceTrack fields such as Id, Name, InternationalCode, and ShortName.

Calendar target metadata includes start_date, end_date, and compact date. Meeting targets can additionally include track_id, track_name, track_code, meeting_ordinal, and period_id.

Meeting XML

The result document has root RacesCharts, with one RaceCharts node per race. It includes meeting/track values, race-level content, runners, and OfficialFinish nodes. One XML artifact covers the complete meeting rather than requiring one request per race or runner.

Horse JSON

The search response is a JSON object with Data[]. The horse-card response is a JSON object containing Horse and available related horse, sire, dam, damsire, and performance information. FormCrawler checks only identity/readiness; it does not normalize missing fields.

C:\Users\Robert\project-data\FormCrawler\t-artifacts\<year>\URU\uy_maronas\<event>\
C:\Users\Robert\project-data\FormParser\inbox\T\<year>\URU\uy_maronas\<artifact-id>.json

How to run

Full meeting-results range:

.\scripts\crawl_maronas_results.bat 2026-08-01 2026-08-06

One-date, one-meeting smoke test:

.\scripts\crawl_maronas_results.bat 2026-08-02 2026-08-02 1

Use a third value of 0 for discovery only. Rerun the same range without a limit to resume all queued meetings.

Exact horse lookup:

.\scripts\crawl_maronas_horse_profile.bat "Corazon Rebelde"

Equivalent generic range command:

python scripts\formcrawler.py capture-date-range `
  --source uy_maronas `
  --start 2026-08-01 `
  --end 2026-08-06

Known limitations and recovery

  • Calendar, search, and horse-card controls use source-required POST bodies.
  • Robert's URL-only proxy transport cannot reproduce those POST bodies and must not be enabled for these workflows.
  • Only an exact normalized horse-name match is captured.
  • Missing breeding fields and placeholder dates are intentionally preserved unchanged.
  • A meeting without complete XML or positive official placings remains retryable.
  • Stop with Ctrl+C and rerun the same range or horse name to resume safely.

Verification

On 2026-08-07, a 2026-08-02 Maroñas meeting produced a 471,938-byte XML with 11 races and 142 horses/official finishes. A 2026-08-01 multi-track run captured complete eight-race XML files for Maroñas and Paysandú at 304,943 and 208,874 bytes. An independent July scan discovered 17 meetings; a bounded 2026-07-31 follow-up captured a 417,274-byte Las Piedras XML with 11 races and 124 official finishes. Exact lookup for Corazon Rebelde found horse 72002 and stored a 2,136-byte profile after a 200-byte search response. Hashes and handoffs matched.

Module changelog

2026-08-07 - Historical verification and horse profiles

  • Added exact-name horse search and horse-card JSON capture.
  • Added crawl_maronas_horse_profile.bat and capture-discovered support.
  • Verified the Corazon Rebelde profile, incomplete breeding preservation, and 23.969-second same-host spacing.
  • Independently verified July discovery, Las Piedras capture, and multi-track Maroñas/Paysandú results.

2026-08-07 - Initial meeting-results implementation

  • Added uy_maronas with one POST-backed calendar control per inclusive range.
  • Added locally filtered published-meeting discovery and one complete XML target per track meeting.
  • Added persisted safe POST request definitions, date-range processing, queue resume, and crawl_maronas_results.bat.
  • Live-verified meeting XML structure, official finishes, artifact hashes, and FormParser handoffs.
Updated by Codex on Aug. 7, 2026, 2:08 p.m. · Task: Create one FormCrawler wiki page per implemented country module