返回顶部
m

musicbrainz_importer音乐数据导入

Look up and add music metadata on MusicBrainz. Use when asked to check if an artist, album, or release exists on MusicBrainz, find MusicBrainz entries linked to Spotify URLs, or add/edit releases, artists, or other entities on MusicBrainz. Triggers on mentions of MusicBrainz, MB, music database, adding releases, music metadata, or linking Spotify to MusicBrainz.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.1.0
安全检测
已通过
99
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

musicbrainz_importer

MusicBrainz

浏览器设置

所有浏览器操作均通过 Node.js 脚本使用 Playwright。每次会话安装一次:

bash
cd /tmp && npm ls playwright 2>/dev/null || npm install playwright

启动模式(在每个脚本中使用):

javascript
import { chromium } from playwright;
import { execSync } from child_process;

// 动态检测 Playwright 捆绑的 Chromium 路径
const chromiumPath = process.env.PLAYWRIGHTCHROMIUMPATH
|| execSync(find ~/.cache/ms-playwright -name chrome -path /chrome-linux/chrome 2>/dev/null | head -1, { encoding: utf-8 }).trim()
|| execSync(find ~/.cache/ms-playwright -name Chromium -path */Chromium.app/Contents/MacOS/Chromium 2>/dev/null | head -1, { encoding: utf-8 }).trim();
if (!chromiumPath) throw new Error(未找到 Chromium。运行:npx playwright install chromium);

const browser = await chromium.launch({
executablePath: chromiumPath,
headless: true,
args: [--no-sandbox]
});
const page = await browser.newPage();

架构:独立步骤

共有 四个操作。每个操作都是一个独立的 Playwright 脚本。切勿将它们合并到一个脚本中。按顺序运行:

  1. 1. 登录 — 验证浏览器会话
  2. 添加艺术家 — 创建新的艺术家实体
  3. 添加发行版 — 创建包含曲目、元数据和 Spotify 链接的发行版
  4. 上传封面 — 为现有发行版添加专辑封面

步骤之间,关闭浏览器(await browser.close())。每个脚本重新启动,如果需要则登录,完成其单一任务后退出。这可以防止操作之间的状态污染。



预检 — 凭据检查

在任何写入操作之前运行。 只读查询可跳过。

bash
bash scripts/preflight.sh

凭据存放在技能目录下的 .credentials.json 文件中。

  • - MISSING_CREDENTIALS:要求用户提供 MusicBrainz 用户名和密码。保存:
bash cat > ~/.openclaw/skills/musicbrainz/.credentials.json << EOF {username: USER, password: PASS} EOF
  • - INVALID_CREDENTIALS:要求用户验证、更新文件并重新运行。
  • 无账户 → https://musicbrainz.org/register

步骤 1:登录

每个向 MB 写入的 Playwright 脚本都必须以登录开始。使用此精确模式:

javascript
import { readFileSync } from fs;
const creds = JSON.parse(readFileSync(
process.env.HOME + /.openclaw/skills/musicbrainz/.credentials.json
));

