Install
openclaw skills install pursuit-mapsTrackMania Pursuit maps pipeline — fetches maps from ManiaPlanet Feedback (star ratings, vote counts), enriches with ManiaExchange data, syncs to Google Sheets via GAS Web App. Daily automated pipeline with vote tracking.
openclaw skills install pursuit-mapsAutomated pipeline: ManiaPlanet Feedback + ManiaExchange → Google Sheets.
Main script: pipeline/pipeline.py in repo tomekdot/pursuit-maps
python3 pipeline/pipeline.py # full pipeline
python3 pipeline/pipeline.py --action sync # fetch + push new maps + auto-sort
python3 pipeline/pipeline.py --action votes # update vote columns only
python3 pipeline/pipeline.py --action sort # sort sheet by Uploaded At
python3 pipeline/pipeline.py --action report # vote change report
python3 pipeline/pipeline.py --action validate # data quality checks
GAS Web App: pipeline/gas-webapp/PursuitMaps.gs — deploy once in Sheet (Extensions → Apps Script → Deploy as Web App). Accepts HTTP POST from pipeline.
pursuit-maps/
├── pipeline/pipeline.py ← Main entry point (all actions)
├── pipeline/gas_runner.py ← HTTP client for GAS
├── pipeline/gas-webapp/ ← GAS script (deploy in Sheet)
├── data/ ← Cache, history, reports
├── docs/ ← Setup guides
├── scripts/legacy/ ← Old scripts (reference)
└── .github/workflows/pipeline.yml ← Daily 5:00 UTC
| Col | Name | Source |
|---|---|---|
| A | # | Auto |
| B | Map name | Feedback |
| C | Author login | ManiaExchange |
| D | Environment | ManiaExchange |
| E | Uploaded at | ManiaExchange (ISO 8601 → normalized to YYYY-MM-DD HH:MM:SS) |
| F | UID | Feedback |
| G | TrackMania\MapType | ManiaExchange |
| H | Notes | Manual |
| I | YN Rating | Feedback YES/NO section |
| J | YN Votes | Feedback YES/NO section |
| K | 5-Star Avg | Feedback 5 STARS section |
| L | 5-Star Total | Feedback 5 STARS section |
Sheet is auto-sorted by Uploaded At (column E) descending after every sync (newest maps on top).
yyyy-mm-dd hh:mm:ss) so Sheets treats it as proper datepython3 pipeline/pipeline.py --action sort or POST {"action":"sort"} to GASfeedback.prod.live.maniaplanet.com/votes/display/106tm.mania.exchange/api/maps/get_map_info/id/{UID} (V1, accepts UID)Feed page has TWO separate star rating sections per map card:
<h6>YES/NO</h6> → gold span → rating (count)<h6>5 STARS</h6> → gold span → rating (count)Parse independently. ~80% of maps have 5-Star data but no YES/NO votes.
Split HTML at each <img src="...maps/..."> to isolate per-map cards.