尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

beets mbcollection 插件详解:将音乐库同步到 MusicBrainz Collection

beets mbcollection 插件详解:将音乐库同步到 MusicBrainz Collection 音频CLI【免费下载链接】beetsmusic library manager and MusicBrainz tagger项目地址https://gitcode.com/gh_mirrors/be/beets点击查看免费下载本篇文章围绕 beets 的mbcollection插件展开介绍如何将本地 beets 数据库中的专辑album提交到 MusicBrainz 的 Collection收藏列表实现音乐库与在线目录的双向维护。读完本文你将掌握该插件的启用方式、musicbrainz与mbcollection两段配置的完整参数、beet mbupdate命令及其-r/--remove选项的用法以及插件底层的认证、分页拉取与批量提交实现原理。插件是什么mbcollection是 beets 自带的插件源码位于 beetsplug/mbcollection.py核心作用是把你的本地曲库“上报”到 MusicBrainz从而在 MusicBrainz 网站上维护一份与你本地收藏对应的 Collection 列表。对于希望利用 MusicBrainz 的在线收藏功能整理、分享、追踪自己唱片收藏的用户这个插件可以免去手工逐条添加专辑的繁琐操作。从实现上看插件围绕三个关键类展开均可在 beetsplug/mbcollection.py 中查看MusicBrainzUserAPI继承自 beetsplug/_utils/musicbrainz.py 中的MusicBrainzAPI负责携带用户凭据访问 MusicBrainz Web ServiceMBCollection对单个 MusicBrainz collection 的封装提供分块提交add与删除remove等便捷操作MusicBrainzCollectionPlugin插件入口注册mbupdate子命令并在开启auto时挂接导入流程。快速上手1. 启用插件在 beets 的配置文件中启用mbcollection。beets 的默认插件列表位于 beets/config_default.yaml其中默认启用了musicbrainz插件mbcollection需要你自行加入plugins:列表例如plugins: mbcollection如果你同时使用多个插件用逗号分隔即可例如plugins: mbcollection, fetchart, lyrics。启用插件机制本身可参考 beets 主文档中关于使用插件的说明:ref:using-plugins 小节。2. 配置 MusicBrainz 账号凭据插件需要访问你的 MusicBrainz 私人收藏因此必须提供账号认证信息。在配置文件中新增musicbrainz:段musicbrainz: user: you pass: seekrituser你的 MusicBrainz 用户名pass你的 MusicBrainz 密码。从源码看beetsplug/mbcollection.py 的MusicBrainzUserAPI.__post_init__会把musicbrainz.pass标记为redact True即该密码会在日志输出中被自动打码避免明文泄露这一改进也记录在 docs/changelog.rst 中。另外musicbrainz段还支持以下可选参数定义于 beetsplug/_utils/musicbrainz.py 的MusicBrainzAPI.__post_init__hostAPI 主机名默认musicbrainz.orghttps使用非默认主机时是否启用 HTTPS默认falseratelimit/ratelimit_interval请求频率限制默认1次请求 /1秒。注意认证方式并非普通的 HTTP Basic而是 HTTP Digest 认证源码中MusicBrainzUserAPI使用HTTPDigestAuth这是实现细节用户无需手动干预。3. 执行同步命令启用插件并配置好账号后运行beet mbupdate该命令会自动把你 beets 库中的所有专辑更准确地说是所有带有效mb_albumid的专辑添加到你账号下的第一个 MusicBrainz collection 中。如果你还没有任何 collection需要先去 MusicBrainz 网站的个人资料页手动创建一个例如按照 MusicBrainz 官方文档中关于 Collections 的介绍创建否则命令会因找不到 collection 而报错。beet mbupdate命令行选项mbupdate子命令在 beetsplug/mbcollection.py 的MusicBrainzCollectionPlugin.commands()中注册支持一个命令行选项选项完整形式作用-r--remove将 beets 数据库中已不存在的专辑从 MusicBrainz collection 中移除使用示例beet mbupdate --remove执行逻辑见update_collection→update_album_list通过mb_api.browse_collections()拉取当前用户的所有 collection过滤出entity_type release的收藏自动跳过事件类 collection若配置了collectionMBID则校验其存在性否则取第一个 release collection收集 beets 库中所有有效mb_albumid通过UUID_PAT正则校验格式无效 ID 会被静默跳过这一行为也记录在 docs/changelog.rst 中分块 PUT 到 collection 的 releases 端点完成添加若指定了--remove则拉取 collection 中已有的全部 release计算与本地库的差集并分块 DELETE 掉本地不存在的条目。配置选项mbcollection插件自身的配置放在mbcollection:段下共有三个选项默认值定义于 beetsplug/mbcollection.py 的__init__选项类型默认值说明auto布尔no是否在每次导入新专辑后自动把该专辑加入 MusicBrainz collectioncollection字符串空None指定要更新的 MusicBrainz collection 的 MBID为空时使用账号下的第一个 release collectionremove布尔no是否移除 beets 库中已不存在的专辑等价于命令行-r可作为默认行为固化在配置中示例配置mbcollection: auto: yes collection: 1a2b3c4d-5e6f-7890-abcd-ef1234567890 remove: yes各选项的行为细节auto开启后插件在__init__中注册self.import_stages [self.imported]每次导入流程结束时调用imported把刚导入的专辑task.is_album时追加到 collection 中。此时只做添加不做删除remove_missingFalse。collection指定 MBID 后collection属性会校验该 ID 是否为当前用户名下存在的 release collection若无效则抛出UserError(invalid collection ID: ...)。remove与mbupdate --remove等效两者都会在同步时清理本地库中已删除的专辑。源码实现与底层原理认证与请求封装MusicBrainzUserAPI在初始化时读取musicbrainz.user/musicbrainz.pass构造HTTPDigestAuth并在每次请求中自动附加clientbeets-版本号参数见request()方法以满足 MusicBrainz API 对客户端标识的要求。请求统一走 beetsplug/_utils/requests.py 提供的带超时、重试与限速的会话LimiterTimeoutSession默认每秒 1 个请求定义于 beetsplug/_utils/musicbrainz.py。分页与批量提交MBCollection用两个类级常量控制请求规模FETCH_CHUNK_SIZE 100拉取 collection 内 release 时每页 100 条通过offset分页直至取完release_count条SUBMISSION_CHUNK_SIZE 200添加/删除时每次最多提交 200 个 release ID防止请求体过大。添加走 HTTPPUT删除走 HTTPDELETEURL 形式为/ws/2/collection/{id}/releases/{mbid1;mbid2;...}。源码中特别对分号做了%3B转义以规避 requests 库对 URL 分号的解析问题。错误处理同步过程中捕获BeetsHTTPError并记录错误日志不会导致 beets 崩溃。其中 401 未授权错误会被UnauthorizedMBError定义于 beetsplug/_utils/musicbrainz.py转换为友好提示明确指出应检查musicbrainz.user和musicbrainz.pass配置见 docs/changelog.rst 中关于 401 处理的变更记录。测试佐证插件的单元测试位于 test/plugins/test_mbcollection.py覆盖了以下场景test_get_collection_validation参数化验证“无任何 collection”“只有事件类 collection”“collection ID 无效”“ID 有效”四种情况下的行为与报错test_mbupdate通过 mock 分页响应与小块提交验证mbupdate --remove会分页拉取远端 release、批量提交本地新增专辑、并删除本地库中不存在的条目共断言 6 次 HTTP 调用test_mbupdate_logs_unauthorized_errors验证 401 时记录包含musicbrainz.user/musicbrainz.pass提示的错误日志。常见问题与注意事项首次使用提示“no collections exist for user”表示当前账号下没有任何 collection请先到 MusicBrainz 网站个人资料页创建一个。提示 “No release collection found.”账号下只有事件event类 collection插件只处理 release 类收藏。提示 “invalid collection ID”mbcollection.collection配置的 MBID 不存在或不属于当前账号。401 Unauthorized检查musicbrainz.user/musicbrainz.pass是否正确。批量同步较大曲库插件会自动分批每批 200 个提交并遵循每秒 1 次请求的限速请耐心等待完成。小结mbcollection插件用一条命令打通了 beets 本地音乐库与 MusicBrainz 在线收藏之间的同步beet mbupdate全量同步-r/--remove清理已删除的专辑auto选项让每次导入都自动增量更新配合musicbrainz段的账号配置和mbcollection段的collection/remove选项可以组合出适合个人习惯的收藏维护工作流。相关源码与测试可分别在 beetsplug/mbcollection.py 与 test/plugins/test_mbcollection.py 中进一步查阅。赞分享音频CLI【免费下载链接】beetsmusic library manager and MusicBrainz tagger项目地址https://gitcode.com/gh_mirrors/be/beets点击查看免费下载相关推荐beetsBeets媒体库管理系统指南用 MusicBrainz 自动标签的插件化音乐库管理工具beetsBeets媒体库管理系统指南用 MusicBrainz 自动标签的插件化音乐库管理工具 Beets 是一款面向“痴迷型音乐收藏者”的媒体库管理系音频CLIbeets playlist 插件实战指南用 M3U 播放列表查询与同步音乐库beets playlist 插件实战指南用 M3U 播放列表查询与同步音乐库 playlist 是 beets 官方内置插件之一用于把 .m3u 格式的播音频CLIbeets 使用指南用 MusicBrainz 自动标签整理你的音乐媒体库beets 使用指南用 MusicBrainz 自动标签整理你的音乐媒体库 beets 是一款面向音乐收藏管理场景的开源媒体库管理系统它以一次性把你的音乐音频CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表