No description
Find a file
2025-10-10 15:07:41 +02:00
.vscode initial commit 2025-10-10 15:06:19 +02:00
.gitignore initial commit 2025-10-10 15:06:19 +02:00
.python-version initial commit 2025-10-10 15:06:19 +02:00
main.py initial commit 2025-10-10 15:06:19 +02:00
pyproject.toml initial commit 2025-10-10 15:06:19 +02:00
README.md readme update 2025-10-10 15:07:41 +02:00
uv.lock initial commit 2025-10-10 15:06:19 +02:00

"Der Adler" PDF Downloader

A command-line tool to download PDF archives of "Der Adler" magazine from the BWLV (Baden-Württembergischer Luftfahrtverband) website.

Features

CLI - Rich formatting with progress bars and colorized output
🚀 Parallel Downloads - Configurable concurrent downloads (default: 5)
📁 Smart Organization - Automatically organizes PDFs by year
♻️ Resume Support - Skips already downloaded files
🎯 Selective Downloads - Download specific years or all available years
🎨 Rich Progress Tracking - Real-time download progress with speed and ETA

Installation

This project uses uv for dependency management. If you don't have it installed:

curl -LsSf https://astral.sh/uv/install.sh | sh

Then install the project dependencies:

uv sync

Usage

Download All Available Years

uv run main.py

Download Specific Years

Download only PDFs from 2024 and 2025:

uv run main.py --year 2024 --year 2025

Custom Output Directory

uv run main.py --output-dir /path/to/pdfs

Adjust Concurrent Downloads

Download up to 10 files in parallel:

uv run main.py --max-concurrent 10

Get Help

uv run main.py --help

Command-Line Options

Option Description Default
--url TEXT URL of the 'der adler' online archive page BWLV archive page
--max-concurrent INTEGER Maximum concurrent downloads (1-20) 5
--year INTEGER Specific year(s) to download (repeatable) All years
--output-dir PATH Directory to save downloaded PDFs ./downloaded
--help Show help message and exit -

Output Structure

Downloaded PDFs are organized by year:

downloaded/
├── 2025/
│   ├── adler01-2025.pdf
│   ├── adler02-2025.pdf
│   └── ...
├── 2024/
│   ├── adler01-2024.pdf
│   ├── adler02-2024.pdf
│   └── ...
└── ...

How It Works

  1. Fetches the BWLV online archive page
  2. Parses HTML to extract PDF links grouped by year (2016-2025)
  3. Filters by requested years (if specified)
  4. Checks for existing files to avoid re-downloading
  5. Downloads PDFs in parallel with progress tracking
  6. Organizes files into year-based directories

Dependencies

  • Python 3.13+
  • beautifulsoup4 - HTML parsing
  • httpx - Async HTTP client for downloads
  • rich - Beautiful terminal output
  • rich-click - Enhanced Click with Rich formatting

Development

The project follows Python best practices:

  • 📝 Type hints throughout
  • 🎨 Rich logging (no print statements)
  • Async/await for efficient parallel downloads
  • 🧹 Clean code with proper error handling

License

GPL-3.0-or-later

Credits

Built for downloading archives from BWLV "Der Adler" online.