Files
crossfit/README.md
Kevin Bataille d809dd6753 Update readme
2025-10-06 16:11:26 +02:00

4.2 KiB

Crossfit Application

This is a Python application for managing Crossfit bookings and notifications. The application automates the process of booking Crossfit sessions and sends notifications via email and Telegram when a booking is successful.

Features

  • Automated booking of Crossfit sessions
  • Email and Telegram notifications for successful bookings
  • Configurable preferred sessions
  • Retry logic for booking failures
  • Detailed logging

Prerequisites

  • Python 3.8+
  • Docker (optional)
  • Docker Compose (optional)

Setup

  1. Create a .env file based on .env.example and fill in the required credentials.
  1. Build and run the application using Docker Compose:
docker-compose up --build
  1. The application will run in a Docker container, and the logs will be stored in the ./log directory.

Manual Setup

  1. Install dependencies:
pip install -r requirements.txt
  1. Run the application:
python main.py

Usage

The application will automatically check for available sessions and book them based on your preferences. It will send notifications via email and Telegram when a booking is successful.

Environment Variables

The following environment variables are required:

  • CROSSFIT_USERNAME: Your Crossfit username
  • CROSSFIT_PASSWORD: Your Crossfit password
  • EMAIL_FROM: Your email address
  • EMAIL_TO: Recipient email address
  • EMAIL_PASSWORD: Your email password
  • TELEGRAM_TOKEN: Your Telegram bot token
  • TELEGRAM_CHAT_ID: Your Telegram chat ID

Preferred Sessions

You can configure your preferred sessions in the preferred_sessions.json file. The preferred sessions are defined as a list of objects, where each object contains the day of the week, start time, and session name.

[
    {
        "day_of_week": 4,
        "start_time": "17:00",
        "session_name_contains": "WEIGHTLIFTING"
    },
    {
        "day_of_week": 5,
        "start_time": "12:30",
        "session_name_contains": "HYROX"
    },
    {
        "day_of_week": 2,
        "start_time": "18:30",
        "session_name_contains": "CONDITIONING"
    }
]

The application will automatically load the preferred sessions from this file. If the file is not found or contains invalid data, it will fall back to the default hardcoded sessions.

Fields

  • day_of_week: Integer representing the day of the week (0=Monday, 6=Sunday)
  • start_time: String representing the start time in HH:MM format
  • session_name_contains: String containing the name or part of the name of the session

Files

  • main.py: Main entry point for the application
  • src/: Source code directory
    • auth.py: Authentication handling
    • booker.py: Main booking logic
    • session_manager.py: Session management
    • session_notifier.py: Notification handling
    • session_config.py: Session configuration
  • tools/: Utility scripts
  • scripts/: Additional scripts
  • test/: Test files
  • Dockerfile: Docker image definition
  • docker-compose.yml: Docker Compose service definition
  • .env.example: Example environment variables file
  • .dockerignore: Docker ignore file
  • .gitignore: Git ignore file
  • preferred_sessions.json.example: Example configuration file for preferred sessions
  • requirements.txt: Python dependencies

Project Structure

.
├── main.py
├── src/
│   ├── auth.py
│   ├── booker.py
│   ├── session_manager.py
│   ├── session_notifier.py
│   └── session_config.py
├── tools/
├── scripts/
├── test/
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── .dockerignore
├── .gitignore
├── preferred_sessions.json.example
├── requirements.txt
└── log/
    └── crossfit_booking.log

Testing the Telegram Notifier

To manually test the Telegram notifier functionality:

  1. Ensure you have configured the Telegram credentials in the .env file:
TELEGRAM_TOKEN=your_telegram_bot_token
TELEGRAM_CHAT_ID=your_chat_id
  1. Run the test script:
python test_telegram_notifier.py

License

This project is licensed under the MIT License. See the LICENSE file for details.