A CLI toolkit for DBB basketball league analysis
Project description
🏀 korb
A CLI toolkit for DBB basketball league analysis
korb is a zero-dependency Python CLI that parses HTML from the DBB (Deutscher Basketball Bund) legacy JSP platform and provides standings, results, schedules, predictions, and more.
Features
- 📊 Standings — full league table with points, differentials, averages
- 🏀 Team — game-by-game results, sparklines, quality metrics
- 📋 Ergebnisse — all completed game results with optional team filter
- 📅 Schedule — with back-to-back detection, filtering, pending games
- 🔮 Predict — efficiency-model-based final standings forecast
- 🥇 Top — quick leaderboard with ASCII bar chart
- 📥 Download — fetch fresh HTML data directly from basketball-bund.net
- 🔧
--json— machine-readable output for all commands
Installation
# With uv (recommended)
git clone https://github.com/malvavisc0/korb && cd korb
uv sync
# With pip
pip install .
After installation, the korb CLI is available inside the virtual environment.
Use uv run korb to invoke it, or activate the venv first.
Quick Start
# Download league data
uv run korb --ligaid 51187 download
# View standings
uv run korb --ligaid 51187 standings
# Download fresh data + predict in one go
uv run korb --ligaid 51187 --download predict
Finding your Liga ID
The --ligaid value comes from the liga_id parameter in the DBB league URL:
https://www.basketball-bund.net/index.jsp?Action=103&liga_id=51187
^^^^^
this is your liga ID
Commands
download — Fetch HTML data
uv run korb --ligaid 12345 download
uv run korb download --all # refresh all previously downloaded leagues
Saves ergebnisse.html and spielplan.html into files/<ligaid>/.
standings — League table
uv run korb --ligaid 12345 standings
ergebnisse — Game results
uv run korb --ligaid 12345 ergebnisse
uv run korb --ligaid 12345 ergebnisse --team "Hawks"
team — Deep dive on a single team
uv run korb --ligaid 12345 team "Thunder"
uv run korb --ligaid 12345 team "Thunder" --bars --last-k 5 --metrics
schedule — Game calendar
uv run korb --ligaid 12345 schedule --pending
uv run korb --ligaid 12345 schedule --team "Hawks" --pending --b2b
predict — Forecast final standings
uv run korb --ligaid 12345 predict
top — Quick leaderboard
uv run korb --ligaid 12345 top -n 5
Global flags
| Flag | Description |
|---|---|
--json |
Output as JSON instead of formatted tables |
--download, -d |
Fetch fresh data before running the command |
--ligaid, -l |
Liga ID (resolves file paths automatically) |
--results, -r |
Explicit path to HTML results file |
--schedule, -s |
Explicit path to HTML schedule file |
--version, -V |
Show version |
How Predictions Work
The predict command estimates final standings using a multiplicative efficiency model:
| Factor | How it works |
|---|---|
| Offensive rating | Team's scored points vs. league average (>1.0 = above avg) |
| Defensive rating | Points allowed vs. league average (>1.0 = worse defense) |
| Recency weighting | 60-day half-life — recent games count more |
| Recent form | Last 5 games blended at 30% weight into ratings |
| Home advantage | 3% scoring boost applied symmetrically |
| B2B fatigue | ≤36h between games → 5% offense/defense penalty |
| New teams | <3 games → ratings blended toward league average |
| No draws | Ties broken by home advantage (basketball has OT) |
Project Structure
korb/
├── __init__.py # Package marker & version
├── __main__.py # CLI entry point & download command
├── core.py # Shared models, HTML parsing, utilities
├── ergebnisse.py # Game results viewer & filter
├── predict.py # Multiplicative efficiency prediction model
├── schedule.py # HTML schedule parser & filters
├── standings.py # Standings calculator
└── team.py # Team results viewer & metrics
Requirements: Python 3.10+ · uv · No runtime dependencies
Note: Downloaded HTML files and
--ligaidpaths resolve relative to your current working directory (files/<ligaid>/). Runkorbfrom the project root or pass explicit--results/--schedulepaths.
Development
# Install with dev tools
uv sync --group dev
# Lint & format
uv run ruff check korb/ tests/
uv run ruff format korb/ tests/
# Run tests
uv run pytest
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file korb-0.2.8.tar.gz.
File metadata
- Download URL: korb-0.2.8.tar.gz
- Upload date:
- Size: 32.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
121859d2e2aa50146da00064152aa00f71d34957589a1f9763f460418694562c
|
|
| MD5 |
f6e3848ce4a9c310436f12c397fa6d87
|
|
| BLAKE2b-256 |
b8bc0285e405bf9238ff2958d9e860fe931432f877340e7ea5d074fbe8d77db0
|
File details
Details for the file korb-0.2.8-py3-none-any.whl.
File metadata
- Download URL: korb-0.2.8-py3-none-any.whl
- Upload date:
- Size: 24.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b66e1bbaa6c3ba2a5f5f721819d62161358707196d737003822c1f30162e3a87
|
|
| MD5 |
f9316ab49519a5e31f0daa6321befba1
|
|
| BLAKE2b-256 |
00f54fdc3da5113e870d1aec19b8e7a7cfc0d1678a1409d34ae09d6b37f4e260
|