Weather
一个面向 Data & APIs 场景的 Agent 技能。原始说明:Get current weather and forecasts (no API key required).
一个面向 Data & APIs 场景的 Agent 技能。原始说明:Internet radio music stream database — collect, store, and manage a database of music streams from internet-radio.com. ~150+ streams, 29 genres, auto-populat...
name: internet-radio-music-db
version: 2.6.0
description: Internet radio music stream database — collect, store, and manage a database of music streams from internet-radio.com. ~150+ streams, 29 genres, auto-population and availability checking with adaptive bitrate-based speed thresholds. Works together with the Internet Radio Music Player skill. For the easiest management experience, use the internet-radio-music-webui plugin.
metadata:
openclaw:
requires:
bins:
emoji: "🎵"
homepage: https://clawhub.ai/skills/internet-radio-music-db
Skill for collecting and managing an internet radio stream database.
The easiest way to manage both playback and the stream database is the internet-radio-music-webui plugin.
The plugin provides an embeddable web panel with:
[embed url="http://127.0.0.1:18789/mplayer"]Install the plugin:
openclaw plugins install "clawhub:internet-radio-music-webui"
openclaw gateway restart
The plugin auto-detects the database scripts (cli.py, show_stats.py, build_db.py, check_availability.py) from this skill. Both this skill AND the internet-radio-music-player skill must be installed for the plugin to work.
https://www.internet-radio.com/ — the largest internet radio station catalog.
MAX_PAGES pages per genre (/stations/{genre}/), stopping on empty page. With the default MAX_PAGES = 10 this yields ~2700+ stations across 29 genres (~150+ after dedup and filtering). Adjust MAX_PAGES to control search depth..pls playlist link from each stationhttp://server:port/stream)state.jsonEach stream has a bitrate (kbps) stored in the database. The minimum speed threshold is:
threshold_KBps = max(5.0, min((bitrate_kbps / 8) * 0.75, 50.0))
| Stream bitrate | Nominal speed | Threshold (75%) | Effective min |
|----------------|---------------|-----------------|---------------|
| 320 kbps | 40 KB/s | 30 KB/s | 30 KB/s |
| 256 kbps | 32 KB/s | 24 KB/s | 24 KB/s |
| 192 kbps | 24 KB/s | 18 KB/s | 18 KB/s |
| 128 kbps | 16 KB/s | 12 KB/s | 12 KB/s |
| 64 kbps | 8 KB/s | 6 KB/s | 6 KB/s |
| 32 kbps | 4 KB/s | 3 KB/s | 5 KB/s (floor) |
| unknown | — | — | 5 KB/s (floor) |
This means a 64k stream only needs 6 KB/s to pass, while a 320k stream needs 30 KB/s.
check_stream.py module)failed_checks >= 3 are automatically removedcheck_speed_bps, check_threshold_kbs, check_bytes_received{
"url": "http://server:8000/stream",
"name": "Station Name",
"genre": "rock",
"language": "en",
"bitrate": 128,
"available": true,
"source": "internet-radio.com",
"added_at": "2026-05-23T18:00:00+00:00",
"last_checked": "2026-05-23T19:00:00+00:00",
"last_speed_bps": 12288,
"failed_checks": 0
}
| File | Purpose |
|------|---------|
| scripts/check_stream.py | Shared module — adaptive speed check logic |
| scripts/build_db.py | Database population (imports from check_stream.py) |
| scripts/check_availability.py | Availability check (imports from check_stream.py) |
| scripts/cli.py | Stream management (list/add/remove/export) |
| scripts/show_stats.py | Statistics (genres, languages, speed, efficiency) |
| state.json | Stream database (not included in publication) |
# Populate database (parallel, 29 genres, ~1000+ streams)
python ~/.openclaw/skills/internet-radio-music-db/scripts/build_db.py
# Check availability (120 workers, adaptive thresholds)
python ~/.openclaw/skills/internet-radio-music-db/scripts/check_availability.py
# Full statistics
python ~/.openclaw/skills/internet-radio-music-db/scripts/show_stats.py
# Genre breakdown
python ~/.openclaw/skills/internet-radio-music-db/scripts/show_stats.py --genres
# Language distribution
python ~/.openclaw/skills/internet-radio-music-db/scripts/show_stats.py --lang
# Speed distribution
python ~/.openclaw/skills/internet-radio-music-db/scripts/show_stats.py --speed
# Top-10 fastest
python ~/.openclaw/skills/internet-radio-music-db/scripts/show_stats.py --top-speed 10
# Efficiency report (actual speed vs bitrate)
python ~/.openclaw/skills/internet-radio-music-db/scripts/show_stats.py --effective
# List streams by genre
python ~/.openclaw/skills/internet-radio-music-db/scripts/cli.py list rock
# Add/remove streams
python ~/.openclaw/skills/internet-radio-music-db/scripts/cli.py add <url> <name> <genre> [lang]
python ~/.openclaw/skills/internet-radio-music-db/scripts/cli.py remove <url>
# Export database
python ~/.openclaw/skills/internet-radio-music-db/scripts/cli.py export backup.json
0 */4 * * *30 */4 * * *openclaw cron add --name "DB Population" --schedule "0 */4 * * *" --tz "Europe/Samara" \
--message "Run: python ~/.openclaw/skills/internet-radio-music-db/scripts/build_db.py"
openclaw cron add --name "Availability Check" --schedule "30 */4 * * *" --tz "Europe/Samara" \
--message "Run: python ~/.openclaw/skills/internet-radio-music-db/scripts/check_availability.py"
check_stream.py module for identical criteria in population and checkingavailable: false, failed_checks counter incrementedfailed_checks >= 3 auto-removedMAX_PAGES per genre (default 10, configurable in build_db.py). Default settings yield ~150+ unique streams per cycle; increase MAX_PAGES for broader coverageMAX_PAGE to MAX_PAGES for clarityMAX_PAGES is configurable in build_db.py for deeper/faster scanscheck_stream.py used by both build_db.py and check_availability.py--effective flag shows actual vs nominal bitrate speedcheck_stream() to probe_stream() in build_db.py.clawhubignorebuild_db.py — added seen_urls setMAX_PAGES = 10