iracing-data-api is a simple Python wrapper around the General Data API released by iRacing in January 2022 and documented here.
The client allows easy access to some of the most useful endpoints of the data API.
Ensure that you have marked your account with iRacing for legacy authentication - accounts with 2FA will not work with the API. This is a limitation of iRacing, not this wrapper.
pip install iracingdataapi
from iracingdataapi.client import irDataClient
idc = irDataClient(username=[YOUR iRACING USERNAME], password=[YOUR iRACING PASSWORD])
# get the summary data of a member
idc.stats_member_summary(cust_id=20979)
# get latest results of a member
idc.stats_member_recent_races(cust_id=209179)
# get all laps for a specific driver in a race
idc.result_lap_data(subsession_id=43720351, cust_id=209179)When you have acquired an Oauth2 access token from iRacing, and have ensured that token is valid, you can use it like so in this client:
from iracingdataapi.client import irDataClient
idc = irDataClient(access_token=[YOUR OAUTH2 TOKEN])The rest of the client will work exactly the same, except that when that token expires you will find the client
raises an AccessTokenInvalid exception. For now, managing refreshing of tokens etc is outside the scope of
this client, so build around that exception and reinitialise the client with a new token when necessary. For instance:
try:
lap_data = idc.result_lap_data(subsession_id=12345678, cust_id=987654)
except AccessTokenInvalid:
# access token is invalid
new_token = do_something_in_your_code_to_refresh_token()
idc = irDataClient(access_token=[NEW TOKEN])
lap_data = idc.result_lap_data(subsession_id=12345678, cust_id=987654)All available methods of irDataClient are included in client.py.
I welcome all pull requests for improvements or missing endpoints over time as they are added by iRacing.
1.3.0
- Added a minimal Oauth2 implementation. You can now choose to send either username/password credentials as before, or use the iRacing Oauth2 token to make your requests. More information in the readme.
1.2.3
- Update
result_search_hostedto remove thecust_id/host_cust_idrequirement, and also add theteam_idparameter. Thanks @glenbecker for that.
1.2.2
- Added
driver_listendpoint, thanks to @nylanderj for that - Corrected issues where
if [parameter]would skip if the parameter was correctly set to 0, e.g.race_week_num. Thanks to @abelsm2 for that - Added initial test setup
- Added type hints throughout
1.2.0 Thanks to @ablesm2 for these changes.
- Added missing endpoints
time_attack_member_season_results()stats_member_recap()stats_member_division()series_past_seasons()league_roster()
- Removed check for cust_id on methods that default the currently logged in member:
stats_member_summary()stats_member_yearly()stats_member_recent_races()
1.1.6
- More rate limiting fixes
1.1.5
- Add rate limiting to
_get_resource
1.1.4
- Fix
result_search_seriesto correctly includefinish_range_beginas an option - Fix
season_spectator_subsessionidsto correctly return the IDs rather than the object
1.1.3
- Bug fix for some 5xx errors that are thrown by iRacing
- Added the
season_spectator_subsessionids()endpoint
1.1.0
- Added docstrings to all methods for developer experience
- Renamed
series()toget_series()for consistency. Breaking change: For that same consistency,serieshas been reimplemented as a property which returns the series with their assets. To amend your implementation, either switch toget_series()or remove any brackets in your call ofseries. - Renamed
get_carclass()toget_carclasses()to be more consistent with other endpoints. NOTE:get_carclass()will be removed in a future release. - Added assets to the returned data of
tracks. If you prefer not to get those assets, useget_tracks(). - Removed redundant cookie handling code, as that is all handled within
requests.Session - Fixed a ratelimiting error
- Fixed a ratelimiting bug
- Fixed a bug related to empty results
- Improved handling of results
1.0.6
- Bug fix in
result_lap_datamethod, which will now return an empty list for anycust_id/subsession_idcombinations for which laps were not turned.
1.0.5
- Added a wait when hitting a rate limit
1.0.4
- Bug fix: Previously an attempt wouldn't be retried if the authentication data became stale. This release fixes that
1.0.3
- Added the endpoints described in the August 22nd update
1.0.2
- Adjusted login flow to avoid logging in on instantiation of an
irDataClientobject - Login now happens either on the initial call to an iRacing endpoint, or whenever a
401 Unauthorizedresponse is received form iRacing
1.0.1
- Adjusted
result_search_seriesto allow searches by date range without using season years and quarters.