- Nag-aalok ang OpenF1 ng libre, live na makasaysayang F1 data na may OAuth2
- Kumpletuhin ang mga endpoint: lap, stints, radyo, kontrol, at panahon
- Napakahusay na mga filter, JSON/CSV output at anod MQTT/WebSockets
Ang OpenF1 API ay ginagamit upang mag-alok real-time at makasaysayang data ng Formula 1 open source, na ginagawang madali para sa mga developer at analyst na bumuo ng mga dashboard, mag-automate ng mga alerto, mag-aral ng mga diskarte, o gumawa ng mga konektadong device na tumutugon sa mga kaganapan sa track. Ang panukala nito ay nagsisilbing tulay sa pagitan ng telemetry at mga application: maaari itong i-query sa pamamagitan ng HTTP, na-filter ng mga parameter, at nagbibigay-daan din para sa streaming ng data.
Kung nagtataka ka kung paano ito naiiba sa iba pang mga solusyon, ang susi ay ang bukas at praktikal na diskarte nito: libreng makasaysayang data nang walang pagpapatunay, real-time (on-demand) na pag-access sa pagbabayad, at maraming paraan ng pagkonsumo (REST, MQTT, at WebSockets). Ang data source ay mula sa livetiming.formula1.com, at kahit na ang OpenF1 ay isang hindi opisyal na proyekto, pinagsasama-sama nito ang napakahalagang impormasyon tulad ng mga oras ng lap, data ng sasakyan, mga komunikasyon sa radyo, kontrol sa lahi, meteorolohiya, stints, posisyon at marami pang iba.
Ano ang OpenF1 at ano ang inaalok nito sa iyo?
Ang OpenF1 ay isang API libre at bukas na mapagkukunan na naglalantad ng data ng F1 upang matuklasan ng sinuman ang kumpetisyon mula sa isang teknikal at reproducible na pananaw. Ang layunin ay upang mapadali ang paglikha ng Mga interactive na dashboard, malalim na pagsusuri sa karera o kahit na mga gadget na umiilaw kapag ang iyong paboritong driver ay nag-overtake o nag-activate ng DRS. Ito ay isang alternatibong inspirasyon ng ecosystem ng MabilisF1, na may kalamangan sa pag-aalok live na data sa panahon ng mga session (para sa mga account na may access) bilang karagdagan sa makasaysayang serye.
Dalawang mga nuances sa pagpapatakbo ang dapat isaalang-alang: ang ilang mga endpoint ay maaaring huwag mag-broadcast ng live sa panahon ng session at nai-publish sa ilang sandali (hal., car_data, mga agwat, o lokasyon), at ang live na pag-access ay nangangailangan ng isang bayad na account. Sa anumang kaso, ang kasaysayan ay libre at naa-access sa JSON o CSV nang walang pagpapatunay, perpekto para sa pagsisimula ng walang frictionless na prototyping.
Mga karaniwang kaso ng paggamit
Sa OpenF1 maaari kang bumuo mula sa simula ng isang timing panel na nagpapakita lap, sektor, gaps at pagitan, pinahusay sa radyo ng koponan at mga kaganapan sa pagkontrol ng lahi. Magdagdag ng pinakamataas na bilis, RPM, o mga graph ng gear, at magkakaroon ka ng pangunahing view ng telemetry upang ihambing ang mga stint at driver.
Sa mga kapaligiran ng analytics, tatawid ka mga oras ng lap, compound at edad ng gulong para imbestigahan ang mga undercut, downgrade, at shutdown window. Maaari mo ring i-automate ang mga alerto sa pamamagitan ng mga flag, VSC/SC o mga pagbabago sa posisyon, pati na rin ang pagre-record ng mga kondisyon ng track at hangin na nakakaapekto sa bilis.
Kung gusto mo ang mga nakakonektang device, ang streaming sa pamamagitan ng MQTT/WebSockets ay magbibigay-daan sa iyong i-on LEDs, abisuhan sa mga mobile phone o mga epekto sa pag-trigger kapag may overtake o may lumabas na dilaw na bandila. Ang "API-first" na diskarte ay pantay na akma sa mga microservice tulad ng sa app harap na gumagamit ng pinagsama-samang data.
Istraktura ng REST API: Mga Endpoint at Ano ang Inaalok Nila
Ang REST API ay inayos ayon sa mga mapagkukunan ng paksa. Ang bawat endpoint ay sumusuporta mga filter ayon sa mga parameter (kabilang ang mga operator tulad ng >, <, >=, <=) at nagbabalik ng data sa JSON o CSV (sa pamamagitan ng pagdaragdag ng csv=true). Nasa ibaba ang isang komprehensibong pangkalahatang-ideya ng kung ano ang saklaw ng bawat pangunahing landas.
Data ng sasakyan
Inilalantad ng endpoint ng car_data ang mga variable ng kotse sa ~3,7 Hz (bilis, RPM, mga gear...). Maaaring hindi available sa mga live na session at nai-publish sa ilang sandali pagkatapos noon. Base URL: GET https://api.openf1.org/v1/car_data
.
- preno: pedal ng preno (100 pinindot, 0 hindi).
- petsa: UTC instant sa ISO 8601.
- numero ng driver: natatanging numero ng piloto.
- drs: Katayuan ng DRS (mga kilalang mapping: 0/1 off, 8 natukoy na karapat-dapat, 10/12/14 sa; iba pang mga halaga ay nagdududa).
- meeting_key: Meeting ID (maaari mong gamitin pinakahuli).
- n_gear: gear 1–8 (0 neutral).
- rpm: mga rebolusyon kada minuto.
- session_key: Session ID (sumusuporta pinakahuli).
- pabilisin: km/h.
- balbula: % throttle.
Mayroong kapaki-pakinabang na pagmamapa ng mga estado ng DRS: 0/1 = off, 8 = nakita at karapat-dapat, 10/12/14 = saAng ilang mga intermediate na halaga ay lilitaw bilang hindi kilala.
Driver
Ibinabalik ang pilot information ayon sa session na may mga pangalan para sa TV, team, at mga code. GET /v1/drivers.
- broadcast_name: pangalan sa TV graphics.
- country_code: code ng bansa.
- numero ng driver: nag-iisang dorsal.
- first_name, last_name, full_name: mga pangalan ng piloto.
- headshot_url: larawan ng mukha.
- meeting_key, session_key: mga ID.
- pangalan_acronym: tatlong-titik na acronym.
- team_color: kulay ng team hex.
- team_name: pangalan ng pangkat.
Agwat
Mga agwat sa pagitan ng mga kotse at gap sa pinuno, na-update ~bawat 4 na segundo sa karera lang (maaaring ilabas ang live pagkatapos ng session). GET /v1/intervals.
- petsa: timestamp.
- numero ng driver: likod.
- gap_to_leader: segundo sa pinuno, "+1 LAP" kung lapped o null kung pinuno.
- agwat: oras sa naunang kotse, "+1 LAP" kung naaangkop o null kung nangunguna.
- meeting_key, session_key: mga ID.
Mga Laps
Detalyadong impormasyon sa bawat lap (mga sektor, bilis, pit-out, bilis ng bitag). GET /v1/laps.
- petsa_pagsisimula: tinatayang simula ng pagbabalik.
- numero ng driver: likod.
- tagal_sektor_1/2/3: beses ayon sa sektor.
- i1_speed, i2_speed: bilis sa mga intermediate.
- is_pit_out_lap: totoo kung ito ay pit exit lap.
- lap_duration: kabuuang oras.
- lap_number: lap number.
- segments_sector_1/2/3: mini-sectors (mga halaga 2048 = dilaw, 2049 = berde, 2051 = lila, 2064 = pitlane; iba pang mga halaga ay posible).
- st_speed: bilis sa bitag.
- meeting_key, session_key: mga ID.
Hindi available ang mga segment sa racing at maaaring may mga hindi pagkakatugma ng kulay sa TV sa hindi malamang dahilan.
lugar
Tinatayang mga coordinate ng kotse sa track sa ~3,7 Hz (hindi kasama lateral na posisyon sa track, pag-unlad lamang). Maaaring i-post ang live pagkatapos ng session. GET /v1/lokasyon.
- petsa: Oras ng UTC.
- numero ng driver: likod.
- meeting_key, session_key: mga ID.
- x, y, z: Mga coordinate ng Cartesian.
pulong
Igrupo ang isang weekend (GP o pagsusulit) kasama ang mga session nito. GET /v1/pagpupulong.
- circuit_key, circuit_short_name: sirkito.
- country_code, country_key, country_name: bansa.
- petsa_pagsisimula: simulan.
- gmt_offset: pagkakaiba ng oras kumpara sa GMT.
- lugar: lungsod/lokasyon.
- meeting_key: ID ng pulong.
- meeting_name, meeting_official_name: mga pangalan.
- taon: taon.
Mga overtake (beta)
Pag-overtake at mga pagbabago sa posisyon (kabilang ang on-track, pit at mga parusa pagkatapos ng karera). Sa mga karera lang at maaaring hindi kumpleto. GET /v1/overtakes.
- petsa: instant.
- meeting_key, session_key: mga ID.
- overtake_driver_number: lumampas ang likod.
- overtaking_driver_number: pasulong ng likod.
- posisyon: posisyon pagkatapos makumpleto ang overtaking.
Hukay
Ang mga pit lane ay pumasa na may kabuuang tagal mula sa pagpasok hanggang sa labasan. GET /v1/pit.
- petsa, numero ng driver, lap_number: konteksto.
- meeting_key, session_key: mga ID.
- pit_duration: segundo sa pitlane.
Posisyon
Mga posisyon ng driver sa buong session, kasama ang mga pagbabago. GET /v1/posisyon.
- petsa, numero ng driver.
- meeting_key, session_key.
- posisyon: 1 pataas.
kontrol ng lahi
Mga opisyal na kaganapan: mga flag, DRS, Safety Car, VSC, mga mensahe at iba't ibang kategorya. GET /v1/race_control.
- kategorya: CarEvent, Drs, Flag, SafetyCar, atbp.
- petsa, numero ng driver, lap_number.
- bandila: mga uri (BERDE, DILAW, DOBLE YELLOW, CHECKED…).
- mensahe: paglalarawan ng kaganapan.
- saklaw: Track, Driver, Sektor…
- bahagi: maliit na sektor na kasangkot (kung naaangkop).
- meeting_key, session_key.
Session
Listahan at mga detalye ng mga session (Practice, Qualifying, Sprint, Race...). GET /v1/sessions.
- circuit_key, circuit_short_name.
- country_code, country_key, country_name.
- date_start, date_end, gmt_offset, lugar.
- meeting_key, session_key.
- session_name: Practice 1, Kwalipikasyon, Race...
- session_type: Magsanay, Kwalipikado, Lahi...
- taon.
Resulta ng session (beta)
Pag-uuri pagkatapos ng bawat session: pinakamahusay na lap o kabuuang oras ng karera. GET /v1/session_result.
- dnf, dns, dsq: hindi natapos, hindi nagsisimula, nadisqualify.
- numero ng driver, meeting_key, session_key.
- tagal: pinakamahusay na lap (libreng pagsasanay/kwalipikasyon) o kabuuang oras (race). Sa qualifying, array [Q1, Q2, Q3].
- gap_to_leader: pagkakaiba kumpara sa pinuno; sa quali, array [Q1, Q2, Q3].
- number_of_laps: natapos ang mga lap.
- posisyon: huling posisyon.
Panimulang grid (beta)
Pagsisimula ng grid para sa susunod na karera. GET /v1/starting_grid.
- numero ng driver, meeting_key, session_key.
- lap_duration: qualifying lap time.
- posisyon: ilagay sa grill.
Mga stints
Patuloy na mga panahon ng pagmamaneho ayon sa tambalan ng gulong at edad. GET /v1/stints.
- tambalan: SOFT, MEDIUM, MAHIRAP...
- numero ng driver, meeting_key, session_key.
- lap_start, lap_end: hanay ng mga liko.
- stint_number: ordinal ng stint.
- gulong_edad_sa_pagsisimula: edad ng gulong sa simula (sa laps).
radyo ng pangkat
Pagpili ng mga mensahe sa radyo sa pagitan ng mga driver at team (hindi 100% ng mga komunikasyon). GET /v1/team_radio.
- petsa, numero ng driver.
- meeting_key, session_key.
- recording_url: link sa audio.
panahon
Circuit na panahon na may update bawat minuto. GET /v1/weather.
- temperatura ng hangin (°C), track_temperature (°C).
- halumigmig (%), presyon (mbar), ulan.
- direksyon_hangin (0–359°), bilis ng hangin (MS).
- petsa, meeting_key, session_key.
Mga filter, oras at mga format: sulitin ang iyong mga query
Isa sa mga pakinabang ng OpenF1 ay ang pag-filter ayon sa mga parameter sa mismong URL, kabilang ang mga operator na may kaugnayan. Nagbibigay-daan ito para sa mga nagpapahayag na mga query tulad ng pag-filter ayon sa tagal ng lap, pagpili ng hanay ng petsa, o paglilimita ayon sa numero ng lahi at session.
Bilang karagdagan sa pag-filter ayon sa mga patlang, maaari mong gamitin mga saklaw ng oras na may date_start at date_end (sumusuporta sa maraming format na katugma sa dateutil.parser, gaya ng “2021-09-10”, “2021-09-10T14:30:20+00:00”, “Sep 10, 2021”, atbp.).
Kung mas gusto mo ang mga spreadsheet, magdagdag csv=totoo sa query at i-download sa CSV. Ito ay perpekto para sa Excel o para sa Mabilis na ETL bago mag-load ng data sa isang analytical warehouse.
Mga halimbawa (na-paraphrase mula sa pinagmulang materyal para sa iyong sanggunian): Ang pit-out ni Sainz ng hindi bababa sa 120 s sa isang partikular na sesyon: /v1/laps?session_key=9222&driver_number=55&is_pit_out_lap=true&lap_duration>=120
. Lahat ng session ng Setyembre 2023: /v1/sessions?date_start>=2023-09-01&date_end<=2023-09-30
. At kung gusto mo ito sa CSV: /v1/sessions?year=2023&csv=true
.
Real-time na access: OAuth2 authentication at mga header
Para sa live na data kailangan mo ng isang naaprubahang account at isang daloy ng OAuth2 simple: magpadala ng username at password sa /token
, nakakatanggap ka ng a access_token na may expiration na 1 oras at isama mo ito bilang Tagdala sa Authorization header ng iyong mga kahilingan.
Mga detalye ng pagpapatakbo na dapat mong malaman: Ang API ay madalas na ina-update gamit ang a pagkaantala ng ~3 segundo may kinalaman sa live (maaaring mag-iba ayon sa malamig na simula), at ang mga query sa REST ay mayroong a 10 s timeoutKung ang isang query ay tumatagal ng mahabang panahon, hatiin ito sa mga chunks at pagsamahin ang mga resulta nang lokal.
Tandaan na ang token mag-e-expire sa loob ng 1 oras; dapat na malinaw na i-renew ng iyong aplikasyon ang token. Para sa pangkalahatang suporta at feedback, ang inirerekomendang channel ay Mga Talakayan sa Github; Iniuulat ang mga bug sa pamamagitan ng paggawa ng mga isyu sa repositoryo.
Mahusay na streaming gamit ang MQTT at WebSockets
Para sa mga application na sensitibo sa oras, ang rekomendasyon ay bigyang-priyoridad MQTT o WebSockets (MQTT over WSS) dahil nagpapadala sila ng data sa sandaling ito ay magagamit, iniiwasan ang tuluy-tuloy na botohan.
Mga karaniwang koneksyon: MQTT TLS on mqtt.openf1.org:8883
at secure na WebSockets in wss://mqtt.openf1.org:8084/mqtt
. Ang pagpapatunay ay gumagamit ng access token bilang password; ang username ay maaaring maging anumang walang laman na string (o ang iyong email).
Los ang mga paksa ay sumasalamin sa mga REST endpoint (hal.: v1/sessions
, v1/laps
, v1/location
…), na may opsyon ng mga wildcard kung sinusuportahan sila ng iyong kliyente. Ang payload ay JSON at nagdaragdag ng mga kapaki-pakinabang na field: _id (pagdaragdag ng integer upang ayusin ayon sa oras) at _susi (document identifier para sa magkakasunod na bersyon ng parehong bagay, halimbawa mga round na ina-update gamit ang mga hiwa).
Halimbawa ng mensahe ng lokasyon (nagpapakitang format): kasama ang meeting_key, session_key at driver_number, pati na rin ang mga coordinate at streaming metafield.
{
"meeting_key": 1257,
"session_key": 10007,
"driver_number": 31,
"date": "2025-04-11T11:21:16.603025+00:00",
"x": 0,
"y": 0,
"z": 0,
"_key": "1744370476603_31",
"_id": 1747235800206
}
Kaligtasan at mabubuting gawi
Ang priyoridad ay protektahan mga kredensyal at mga tokenAng palitan ng username/password-to-token ay dapat mabuhay sa iyong backend: huwag kailanman mag-embed ng mga direktang kredensyal sa nasusuri na code ng kliyente.
Para sa mga web app, ipadala ang token sa pamamagitan ng HTTPS at iwasang ilantad ito lokal na imbakan kung may panganib ng XSS; suriin ang cookies HttpOnly + Secure kapag naaangkop. Sa mga arkitektura na may streaming mula sa browser, isaalang-alang kung mas ligtas na panatilihin ang Koneksyon ng MQTT/WebSocket sa iyong backend at ipasa ang mga kaganapan sa mga kliyente.
Sa mga backend na kapaligiran, ligtas nitong iniimbak ang token at pinangangasiwaan nito renewal nang maaga. Huwag mag-post ng mga token sa mga pampublikong repo o i-paste ang mga ito sa mga nakabahaging sample ng code.
Ecosystem, mga kontribusyon at roadmap
Layunin ng OpenF1 na gawing demokrasya ang data ng F1 ginagawang accessible ang mga ito. Iniimbitahan ka nilang magmungkahi ng mga ideya sa Mga Talakayan sa Github at makipagtulungan sa pamamagitan ng mga PR. Ang serbisyo ay libre gamitin (walang pagpapatotoo o mga limitasyon sa rate para sa makasaysayang data), ngunit mga kahilingan responsableng paggamit at, kung sa tingin mo ay kapaki-pakinabang ito, suportahan ang pagpapanatili nito sa pamamagitan ng mga donasyon.
Binabanggit ng roadmap ang pagsasama klasipikasyon at kalendaryo, magdagdag ng 2018–2022 season, mga transcript ni IA para sa radyo, mas tumpak na mga oras ng paghinto, at mga sukatan ng pag-overtak at gulong. Mayroon ding disclaimer: hindi nila ginagarantiya patuloy na pagkakaroon o katumpakan ganap, at hindi mananagot para sa anumang pagkalugi na dulot ng paggamit.
Credit sa MabilisF1 at ang may-akda nito para sa nagbibigay-inspirasyong bahagi ng system (kabilang ang SignalR recorder), at legal na paalala: Ang OpenF1 ay hindi kaakibat sa mga kumpanyang F1; mga trademark at karapatan ay mula sa Formula One Licensing BV
Paghahambing at mga alternatibo: Live Pulse at iba pang mga serbisyo
Sa ecosystem mayroong mga serbisyo tulad ng "F1 Live Pulse" (sa pamamagitan ng mga platform ng uri ng RapidAPI) na naglalayong mag-alok Real-time na data, mga opisyal na mensahe, pagtakbo ng gulong, radyo ng koponan, panahon, at mga ranggo na may mga hula. Madalas silang nag-aayos ng mga endpoint para sa mga driver, oras, pit stop, radyo, kontrol sa lahi, lagay ng panahon, at mga standing, na may pagtuon sa pagpapagana ng mga app at rich dashboard.
Available din ang mga komersyal na API gaya ng "api-formula-1.p.rapidapi.com". Isang praktikal na gabay sa Espanyol ang nagpakita kung paano gamitin ang mga ranggo XMLHttpRequest at pagkatapos ay i-migrate sila sa kunin dahil sa isang isyu sa CORS, idinaragdag ang "x-rapidapi-key" at "x-rapidapi-host" na mga header. Ito ay isang magandang paalala na kapag nagtatrabaho sa mga API mula sa browser, CORS at mga susi nangangailangan ng pangangalaga; isang backend na nag-proxy sa kahilingan ay kadalasang mas gusto.
Kung pipiliin mo ang OpenF1, mayroon kang bentahe ng bukas na kasaysayan, mga nagpapahayag na mga filter, Katutubong CSV at isang live na mode na may OAuth2, pati na rin ang streaming sa pamamagitan ng MQTT/WebSockets. Depende sa iyong kaso, maaari mo itong pagsamahin sa iba pang mga mapagkukunan, palaging iginagalang mga lisensya at tuntunin ng bawat serbisyo.
Pagsisimula nang lokal sa Python at MongoDB
Inirerekomenda ng ilang mapagkukunan ang pag-set up ng lokal na kapaligiran para sa pagproseso at pag-save ng data. Ang isang karaniwang diskarte ay ang pag-install MongoDB Community Server v7, siguraduhing mayroon ka Sawa ≥ 3.10 y pip ≥ 23, at i-install ang OpenF1 Python package.
Pagkatapos ng pag-install, i-configure ang variable ng kapaligiran MONGO_CONNECTION_STRING na tumuturo sa iyong lokal/malayuang halimbawa, at i-bootstrap ang proyekto upang kumonsumo at mag-imbak ng data. Pinapadali ng pattern na ito ang reproducible analysis at sariling mga dashboard konektado sa iyong database.
Masigasig na manunulat tungkol sa mundo ng mga byte at teknolohiya sa pangkalahatan. Gustung-gusto kong ibahagi ang aking kaalaman sa pamamagitan ng pagsusulat, at iyon ang gagawin ko sa blog na ito, ipakita sa iyo ang lahat ng mga pinaka-kagiliw-giliw na bagay tungkol sa mga gadget, software, hardware, teknolohikal na uso, at higit pa. Ang layunin ko ay tulungan kang mag-navigate sa digital na mundo sa simple at nakakaaliw na paraan.