{"id":27972799,"url":"https://github.com/bcanfield/southpaw","last_synced_at":"2025-10-06T17:35:31.621Z","repository":{"id":36988061,"uuid":"374531850","full_name":"bcanfield/southpaw","owner":"bcanfield","description":"Python Fanduel API - Lineup Automation","archived":false,"fork":false,"pushed_at":"2023-10-18T05:20:57.000Z","size":178,"stargazers_count":55,"open_issues_count":14,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-07T23:30:25.265Z","etag":null,"topics":["dfs","fanduel","generator","lineup","optimizer","python"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/southpaw","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bcanfield.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-06-07T04:16:26.000Z","updated_at":"2025-03-08T00:49:42.000Z","dependencies_parsed_at":"2025-05-07T23:26:52.988Z","dependency_job_id":"6bfa0936-b2dc-487f-a2f6-401e0c571369","html_url":"https://github.com/bcanfield/southpaw","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/bcanfield/southpaw","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcanfield%2Fsouthpaw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcanfield%2Fsouthpaw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcanfield%2Fsouthpaw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcanfield%2Fsouthpaw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bcanfield","download_url":"https://codeload.github.com/bcanfield/southpaw/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcanfield%2Fsouthpaw/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278649553,"owners_count":26022133,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dfs","fanduel","generator","lineup","optimizer","python"],"created_at":"2025-05-07T23:19:49.015Z","updated_at":"2025-10-06T17:35:31.579Z","avatar_url":"https://github.com/bcanfield.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![southpawgithub](https://user-images.githubusercontent.com/12603953/126020923-ea260184-ac3c-4960-bec3-0e68e3b89136.png)\n\n[![Downloads](https://static.pepy.tech/badge/southpaw)](https://pypi.org/project/southpaw/)\n\n**Southpaw** is a python package that provides access to the Fanduel API.\n\nOptimize your DFS experience by programmatically retrieving and updating your lineups, analyzing your data, and more.\n\n[API Documentation](https://bcanfield.github.io/southpaw/)\n  \n# Installation\n```\npython -m pip install southpaw\n```\n\n# Setup\n\n  \n**UPDATE (October 2023):**\n\n**Fanduel has cracked down on automated methods of logging in and now requires two-factor auth - so this process now takes an extra initial step now to retrieve the auth headers.**\n\n## How to retrieve your auth headers\n1. Go to [Fanduel DFS](https://www.fanduel.com/contests) and log in.\n2. Open up your browser inspector, toggle the Network tab, and refresh the page to view the requests.\n4. You need to find one of the requests that is being sent to **https://api.fanduel.com**. Some examples are **fixture-lists?** and **current?**\n5. In the **Response Headers** section, copy out the **Authorization** header and **X-Auth-Token**. Reference my screenshot below.\n\n*Note: The x-auth-token expires. So you will have to repeat the method above when it does*\n\n\u003cimg width=\"736\" alt=\"Screenshot 2023-10-17 at 10 43 51 PM\" src=\"https://github.com/bcanfield/southpaw/assets/12603953/b3a5f76b-6a87-4094-8fe6-e956072bfd2a\"\u003e\n\n## Start having fun \nYou first must initialize your Fanduel object using your email, password, and auth tokens. You will see a success message if you succesfully authenticate.\n\n```\nimport southpaw\n\nbasic_auth_token = 'Basic GBGskzdmGLKOP5EwMDNkNGUaLkFdM2VjKJHDNmY1Mjc6'\nx_auth_token = 'eyasdffdsaasjhkdfbfkhdsbakjbasdkjfbnfkjdsaetgdffgdfdgs'\nfanduel_email = 'fakeFanduelEmail@gmail.com'\nfanduel_password = 'fakeFanduelPassword'\n\nfd = southpaw.Fanduel(fanduel_email, fanduel_password, basic_auth_token, x_auth_token\n```\nYou now have access to all of the data that Fanduel offers by using a rich set of helper functions that Southpaw provides.\n\n## Examples\n\n[Full Documentation](https://bcanfield.github.io/southpaw/)\n\nIt's easy to get overwhelmed with the amount of helper functions available and how to use them effectively.\n\nSee the **'Quick Start'** section below to get you up and running as quickly as possible.\n\n\n## Quick Start\nGet a list of all currently entered contests and all relevant info.\n\n*FYI: If you are not entered into any Fanduel contests you will not get any back*\n```\n# Get a list of all currently entered contests\ncontests = fd.easy_get_contests()\n\n# Are we entered in any contests?\nif len(contests) \u003e 0:\n    # Grab the first contest for now\n    # You could filter by sport or name\n    contest = contests[0]\n    print(\"Contest: \", contest[\"name\"], contest[\"sport\"], contest[\"salary_cap\"])\n    \n    # Get entries in this contest\n    entries = contests[0][\"entries\"]\n    \n    for entry in entries:\n        print(\"Entry: \", entry[\"id\"])\n        print(\"Entry Required Lineup Format:\", fd.get_roster_format_in_entry(entry[\"id\"]))\n        \n        # Get players available to choose for this entry\n        print(\"Available Players: \", len(entry[\"available_players\"]))\n\n# From here we have the contest info, required lineup format, and available players.\n# We have everything we need to smartly update some entries\n\n# Just blindly taking first 5 players as an example\nplayers_to_use = available_players[:5]\nupdate_entry_input = [UpdateEntryInput({'id': entry[\"id\"], 'lineup': players_to_use})]\n```\n## Disclaimer\n\nThis project is for educational use only.\n\nAccumulating Fanduel points or prizes through unauthorized methods such as unauthorized scripts or other automated means is against the Fanduel terms and may result in account disqualification.\n\nThe contributors of Southpaw shall not be held responsible for any actions taken using this tool.\n\n## Developing\nBuild package locally:\n`python setup.py bdist_wheel`\n\nInstall package locally:\n`pip install dist/southpaw-\u003c...\u003e.whl --force-reinstall`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbcanfield%2Fsouthpaw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbcanfield%2Fsouthpaw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbcanfield%2Fsouthpaw/lists"}