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

157 lines
4.2 KiB
Markdown

# 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.
### Running with Docker (Recommended)
2. Build and run the application using Docker Compose:
```bash
docker-compose up --build
```
3. The application will run in a Docker container, and the logs will be stored in the `./log` directory.
### Manual Setup
2. Install dependencies:
```bash
pip install -r requirements.txt
```
3. Run the application:
```bash
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.
```json
[
{
"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:
```ini
TELEGRAM_TOKEN=your_telegram_bot_token
TELEGRAM_CHAT_ID=your_chat_id
```
2. Run the test script:
```bash
python test_telegram_notifier.py
```
## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.