Classical 887
Check what's playing on WRHV 88.7 FM (Classical WMHT) — the classical music station in the Hudson Valley. Queries the NPR Composer API for real-time playlist data and provides clickable links to listen on YouTube, Spotify, Apple Music, IMSLP, IDAGIO, Internet Archive, and Musopen.
When to Use
-
Checking what's playing right now on 88.7
-
Getting recent tracks with links to listen again
-
Building a Markdown playlist report
-
Finding a specific piece heard on the radio
-
Creating Spotify playlists from radio tracks
-
Renaming Spotify playlists
-
Auditing owned Spotify playlists (list, search, sort)
-
Cleaning up accumulated Spotify playlists (safe bulk removal)
-
Exporting playlist track data to JSON before cleanup
-
Reviewing playlist operation history
Prerequisites
-
requests Python package (uv pip install --system requests )
-
No API key required — uses NPR's public Composer API
-
Spotify integration (optional): spotipy package (uv pip install --system spotipy ) + Spotify Developer App credentials
Usage
What's playing right now (default)
python3 ~/.claude/skills/classical-887/scripts/classical_887.py
Last 10 tracks
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --recent 10
Today's full playlist (pages through all tracks for today)
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --period today
Last week as Markdown report
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --period week --markdown ~/Desktop/classical-week.md
Last month as Markdown report
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --period month --markdown ~/Desktop/classical-month.md
Specific date (Valentine's Day)
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --date 2026-02-14
Search for a composer across a date range
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --period week --search bach
Full performer details (album, label, catalog number)
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --recent 5 --verbose
Raw JSON output
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --now --json
Create Spotify playlist from today's tracks
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --period today --spotify-playlist
Add yesterday's tracks to the persistent playlist
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --period yesterday --spotify-playlist
Custom playlist name from a specific date
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --date 2026-02-14 --spotify-playlist "Valentine's Classical"
Last week's Bach on Spotify
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --period week --search bach --spotify-playlist "Bach on 88.7"
Rename the default playlist
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --spotify-rename "Hudson Valley Classical"
Rename a specific playlist with a new description
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --spotify-playlist "Bach on 88.7" --spotify-rename "Bach Collection" --spotify-description "Curated Bach from WRHV 88.7 FM"
View playlist operation log as Markdown
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --spotify-log-report
Audit all owned Spotify playlists
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --spotify-audit
Audit with search filter and sort by track count
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --spotify-audit --search "Rediscover*" --sort tracks
Dry run cleanup (preview only, no deletion)
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --spotify-cleanup "Rediscover*"
Execute cleanup with safety cap
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --spotify-cleanup "Rediscover*" --confirm --max 10
Export playlist tracks to JSON before cleanup
python3 ~/.claude/skills/classical-887/scripts/classical_887.py --spotify-export ~/Desktop/exports --search "Rediscover*"
Parameters
Flag Description Default
--now
Show what's playing now On (if no other mode)
--recent N
Show last N tracks (1–100) Off
--date YYYY-MM-DD
Fetch all tracks from a specific date Off
--period PERIOD
Fetch tracks from: today , yesterday , week , month
Off
--search QUERY
Filter results by composer, piece, or performer Off
--verbose
Full details (album, label, catalog, all performers) Off
--json
Raw JSON output Off
--markdown [FILE]
Write Markdown report with clickable links classical-playlist.md
--sort FIELD
Sort by: time (newest first), duration (longest), composer (A–Z) time
--spotify-playlist [NAME]
Create/append to a Spotify playlist Classical 88.7 FM
--spotify-rename NEW_NAME
Rename an existing Spotify playlist (defaults to renaming Classical 88.7 FM unless --spotify-playlist specifies the current name) Off
--spotify-description DESC
Set new description when renaming (used with --spotify-rename ) Off
--spotify-log-report
View the playlist operation log as a Markdown report Off
--spotify-audit
List all owned Spotify playlists (combine with --search and --sort ) Off
--spotify-cleanup PATTERN
Remove playlists matching glob pattern (dry run unless --confirm ) Off
--spotify-export [DIR]
Export matching playlist tracks to JSON files .
--confirm
Execute cleanup (without this, --spotify-cleanup is preview only) Off
--max N
Safety cap: max playlists to remove per invocation No limit
--spotify-client-id ID
Spotify app client ID (or SPOTIFY_CLIENT_ID env var) —
--spotify-client-secret SECRET
Spotify app client secret (or SPOTIFY_CLIENT_SECRET env var) —
Output
Default shows: composer, piece, performers, duration, and listen links (YouTube, Spotify, Apple Music, IMSLP, IDAGIO, Internet Archive, Musopen).
Markdown report includes: now-playing header, recent tracks table with 7 platform links, and a composer index.
Playlist Log
Every --spotify-playlist operation automatically appends a JSONL entry to ~/.claude/skills/classical-887/playlist-log.jsonl . Each entry records:
-
Date and action (created/appended)
-
Playlist name and Spotify URL
-
Tracks added (composer, piece, performers, duration, Spotify URI)
-
Tracks not found on Spotify
-
Total counts (matched/unmatched)
View the log as a Markdown report with --spotify-log-report . The log file is append-only and can be queried with standard jq commands:
Count total operations
wc -l ~/.claude/skills/classical-887/playlist-log.jsonl
Show all playlist names used
cat ~/.claude/skills/classical-887/playlist-log.jsonl | jq -r '.playlist_name' | sort -u
Total tracks matched across all operations
cat ~/.claude/skills/classical-887/playlist-log.jsonl | jq '.matched_count' | paste -sd+ | bc
Data Source
NPR Composer API (api.composer.nprstations.org/v1/widget/ ), which powers the WMHT playlist widget at classicalwmht.org/playlist .
Full API documentation: references/api-reference.md
Station Info
WRHV 88.7 FM (Poughkeepsie, NY), simulcast of WMHT-FM 89.1 (Schenectady). Full station details in references/api-reference.md .
-
Stream: wmht.org/classical
-
Playlist: classicalwmht.org/playlist
Fallback
If the NPR Composer API is unavailable:
Check the playlist page directly
firecrawl scrape "https://classicalwmht.org/playlist" --only-main-content
Reference Documentation
File Contents
references/api-reference.md
NPR Composer API: endpoints, request/response schema, field reference
references/spotify-setup.md
Spotify Developer App setup, OAuth, env vars, Dev Mode notes