uberfastman / yfpy

Python API wrapper for the Yahoo Fantasy Sports public API (supports NFL, NHL, MLB, and NBA).
https://pypi.org/project/yfpy/
GNU General Public License v3.0
187 stars 48 forks source link
fantasy-football fantasy-leagues fantasy-sports fantasy-sports-api fantasy-sports-leagues fantasyfootball hacktoberfest python python-api-wrapper python3 yahoo yahoo-api yahoo-fantasy yahoo-fantasy-baseball yahoo-fantasy-basketball yahoo-fantasy-football yahoo-fantasy-hockey yahoo-fantasy-sports

YFPY - Yahoo Fantasy Sports API Wrapper

Python API wrapper for the Yahoo Fantasy Sports public API

Author: Wren J. R. (uberfastman)

GitHub release (latest SemVer) GitHub tag (latest SemVer) GitHub Workflow Status (with event)

PyPI PyPI PyPI PyPI


Do you like the YFPY API wrapper? Star the repository on GitHub and please consider helping support its ongoing development:

Cryptocurrency Address
Bitcoin (BTC) bc1qataspvklhewtswm357m0677q4raag5new2xt3e
Ethereum (ETH) 0x5eAa522e66a90577D49e9E72f253EC952CDB4059


READ THE DOCS HERE!
Detailed documentation on YFPY can be found at https://yfpy.uberfastman.com.

Table of Contents


About

YFPY is a comprehensive wrapper around the Yahoo Fantasy Sports API. It allows for easy retrieval and parsing of almost any data you might wish to extract and use from any Yahoo fantasy league to which your Yahoo account has access (or for public leagues). The primary focus of this wrapper is on fantasy football (NFL), but it also supports usage with fantasy hockey (NHL), fantasy baseball (MLB), and fantasy basketball (NBA).


Installation

Pip

Manual


Setup

Yahoo Developer Network App

In order to use YFPY with private fantasy leagues, you must set up an app on your Yahoo account to allow access. Follow the step-by-step guide below for instructions on how to do so, or see Getting Started in the Yahoo Developer Network docs for more details.

Note: If you are only planning on using YFPY to pull "read only" data from public leagues, you do not need to do this.

Environment Variables

YFPY now supports the usage of environment variables, either directly within the command line or using a .env file. Any environment variables exported to the same shell in which YFPY runs will automatically be read when a YahooFantasySportsQuery object is instantiated when env_var_fallback=True (default).

Note: You can disable the fallback to environment variables behavior during instantiation of a YFPY query by passing the argument env_var_fallback=False to the object:

from yfpy.query import YahooFantasySportsQuery

query = YahooFantasySportsQuery(
    league_id="<YAHOO_LEAGUE_ID>",
    game_code="nfl",
    game_id=449,
    yahoo_consumer_key="<YAHOO_CONSUMER_KEY>",
    yahoo_consumer_secret="<YAHOO_CONSUMER_SECRET>",
    env_var_fallback=False
)

Usage

Authentication

Note: If you are running YFPY in Docker, instead of opening a new browser window, YFPY will output a URL to the command line, which you must then copy to a browser window in order to log in to your Yahoo account, allow access to your app, and retrieve the required verification code.

Programmatic Persistent Authentication

YFPY supports programmatic authentication using yahoo_consumer_key and yahoo_consumer_secret arguments when instantiating a YahooFantasySportsQuery object. Additionally, you can pass in either a valid JSON string or a Python dictionary to yahoo_access_token_json containing all required fields of a Yahoo access token.

Example of Using yahoo_access_token_json:

from yfpy.query import YahooFantasySportsQuery

query = YahooFantasySportsQuery(
    league_id="<YAHOO_LEAGUE_ID>",
    game_code="nfl",
    game_id=449,
    yahoo_access_token_json={
        "access_token": "<YAHOO_ACCESS_TOKEN>",
        "consumer_key": "<YAHOO_CONSUMER_KEY>",
        "consumer_secret": "<YAHOO_CONSUMER_SECRET>",
        "guid": "<YAHOO_TOKEN_GUID>",
        "refresh_token": "<YAHOO_REFRESH_TOKEN>",
        "token_time": 1234567890.123456,
        "token_type": "bearer"
    }
)

Persistent Authentication Using Access Token Fields

Note: You MUST provide a value for env_file_location or else NO Yahoo access token data will be saved!

Persistent Authentication Using Access Token JSON

from yfpy.query import YahooFantasySportsQuery

query = YahooFantasySportsQuery( league_id="", game_code="nfl", game_id=449, yahoo_consumer_key="", yahoo_consumer_secret="", env_file_location=Path(".env") )

query.save_access_token_data_to_env_file( env_file_location=Path(".env"), save_json_to_var_only=True )


<a name="querying-the-yahoo-fantasy-sports-api"></a>
#### Querying the Yahoo Fantasy Sports API

* See the documentation on the  [`yfpy.query.YahooFantasySportsQuery`](https://yfpy.uberfastman.com/_autosummary/yfpy.query.YahooFantasySportsQuery.html#yfpy.query.YahooFantasySportsQuery) class for example usage of all available queries.
* See [`quickstart/quickstart.py`](https://github.com/uberfastman/yfpy/blob/main/quickstart/quickstart.py) for example usage output.
  * Uncomment/comment out whichever configuration values in their respective functions with which you wish to experiment.
  * Uncomment/comment out whichever query lines in the `RUN QUERIES` section you wish to run.
  * Uncomment/comment out whichever query lines in the `CHECK FOR MISSING DATA FIELDS` section you wish to check for any new/missing data fields returned by the Yahoo Sports Fantasy Football API.

<a name="docker"></a>
#### Docker

YFPY can be used within Docker for a more seamless, platform-agnostic experience.

* Run the Docker container (pulls the YFPY Docker image from GitHub Package Registry):
    ```shell
    docker compose up

Docker Development

Docker Image Deployment

See DEPLOYMENT.md for Docker image deployment.


Testing

YFPY has a collection of fully functional code snippets that can be run using pytest. These snippets demonstrate how to use YFPY to retrieve your Yahoo Fantasy Sports data.

Unit Tests

Integration Tests

Run Tests


Dependencies

Platform

YFPY has only been tested extensively on macOS, but is written to be platform-agnostic, and seems to work without issue on Windows and Linux.

Python

YFPY requires Python 3.10 or later, and has been tested through Python 3.12.

Development

Direct project dependencies can be viewed in requirements.txt, and additional development and build dependencies (not including transitive dependencies) can be viewed in requirements-dev.txt.


Troubleshooting

Yahoo Fantasy Sports API

Occasionally when you use the Yahoo Fantasy Sports API, there are hangups on the other end that can cause data not to transmit, and you might encounter an error similar to this:

Traceback (most recent call last):
  File "yfpy-app.py", line 114, in <module>
    var = app.run()
  File "/Users/your_username/PATH/T0/LOCAL/PROJECT/yfpy-app.py", line 429, in run
    for team in team_standings:
IndexError: list index out of range

Typically, when the above error (or a similar error) occurs, it simply means that one of the Yahoo Fantasy Sports API calls failed and so no data was retrieved. This can be fixed by simply re-running data query.