🏀 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
Metadata
Release files for korb 0.2.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| korb-0.2.9.tar.gz | 32.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| korb-0.2.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 58.4 kB
Release files / korb-0.2.9.tar.gz
| Download URL | korb-0.2.9.tar.gz |
|---|---|
| Size | 32.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fb9377aa02a591de73462f19ad58d73101fa2785423fd578bdf857ffa67d6e5d
|
|
BLAKE2b-256 checksum How to use checksums |
1045f11cde19000ed4231b12f251cf8a762ec3028146ff3a748aa6d66837ef02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","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}
|
Release files / korb-0.2.9-py3-none-any.whl
| Download URL | korb-0.2.9-py3-none-any.whl |
|---|---|
| Size | 26.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
546edd09260c2b9443d4342c44d438f5b65bbf60dc6b2b1be1a46e5646c22ff5
|
|
BLAKE2b-256 checksum How to use checksums |
6f7621d1b0f1624f71822e9f753c74226f6b9af16f21164c805eb1a85e7695ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","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}
|