cottongin f6840a777c chore: add verbose WS logging to both bot plugins
Log each phase: thread start, TCP connect, subscribe sent, message
received (type), status updates with client list, connection closed
reasons, connection refused/timeout as distinct warnings.

Made-with: Cursor
2026-03-12 07:55:04 -04:00
2026-03-12 03:51:01 -04:00

NtR SoundCloud Fetcher

Fetches SoundCloud likes from NicktheRat's profile, builds weekly playlists aligned to the Wednesday 22:00 ET show schedule, and serves them via a JSON API.

Quick Start

pip install -e ".[dev]"
export NTR_ADMIN_TOKEN="your-secret-here"
ntr-fetcher

The API starts at http://127.0.0.1:8000.

Historical Backfill

Seed the database with past shows by providing an anchor episode and its air date:

NTR_ADMIN_TOKEN=token ntr-fetcher --init --show 521 --aired 2026-01-07

This computes every weekly show from the anchor forward to today, batch-fetches the corresponding likes from SoundCloud, and populates the database. Episode numbers are assigned automatically (521, 522, ...). After backfill completes, the normal server mode will auto-increment from the latest episode.

API

Full documentation: docs/api.md

Endpoint Method Auth Description
/health GET -- Service health check
/playlist GET -- Current week's playlist
/playlist/{position} GET -- Single track by position (1-indexed)
/shows GET -- List all shows (paginated)
/shows/by-episode/{episode_number} GET -- Look up show by episode number
/shows/{show_id} GET -- Specific show by internal ID
/login GET/POST -- Login page
/logout GET Session Clear session
/dashboard GET Session Live playlist dashboard
/admin/refresh POST Bearer Trigger immediate SoundCloud fetch
/admin/tracks POST Bearer Add track to current show
/admin/tracks/{track_id} DELETE Bearer Remove track from current show
/admin/tracks/{track_id}/position PUT Bearer Move track to new position
/admin/announce POST Bearer/Session Announce track to IRC

Configuration

Environment variables (prefix NTR_):

Variable Default Description
NTR_PORT 8000 API port
NTR_HOST 127.0.0.1 Bind address
NTR_DB_PATH ./ntr_fetcher.db SQLite database path
NTR_POLL_INTERVAL_SECONDS 3600 How often to check SoundCloud (seconds)
NTR_ADMIN_TOKEN (required) Bearer token for admin endpoints
NTR_SOUNDCLOUD_USER nicktherat SoundCloud username to track
NTR_SHOW_DAY 2 Day of week for show (0=Mon, 2=Wed)
NTR_SHOW_HOUR 22 Hour (Eastern Time) when the show starts

Dashboard

An optional web dashboard for announcing tracks to IRC during live shows. Nick opens the dashboard, sees the current and previous week's playlist, and clicks "Announce" next to a track to push it to the configured IRC channel via connected bot plugins.

Enable by setting these environment variables:

Variable Default Description
NTR_WEB_USER (required) Dashboard login username
NTR_WEB_PASSWORD (required) Dashboard login password
NTR_SECRET_KEY (required) Secret key for cookie signing

Bot plugins (Sopel and Limnoria) connect to the API's WebSocket endpoint to receive announcements. See plugin READMEs for configuration.

Development

pip install -e ".[dev]"
pytest
ruff check src/ tests/
Description
Fetches SoundCloud likes from NicktheRat's profile, builds weekly playlists aligned to the Wednesday 22:00 ET show schedule, and serves them via a JSON API.
Readme MIT 238 KiB
Languages
Python 90.1%
HTML 9.9%