Files
StudyDiary-20261009/02-学习笔记/方案2:批量脚本下载喜马拉雅专辑封面.md
CrazyJasonwell e97be9ac8c commit all
2026-10-09 22:06:40 +08:00

93 lines
3.5 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 方案2:批量脚本下载喜马拉雅专辑封面,自动生成 cover.jpg
> 适用场景:批量处理喜马拉雅英语专辑,ABS扫描文件夹自动读取`cover.jpg`,彻底避0开ABS插件`Invalid content type`的bug。 脚本:Python,单文件,支持批量,自动保存为`cover.jpg`,配合你的ABS目录结构。 前置:安装Python,需要`requests`库。
## 脚本 `xm_cover_download.py`
```
import requests
import os
# ========== 配置区,修改这里 ==========
# ABS有声书根目录,你的专辑文件夹都放在这个路径
ROOT_DIR = "/mnt/abs_audio"
# 专辑列表:【专辑文件夹名称】:【喜马拉雅封面原图url】
album_list = {
"新概念英语第一册": "http://imagev2.xmcdn.com/storages/531f-audiofreehighqps/0F/0B/CMCoOSYEhMILAAGNCACxBHag",
# 在这里继续增加更多专辑,格式复制上面一行
# "专辑文件夹名": "封面url",
}
# ======================================
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
def download_cover(folder_name, img_url):
folder_path = os.path.join(ROOT_DIR, folder_name)
os.makedirs(folder_path, exist_ok=True)
cover_path = os.path.join(folder_path, "cover.jpg")
try:
resp = requests.get(img_url, headers=headers, timeout=15)
resp.raise_for_status()
with open(cover_path, "wb") as f:
f.write(resp.content)
print(f"✅ {folder_name} 封面下载成功 -> {cover_path}")
except Exception as e:
print(f"❌ {folder_name} 下载失败: {str(e)}")
if __name__ == "__main__":
for album_name, url in album_list.items():
download_cover(album_name, url)
print("\n全部任务执行完毕,请去ABS资料库扫描!")
```
## 使用步骤
1. 安装依赖
```
pip install requests
```
2. 修改脚本配置区
- `ROOT_DIR`:改成你宿主机存放ABS有声书的目录
- `album_list`:添加专辑文件夹名,以及对应的喜马拉雅封面链接
> ⚠️ 文件夹名称**必须**和ABS里面的专辑目录完全一致,脚本会在这个目录生成`cover.jpg`
3. 运行脚本
```
python xm_cover_download.py
```
4. 回到 Audiobookshelf 网页端 → 资料库 → **扫描库** ABS会自动读取每个专辑文件夹内的`cover.jpg`作为封面,不再调用插件远程下载图片,不会报那个Content-Type错误。
## 进阶:如果想自动从喜马拉雅专辑页面提取封面链接(可选)
如果你不想手动复制封面url,可以加爬虫解析专辑页面提取图片地址,需要的话我给你扩展版本。
## ABS重要注意事项
1. 权限:docker的ABS容器,`cover.jpg`文件权限建议 `chmod 644 cover.jpg`,`chown 你的uid:gid cover.jpg`,否则ABS读不到本地封面
```
# 示例,替换为你的专辑目录
chown -R 1000:1000 /mnt/abs_audio
```
2. 生效逻辑:**本地cover.jpg优先级高于元数据插件远程封面**,扫描后直接加载,不会再去拉取xmcdn图片。
3. 如果你是用Alist挂载网盘存放音频:
> 部分网盘不支持直接上传文件到挂载目录,这种情况脚本需要运行在Alist宿主机,保存到本地再上传网盘对应专辑文件夹。
## 批量操作小技巧
- 一次性添加几十条专辑,直接在`album_list`字典追加多行即可
- 可以先浏览器打开封面链接确认图片正常,再填入脚本,减少失败
要不要我再给你写一个**一键批量修改权限