niklaspriddat-usc-booking-api

ClawSkills 作者 clawskills

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install clawskills:clawskills~niklaspriddat-usc-booking-api
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Aclawskills~niklaspriddat-usc-booking-api/file -o niklaspriddat-usc-booking-api.md
# Urban Sports Scanner

Scannt deine Urban Sports Club Venues, zeigt Kurse mit direkten Booking-Links und kann Kurse buchen und stornieren.

## Setup

### 1. Python-Umgebung

```bash
cd /pfad/zu/urban-sports
python3 -m venv venv
venv/bin/pip install playwright
venv/bin/playwright install chromium
venv/bin/playwright install-deps chromium
```

### 2. Zugangsdaten

Trage deine USC-Logindaten ein:

```json
{
  "email": "deine-email@beispiel.de",
  "password": "dein-passwort"
}
```

Die Datei `credentials.json` ist in `.gitignore` und wird nicht committet.
Zugangsdaten werden nur fuer `--book`, `--cancel` und `--bookings` benoetigt.

### 3. Venues konfigurieren

Trage deine Venues in `config.py` ein. Die Venue-ID findest du in der URL auf urbansportsclub.com:

```
https://urbansportsclub.com/de/venues/20818
                                       ^^^^^
```

Beispiel:

```python
VENUES = {
    "storm": {
        "name": "STORM Cycling Berlin - Mitte",
        "url": "https://urbansportsclub.com/de/venues/20818",
        "type": "cycling",
        "keywords": ["Performance", "Groove", "Cycling"],
    },
    "fitboxing": {
        "name": "Brooklyn Fitboxing",
        "url": "https://urbansportsclub.com/de/venues/27355",
        "type": "boxing",
        "keywords": ["Boxing", "Fitboxing", "HIIT"],
    },
}
```

- `name`: Anzeigename
- `url`: Venue-Seite auf urbansportsclub.com
- `type`: Frei waehlbar, wird im Output angezeigt
- `keywords`: Helfen bei der Erkennung der Kursnamen im Seitentext

### URL-Parameter

Der Scanner haengt automatisch folgende Parameter an die Venue-URL an:

- `plan_type`: Mitgliedschafts-Stufe. Bestimmt welche Kurse angezeigt werden (nur die, die mit der jeweiligen Stufe buchbar sind). Privat: 1=Essential, 2=Classic, 3=Premium, 6=Max. Firma: 1=S, 2=M, 3=L, 6=XL. Standardwert: `3`.
- `business_type`: `b2c` (Privatmitglieder) oder `b2b` (Firmenmitglieder). Standardwert: `b2c`.

Diese Werte sind in `config.py` als `PLAN_TYPE` und `BUSINESS_TYPE` konfigurierbar.

## Usage

### Kurse scannen

```bash
# Alle Venues fuer heute
venv/bin/python scan.py

# Bestimmtes Datum
venv/bin/python scan.py --date 2026-02-10

# Nur eine Venue
venv/bin/python scan.py --venue storm

# JSON-Ausgabe (fuer Weiterverarbeitung)
venv/bin/python scan.py --json
```

Jeder Kurs wird mit direktem Booking-Link zurueckgegeben:
```
  07:30  STORM Cycling Berlin - Mitte    45 Min STORM Ride - Performance
         https://www.urbansportsclub.com/de/activities?class=98049323
```

### Buchen

```bash
venv/bin/python scan.py --book 98049323
```

### Stornieren

```bash
venv/bin/python scan.py --cancel 98049323
```

### Anstehende Buchungen

```bash
venv/bin/python scan.py --bookings
venv/bin/python scan.py --bookings --json
```

## Dateien

```
urban-sports/
├── SKILL.md                  # Diese Doku
├── scan.py                   # Scanner + Buchen + CLI
├── config.py                 # Venue-Konfiguration
├── credentials.json          # Login-Daten (nicht im Repo)
├── credentials.example.json  # Vorlage
├── .gitignore
└── venv/                     # Python virtualenv (nicht im Repo)
```

## Fehlerbehebung

### "Keine Venues konfiguriert"
Trage mindestens eine Venue in `config.py` ein.

### "credentials.json nicht gefunden"
Kopiere `credentials.example.json` nach `credentials.json` und trage deine Daten ein.

### Scanner findet keine Kurse
- Prüfe ob das Datum korrekt ist (nicht in der Vergangenheit)
- Manche Venues haben an bestimmten Tagen keine Kurse
- Chromium-Dependencies: `venv/bin/playwright install-deps chromium`