Skip to main content

No queues. Just gains.

Logo

Release Build status codecov Activity License Documentation Contributor Covenant Downloads

PySportBot empowers you to programmatically book fitness classes at any sports center that uses the Resasports booking management software.

Install

pip install pysportbot

Quick Start

from pysportbot import SportBot

# Create bot instance, will list available centres if requested
bot = SportBot(log_level='INFO', print_centres=False, time_zone = 'Europe/Madrid')

# Connect to service with email and password as well as the name of the centre
bot.login('email', 'password', 'centre')

# List available activites
bot.activities(limit = 10)

# List bookable slots for an activity on a specific day
bot.daily_slots(activity='YourFavouriteGymClass', day = '2025-01-03', limit = 10)

# Book an activity slot on a specific day and time
bot.book(activity='YourFavouriteGymClass', start_time = '2024-12-30 07:00:00')

# Cancel an activity slot on a specific day and time
bot.cancel(activity='YourFavouriteGymClass', start_time = '2024-12-30 07:00:00')

Advanced usage as service

You can easily run pysportbot as a service to manage your bookings automatically with

python -m pysportbot.service --config config.json

The service requires a json configuration file that specifies your user data and how you would like to book your classes. Currently, two types of configuration are supported:

1. Book an upcoming class now

Let's say you would like to book Yoga next Monday at 18:00:00, then your config.json would look like:

{
    "email": "your-email",
    "password": "your-password",
    "center": "your-gym-name",
    "booking_execution": "now",

    "classes": [
        {
            "activity": "Yoga",
            "class_day": "Monday",
            "class_time": "18:00:00",
        }
    ]
}

2. Book an upcoming class on a specific day and time

Let's say you would like to book Yoga next Monday at 18:00:00, but the execution of the booking should only happen on Friday at 07:30:00 then your config.json would look like:

{
    "email": "your-email",
    "password": "your-password",
    "center": "your-gym-name",
    "booking_execution": "Friday 07:30:00",

    "classes": [
        {
            "activity": "Yoga",
            "class_day": "Monday",
            "class_time": "18:00:00",
        }
    ]
}

Note:

  1. Bookings are always scheduled for the following week. For example, if your booking execution is set for Friday at 07:30:00 and your class is on Friday at 18:00:00, the system will schedule the booking for next Friday at 18:00:00, not the same day.
  2. PySportBot automatically attempts to execute up to N bookings in parallel, where N corresponds to the number of available CPU cores on your machine.
  3. If the number of bookings exceeds the available parallel slots, they will be processed sequentially in the exact order specified in your JSON configuration file.

The service also provides various other options that can be inspected with

python -m pysportbot.service --help

Currently supported options include:

  1. --booking-delay: sets a global delay in seconds before booking execution [default: 0]
  2. --retry-attempts: sets the number of retries attempted in case a booking attempt fails [default: 3]
  3. --retry-delay: sets the delay in seconds between booking retries [default: 5]
  4. --time-zone: sets the time zone for the service [default: Europe/Madrid]
  5. --log-level: sets the log-level of the service [default: INFO]
  6. --max-threads: limits the number of used threads for parallel bookings [default: -1]

Automating Weekly Bookings with GitHub Actions

While you can use PySportBot as a continuously running service, doing so often becomes cumbersome because it requires a server (or similar machine) that is always online.

Using GitHub Actions is one of the most reliable ways to schedule automated weekly bookings. With a simple workflow file, you can ensure your bookings run at a specific time each week — no manual intervention required.

For example, if you have a Yoga class on Monday at 18:00:00, and you want the booking to be executed on Friday at 07:30:00, you can automate the process by configuring a GitHub Actions workflow. Below is a sample workflow file that triggers every Friday at 06:00 UTC (07:00 CET), ensuring there is enough time before the actual booking execution at 07:30:00:

name: Weekly Booking

on:
  # Runs at 05:00 UTC (07:00 Madrid time during daylight saving time) on Fridays
  # Note: Update to '0 6 * * 5' for winter (standard) time when Madrid shifts to UTC+1
  # GitHub Actions cron expressions are always in UTC and do not support time zones
  # Reference: https://github.com/orgs/community/discussions/13454
  schedule:
    - cron: '0 5 * * 5'

jobs:
  book:
    runs-on: ubuntu-latest

    steps:
      - name: Check out repository
        uses: actions/checkout@v5

      - name: Set up Python 3.12
        uses: actions/setup-python@v7
        with:
          python-version: '3.12'

      - name: Install pysportbot
        run: |
          pip install pysportbot

      - name: Create config file
        run: |
          echo '{
            "email": "your-email",
            "password": "your-password",
            "centre": "your-gym",
            "booking_execution": "Friday 07:30:00",
            "classes": [
              {
                "activity": "Yoga",
                "class_day": "Monday",
                "class_time": "18:00:00"
              }
            ]
          }' > config.json

      - name: Run pysportbot
        run: |
          python -m pysportbot.service --config config.json --log-level INFO --booking-delay 1 --retry-attempts 3 --retry-delay 5

Note: Make sure the workflow starts early enough — before your booking execution time (e.g., 07:30 CET) — to allow for potential delays in job startup or execution.

LICENSE

pysportbot is free of use and open-source. All versions are published under the MIT License.

Metadata

Release files for pysportbot 0.0.23

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pysportbot 0.0.23
File Size Uploaded
pysportbot-0.0.23.tar.gz 22.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pysportbot 0.0.23
File Interpreter ABI Platform
pysportbot-0.0.23-py3-none-any.whl Python 3 none any Details

Total release size: 48.8 kB

Release files / pysportbot-0.0.23.tar.gz

Download URL pysportbot-0.0.23.tar.gz
Size 22.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b250e644cf3ebd524c1fe5d8cbdcb018078f64ffa982b6a1465f11629292e451
BLAKE2b-256 checksum
How to use checksums
7b79315fa0dd51a00419b39edbead4348956ba30808f4c660c939bbbc3a1a14b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.12.14 Linux/6.17.0-1022-azure

Release files / pysportbot-0.0.23-py3-none-any.whl

Download URL pysportbot-0.0.23-py3-none-any.whl
Size 26.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
66df243dc964fc3b967ece0a4212ec074dcbd0c27ead75bda272e1d0a51e16b8
BLAKE2b-256 checksum
How to use checksums
fdcc6f49d17cd9a324d050e0d281405d747de06187d7e68388b0c3dc26bb6a5f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.1 CPython/3.12.14 Linux/6.17.0-1022-azure

Release history Release notifications | RSS feed

This release

0.0.23 This release

2 release files

0.0.22

2 release files

0.0.20

2 release files

0.0.19

2 release files

0.0.18

2 release files

0.0.17

2 release files

0.0.16

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page