await page.goto(https://musicbrainz.org/login, { waitUntil: networkidle, timeout: 30000 });
await page.fill(#id-username, creds.username);
await page.fill(#id-password, creds.password);
// 重要:页面上有两个提交按钮(搜索 + 登录)。
// 必须点击包含Log in文本的那个。
await page.evaluate(() => {
Array.from(document.querySelectorAll(button[type=submit]))
.find(b => b.textContent.includes(Log in))?.click();
});
await page.waitForTimeout(5000);

// 验证:应重定向到 /user/
if (page.url().includes(/login)) {
throw new Error(登录失败);
}

关键陷阱

MusicBrainz 登录页面有 两个表单:一个搜索表单和一个登录表单。两者都有 button[type=submit]。使用 page.click(button[type=submit]) 会点击搜索按钮。始终使用上述 evaluate 模式通过文本内容查找按钮。

步骤 2:添加艺术家

何时使用: 艺术家在 MusicBrainz 上不存在。先用 mb_lookup.sh 或搜索 API 检查。

脚本结构

javascript
// ... 浏览器启动 + 登录(步骤 1)...

await page.goto(https://musicbrainz.org/artist/create, {
waitUntil: networkidle, timeout: 30000
});
await page.waitForTimeout(2000);

// 填写字段
await page.fill(#id-edit-artist\\.name, 艺术家名称);
await page.fill(#id-edit-artist\\.sort_name, 名称, 艺术家); // 姓, 名 或 名称, The
await page.selectOption(#id-edit-artist\\.type_id, 2); // 1=个人, 2=团体, 4=其他
await page.fill(#id-edit-artist\\.edit_note,
从 Spotify 添加艺术家:https://open.spotify.com/artist/);

// 提交 — 使用 form.submit() 避免按钮歧义
await page.evaluate(() => {
document.getElementById(id-edit-artist.name)?.closest(form)?.submit();
});
await page.waitForTimeout(5000);

// 从重定向 URL 提取 MBID
const artistUrl = page.url();
const artistMbid = artistUrl.match(/artist\/([a-f0-9-]{36})/)?.[1];
console.log(艺术家 MBID:, artistMbid);

await browser.close();

完成后

向用户报告艺术家 MBID 和链接。存储 MBID — 添加发行版时需要。

步骤 3:添加发行版

每个发行版都遵循此相同流程,无论之前发生了什么(登录、艺术家创建、之前的发行版)。每个都是一个全新的 Playwright 脚本。

表单字段 ID(供参考)

字段ID
标题name文本
艺术家
ac-source-single-artist | 文本(自动补全) | | 发行组 | release-group | 文本(自动补全) | | 主要类型 | primary-type | 1=专辑, 2=单曲, 3=EP | | 状态 | status | 1=官方 | | 语言 | language | 120=英语, 145=德语 | | 文字 | script | 28=拉丁, 12=西里尔 | | 年份 | event-date-0 | YYYY | | 月份 | .partial-date-month | MM | | 日期 | .partial-date-day | DD | | 国家 | country-0 | 240=[全球] | | 厂牌 | label-0 | 文本(自动补全) | | 条形码 | barcode | 文本 | | 无条形码 | no-barcode | 复选框 | | 包装 | packaging | 7=无 |

已知陷阱

  1. 1. 发行组自动补全会阻塞表单。 填写标题并选择艺术家后,发行组字段会自动搜索并打开一个弹出对话框(添加介质),使所有其他表单字段对 Playwright 不可见(offsetParent = null,零大小矩形)。在与其他字段交互之前,必须关闭此对话框。
  1. 2. 艺术家自动补全可能匹配错误实体。 输入The Bride Wore Black并按 ArrowDown+Enter 可能会选择一个名称相似的发行组或不同的艺术家。在自动补全字段中使用 MBID 进行精确匹配。
  1. 3. React 选择框在不可见时不会响应 page.selectOption()。 改用带有原生设置器的 evaluate。
  1. 4. 曲目解析器对话框 vs 添加介质对话框。 曲目解析器在 jQuery UI 对话框中打开。可能有多个对话框同时打开。始终通过对话框标题文本定位。
  1. 5. 曲目解析器可能重复曲目。 解析可能会产生重复条目。解析后始终验证曲目数量。

脚本结构

javascript
// ... 浏览器启动 + 登录(步骤 1)...

// 导航到空的添加发行版表单
await page.goto(https://musicbrainz.org/release/add, {
waitUntil: networkidle, timeout: 30000
});
await page.waitForTimeout(3000);

// === 标题 ===
// 使用带有原生设置器的 evaluate — 键盘输入不稳定
await page.evaluate((title) => {
const el = document.getElementById(name);
const setter = Object.getOwnPropertyDescriptor(
window.HTMLInputElement.prototype, value
).set;
setter.call(el, title);
el.dispatchEvent(new Event(input, { bubbles: true }));
el.dispatchEvent(new Event(change, { bubbles: true }));
}, 专辑标题);
await page.waitForTimeout(500);

// === 艺术家 ===
// 粘贴 MBID 进行精确匹配(避免错误的自动补全选择)
const artist

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 musicbrainz-importer-1775937506 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 musicbrainz-importer-1775937506 技能

通过命令行安装

skillhub install musicbrainz-importer-1775937506

下载

⬇ 下载 musicbrainz_importer v1.1.0(免费)

文件大小: 15.61 KB | 发布时间: 2026-4-12 10:41

v1.1.0 最新 2026-4-12 10:41
Add extended metadata, README, LICENSE, homepage; dynamic Chromium detection; generic User-Agent

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部