Skip to main content

Python client to interact with SkillCorner On Demand API

Project description

Getting Started

Installation

uv pip install skillcorner-on-demand

Credentials

You need to add in your environment your username and password with that you can access to the service, if you don't like this method follow the alternative

export SKILLCORNER_ON_DEMAND_USERNAME=email@mycompagny.com
export SKILLCORNER_ON_DEMAND_PASSWORD=mysuperpassword

How to use it

You just need to instanciate the client like this

import os

from skillcorner_on_demand.client import SkillcornerOnDemandClient

USERNAME = os.getenv('SKILLCORNER_ON_DEMAND_USERNAME')
PASSWORD = os.getenv('SKILLCORNER_ON_DEMAND_PASSWORD')

client = SkillcornerOnDemandClient(USERNAME, PASSWORD)

Get Methods

Get All requests

response = client.get_all_requests()

With the reponse

"count": 6,
    "next": null,
    "previous": null,
    "results": {
        "matches": [
            {
                "id": 14,
                "status": "input_data",
                "tactical_data": [],
                "match": {
                    "id": 1429092,
                    "unique_name": "Match Name",
                    "date_time": "2024-02-10T13:00:00Z",
                },
                "is_matchsheet_csv_valid": true,
                "is_period_limits_csv_valid": true,
                "is_homeside_team_csv_valid": true,
                "is_video_uploaded": false
            },
            ...
        ]
    }

Get request by ID

or get just one request by his match ID

    client.get_request(match_id=1429095)

response

{
    "id": 6,
    "status": "processing",
    "tactical_data": [],
    "match": {
        "id": 1429095,
        "unique_name": "20240806_LOSC Lille_Fenerbahce",
        "date_time": "2024-08-06T18:30:00Z",
        "status": "not_started"
    },
    "is_matchsheet_csv_valid": true,
    "is_period_limits_csv_valid": true,
    "is_homeside_team_csv_valid": true,
    "is_video_uploaded": true
}

Upload methods

Matches List

response = client.upload_match_list(
    path="path/to/file.csv",
)

Period Limits

response = client.upload_period_limits(
    match_id=1429095,
    period_limits_path="path/to/file.csv",
)

response

{"message": "Information successfully added and uploaded to the request"}

Match Sheet

response = client.upload_match_sheet(
    match_id=1429095,
    match_sheet_path="path/to/file.csv",
)

response

{"message": "Information successfully added and uploaded to the request"}

Home Team Side

response = client.upload_home_team_side(
    match_id=1429095,
    home_team_side_path="path/to/file.csv",
)

response

{"message": "Information successfully added and uploaded to the request"}

Video

response = client.upload_match_video(
    match_id=1429095,
    video_path="path/to/file.mp4",
)

response

{"message": "Information successfully added and uploaded to the request"}

Update a file

To update a file you just need to call the upload method and pass the is_update=True parameter like this

response = client.upload_match_sheet(
    match_id=1429095,
    match_sheet_path="path/to/file.mp4",
    is_update=True
)

response

{"message": "Match Sheet successfully updated"}

CSV Validation

if some lineup information is not valid the API will return you a list of errors like these:

{
    "errors": [
        "Home team does not have 11 start players it has 10.",
        "Away team does not have 11 start players it has 12.",
        "Duplicate player id [133003] for the home team",
        "Player J. David has been subbed in for himself.",
        "Duplicate jersey number [53] for the away team",
        "Team home has duplicate positions ['RW'].",
        "Team away has duplicate positions ['RCB', 'LW']."
    ]
}

Start Processing a Match

To add the match to the process queue you need to call this method

response = client.launch_match(
    match_id=1429095,
)

Get the data of the match when the process is done

Data Collection

Get data collection of this match

response = client.get_data_collection(
    match_id=1429095,
)

response

