音频博客Navidrome导入电台
✅ 正确的导入步骤
没有 BOM 头,没有多余空格。可以用这个命令重新生成一个干净的 CSV:
cd ~/navidrome
cat > radios.csv << 'EOF'
name,url
北京新闻广播,https://lhttp.qingting.fm/live/339/64k.mp3
北京交通广播,https://lhttp.qingting.fm/live/336/64k.mp3
北京文艺广播,https://lhttp.qingting.fm/live/333/64k.mp3
北京体育广播,https://lhttp.qingting.fm/live/335/64k.mp3
北京音乐广播,https://lhttp.qingting.fm/live/332/64k.mp3
北京城市广播,https://lhttp.qingting.fm/live/345/64k.mp3
京津冀之声,https://lhttp.qingting.fm/live/5022463/64k.mp3
郑州新闻广播,https://lhttp.qingting.fm/live/1220/64k.mp3
郑州交通广播,https://lhttp.qingting.fm/live/1211/64k.mp3
郑州经济广播,https://lhttp.qingting.fm/live/1221/64k.mp3
郑州音乐广播,https://lhttp.qingting.fm/live/4921/64k.mp3
郑州新乡交通广播,https://lhttp.qingting.fm/live/1229/64k.mp3
EOF📝 用这个方法导入的
cd /data/navi
# 停止容器
docker-compose stop
# 先备份
cp data/navidrome.db data/navidrome.db.backup
# 使用交互式导入
sqlite3 data/navidrome.db然后在 sqlite 提示符下执行:
-- 开启 CSV 模式
.mode csv
-- 导入 CSV(注意路径)
.import data/radios.csv temp_radios
-- 查看临时表有多少行(调试)
SELECT COUNT(*) FROM temp_radios;
-- 查看前几行
SELECT * FROM temp_radios LIMIT 3;
-- 插入数据(排除表头行)
INSERT INTO radio (id, name, stream_url, created_at, updated_at)
SELECT
lower(hex(randomblob(16))),
name,
url,
datetime('now'),
datetime('now')
FROM temp_radios
WHERE name != 'name' -- 跳过表头
AND NOT EXISTS (SELECT 1 FROM radio WHERE name = temp_radios.name);
-- 查看插入了多少条
SELECT changes();
-- 删除临时表
DROP TABLE temp_radios;
-- 验证结果
SELECT COUNT(*) FROM radio;
SELECT name, stream_url FROM radio WHERE name LIKE '%北京%' LIMIT 5;
-- 退出
.quit# 重启容器
docker-compose start📝 另一个方法
# 1. 进入正确目录
cd /data/navi
# 2. 停止容器
docker-compose stop
# 3. 现在导入(使用正确的相对路径)
sqlite3 data/navidrome.db << 'EOF'
.mode csv
.import --skip 1 data/radios.csv temp_radios
INSERT INTO radio (id, name, stream_url, created_at, updated_at)
SELECT
lower(hex(randomblob(16))),
name,
url,
datetime('now'),
datetime('now')
FROM temp_radios
WHERE NOT EXISTS (SELECT 1 FROM radio WHERE name = temp_radios.name);
DROP TABLE temp_radios;
SELECT '导入完成,当前电台总数: ' || COUNT(*) FROM radio;
EOF
# 4. 重启容器
docker-compose start🎯 快速验证导入结果
# 查看所有电台
sqlite3 /data/navi/data/navidrome.db "SELECT name, stream_url FROM radio ORDER BY name;"
# 只看北京相关的
sqlite3 /data/navi/data/navidrome.db "SELECT name FROM radio WHERE name LIKE '%北京%';"你现在在 /data/navi/data/ 目录下,记得 CSV 文件也在 data/ 子目录中(/data/navi/data/radios.csv)。按照上面的步骤操作应该可以成功导入。