mirror of
https://github.com/Dasemu/x-space-downloader.git
synced 2026-10-12 00:18:35 +00:00
merge: combine original project history with video-mode rewrite and public-release polish
This commit is contained in:
27
AGENTS.md
Normal file
27
AGENTS.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# X Space Downloader
|
||||
|
||||
Three-module CLI tool that wraps yt-dlp to download X/Twitter Space recordings as MP3.
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
pip install -e . # Install (editable)
|
||||
x-space-dl <URL> # Run the CLI
|
||||
python -m src.main <URL> # Alternative invocation
|
||||
pytest # Run all tests
|
||||
pytest -m "not integration" # Unit tests only
|
||||
pytest -m integration # Integration tests only
|
||||
pytest tests/test_validator.py::test_valid_x_url # Single test
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
- **`src/main.py`** -- Click CLI entry point. Validates URL via validator, delegates to downloader. Registered as `x-space-dl` console script.
|
||||
- **`src/validator.py`** -- `validate_space_url()` returns `(is_valid, space_id, error_message)`. Accepts both `x.com` and `twitter.com` domains.
|
||||
- **`src/downloader.py`** -- `download_space()` configures yt-dlp with `bestaudio/best` format and FFmpeg MP3 postprocessor. Output: `space_{SPACE_ID}.mp3`. Raises `DownloadError` on failure.
|
||||
|
||||
## Dependencies
|
||||
|
||||
Runtime: `yt-dlp`, `click`. System: `ffmpeg`. Dev: `pytest`, `pytest-mock`.
|
||||
|
||||
Tests mock `yt_dlp.YoutubeDL` -- no network calls in unit tests. Integration tests use `@pytest.mark.integration`.
|
||||
40
CLAUDE.md
Normal file
40
CLAUDE.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
# Install (editable)
|
||||
pip install -e .
|
||||
|
||||
# Run the CLI
|
||||
x-space-dl <URL>
|
||||
python -m src.main <URL>
|
||||
|
||||
# Run all tests
|
||||
pytest
|
||||
|
||||
# Run a single test
|
||||
pytest tests/test_validator.py::test_valid_x_url
|
||||
|
||||
# Run only unit tests (skip integration)
|
||||
pytest -m "not integration"
|
||||
|
||||
# Run only integration tests
|
||||
pytest -m integration
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
Three-module CLI tool that wraps yt-dlp to download X/Twitter Space recordings as MP3:
|
||||
|
||||
- **`src/main.py`** — Click CLI entry point (`cli`). Validates URL via validator, then delegates to downloader. Registered as `x-space-dl` console script.
|
||||
- **`src/validator.py`** — `validate_space_url()` returns `(is_valid, space_id, error_message)` tuple. Accepts both `x.com` and `twitter.com` domains.
|
||||
- **`src/downloader.py`** — `download_space()` configures yt-dlp with `bestaudio/best` format and FFmpeg MP3 postprocessor. Output files are named `space_{SPACE_ID}.mp3`. Raises `DownloadError` on failure.
|
||||
|
||||
Tests mock `yt_dlp.YoutubeDL` — no network calls in unit tests. Integration tests use the `@pytest.mark.integration` marker.
|
||||
|
||||
## Dependencies
|
||||
|
||||
Runtime: `yt-dlp`, `click`. System: `ffmpeg`. Dev: `pytest`, `pytest-mock`.
|
||||
1017
docs/plans/2025-10-26-x-space-downloader-implementation.md
Normal file
1017
docs/plans/2025-10-26-x-space-downloader-implementation.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user