{
    "match_id": 1429095,
    "status": "postmatch",
    "physical_last_modified": "2024-09-13T13:02:23.992345Z",
    "physical_v3_last_modified": null,
    "tracking_last_modified": "2024-09-13T12:59:43.067225Z",
    "tracking_extra_last_modified": "2024-09-13T12:59:43.067225Z",
    ...
}

Tracking

Get tracking data

Warning: This method can take a long time to complete because of the large file size.

response = client.get_tracking(
    match_id=1429095,
)

response

{
    "data": [],
    "possession": {
        "group": null,
        "trackable_object": null
        },
        "frame": 1,
        "image_corners_projection":
            [-29.886810706710552, 39.0, -9.262864149625193, -24.788953625823087, 8.817583207115144, -25.174142763841694, 32.730019680050475, 39.0],
        "timestamp": null,
        "period": null
}
...

Match data

Get all the information about the match

response = client.get_match_data(
    match_id=1429095,
)

response

{
    "id": 1429095,
    "home_team_score": 0,
    "away_team_score": 0,
    "date_time": "2024-08-25T20:45:00Z",
    "stadium": {
        "id": 1198,
        "name": "Subaru Park",
        "city": "Chester",
        "capacity": 18500
    },
    "home_team": {
        "id": 1503,
        "name": "Philadelphia Union",
        "short_name": "Philadelphia",
        "acronym": "PHI"
    },
    "home_team_kit": {
        "id": 3879,
        "team_id": 1503,
        "season": {
            "id": 8,
            "start_year": 2021,
            "end_year": 2022,
            "name": "2021/2022"
        },
        "name": "Home",
        "jersey_color": "#000000",
        "number_color": "#95a44c"
    },
    "away_team": {
        "id": 1499,
        "name": "Colorado Rapids",
        "short_name": "Colorado Rapids",
        "acronym": "COL"
    },
    "away_team_kit": {
        "id": 11169,
        "team_id": 1499,
        "season": {
            "id": 29,
            "start_year": 2024,
            "end_year": 2024,
            "name": "2024"
        },
        "name": "24/25",
        "jersey_color": "#5f9cdd",
        "number_color": "#0b3bcb"
    },
    "home_team_coach": null,
    "away_team_coach": null,
    ...
}

Physical

Get physical data for this match, pass csv in argument if you want to download data directly in csv

response = client.get_match_physical(
    match_id=1429095,
    csv=True
)

Dynamic Events

To get dynamic events, pass the file format wanted csv, sportscode-xml, matchtracker-xml or focus-json not other format can be handled. By default, a file with the chosen format will be created, but if you just want the data and not a file, you can pass the parameters, save=False

response = client.get_dynamic_events(
    match_id=1234567,
    file_format='csv' # among 'csv', 'sportscode-xml', 'matchtracker-xml' or 'focus-json'
    save=True # Default behavior 
)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skillcorner_on_demand-0.1.13.tar.gz (38.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skillcorner_on_demand-0.1.13-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file skillcorner_on_demand-0.1.13.tar.gz.

File metadata

File hashes

Hashes for skillcorner_on_demand-0.1.13.tar.gz
Algorithm Hash digest
SHA256 70afcb855bc3ea9342da026419fdef55f66cdbbf3e50b0e9b1870423c54ecfc3
MD5 daa73df043d4862ff22d8175dafbf975
BLAKE2b-256 40f545aeaa1180bebd79405c87fc60b5588849829828c4b8bc799573a97ea737

See more details on using hashes here.

File details

Details for the file skillcorner_on_demand-0.1.13-py3-none-any.whl.

File metadata

File hashes

Hashes for skillcorner_on_demand-0.1.13-py3-none-any.whl
Algorithm Hash digest
SHA256 b4647e27ded496391aa325d7bbf31b62bbbe0f11f2b560bef22f56ae5fc21805
MD5 3d55e48c1dcbce720f4a0c8f758283fc
BLAKE2b-256 09eed21c7f0d6ad920512d03f7ecce8cdb699cbda59b12220d6dfa6078b4ece4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page