toddrob99 / MLB-StatsAPI

Python wrapper for MLB Stats API
GNU General Public License v3.0
533 stars 100 forks source link

How can I get runners on base for a game? #55

Closed jso8910 closed 3 years ago

jso8910 commented 3 years ago

Pretty self explanatory. I want to be able to know if there is a runner on first, second, third, etc.

toddrob99 commented 3 years ago

This data is in the game endpoint. You can retrieve it using something like this: game = statsapi.get("game", {"gamePk": 634039}).

You will find the current runners on base in the dict at game["liveData"]["linescore"]["offense"]... if there is a first key in that dict, there is a runner on first; if there is a second key, there is a runner on second, and if there is a third key, there is a runner on third. The value for each of these keys will be a dict containing info about the player on that base. If there is no runner on a given base, the key for that base will be missing.

If you want to know where runners were at different points in the game, you can either retrieve the game data using a timecode from the game_timestamps endpoint: timestamps = statsapi.get("game_timestamps", {"gamePk": 634039}), and look at the current runners as described above, or you can use the data in game["liveData"]["plays"]["allPlays"]. For each play in that list, there will be a runnerIndex key containing a list of values corresponding to keys in the runners list. You can iterate through the items in the runners list to see where each runner started and ended, and how they got there. The batter will have runners[N]["movement"]["originBase"] == None. Keep in mind a runner can move more than once during a play, for example the runner on first could steal second, then advance to third on a wild pitch, then score on a base hit. So more than one of the items in the runner list may be the same runner.

In the future keep in mind there is a subreddit about MLB data, and you can get input from others in the community aside from me.