JS/JSON 适配器格式说明——脚本开发者的参考
两种格式的选择
Baka 的动态脚本适配器支持两种格式,选择哪种取决于你的需求:
| 格式 | 适合场景 | 学习曲线 |
|---|---|---|
| JavaScript (.js) | 复杂数据解析、需要 HTTP 请求、加密解密逻辑 | 需要会 JS |
| JSON (.json) | 简单声明式配置、固定 API、不需要复杂逻辑 | 低,会 JSON 就行 |
判断标准:你需要写代码才能实现功能 → JS;只需要声明接口和字段映射 → JSON。
JSON 适配器(声明式)
最简单的适配器格式,一个 JSON 文件搞定:
{
"name": "示例番剧源",
"version": "1.0.0",
"author": "作者名",
"api": {
"base_url": "https://example.com/api",
"search": {
"url": "/search?keyword={keyword}",
"method": "GET"
},
"detail": {
"url": "/anime/{id}",
"method": "GET"
},
"play_url": {
"url": "/episode/{episode_id}/play",
"method": "GET"
}
},
"fields": {
"search_result": {
"list_path": "data.items",
"name": "title",
"id": "anime_id",
"cover": "poster_url"
},
"detail": {
"title": "data.name",
"episodes": "data.episodes",
"episode_id": "id",
"episode_name": "name"
}
}
}
必填字段
name:脚本名称(在 Baka 中显示)version:版本号(用于更新检查)author:作者(可联系)api:接口定义(至少要有 search 接口)
可选字段
icon:源图标 URL 或本地路径description:功能描述update_url:自动更新地址supports_danmaku:是否支持弹幕(true/false)
JavaScript 适配器(编程式)
JS 适配器可以做更复杂的事情:
// 适配器入口
module.exports = {
name: "示例番剧源 Pro",
version: "1.1.0",
// 搜索番剧
async function search(keyword, page) {
const response = await fetch(
`https://example.com/api/search?q=${keyword}&page=${page}`,
{
headers: {
"User-Agent": "BakaPlayer/5.0"
}
}
);
const data = await response.json();
return data.items.map(item => ({
id: item.anime_id,
name: item.title,
cover: item.poster,
updateTime: item.last_update,
source: "pro"
}));
},
// 获取番剧详情
async function getDetail(animeId) {
const response = await fetch(`https://example.com/api/anime/${animeId}`);
const data = await response.json();
return {
title: data.name,
description: data.description,
episodes: data.episodes.map(ep => ({
id: ep.id,
name: `第${ep.number}集 ${ep.title}`,
updateTime: ep.update_date
}))
};
},
// 获取播放地址
async function getPlayUrl(episodeId) {
const response = await fetch(`https://example.com/api/play/${episodeId}`);
const data = await response.json();
return {
url: data.play_url,
headers: data.headers || {},
referer: data.referer || ""
};
},
// 获取弹幕(可选)
async function getDanmaku(animeId, episodeId) {
// 从 BGM 弹幕库或其他源获取
return null; // 返回 null 表示不提供弹幕,Baka 会用默认方式加载
}
};
JS 适配器的优势
- 自定义 HTTP 请求(带 Header、Cookie、Token 等)
- 解析复杂的 HTML 页面(可以用正则或 DOM 解析)
- 需要加密解密的 API 对接
- 多次请求组合(先请求 A 获取 token,再用 token 请求 B)
- 动态生成视频地址(某些源会动态拼接 URL)
脚本 API 函数
Baka 提供给脚本的内置函数:
| 函数 | 说明 |
|---|---|
fetch(url, options) | HTTP 请求(类似浏览器 fetch) |
console.log(msg) | 调试日志(在 Baka 开发者面板可见) |
storage.get(key) | 读取本地存储(保存用户配置) |
storage.set(key, value) | 写入本地存储 |
crypto.md5(str) | MD5 哈希 |
crypto.sha1(str) | SHA1 哈希 |
utils.parseHtml(html, selector) | HTML 解析(简单版本) |
utils.decodeBase64(str) | Base64 解码 |
开发调试流程
本地调试
- 在电脑上编写脚本(推荐 VS Code + JS 语法高亮)
- 放到 Baka 的脚本目录(Android:
/Android/data/ani.baka/files/scripts/) - 重启 Baka 或在源管理中刷新
- 打开 Baka 的开发者面板看日志(部分版本需要开启)
- 反复修改和测试
发布脚本
- 在 GitHub / Gitee 等平台创建仓库
- 发布
.js或.json文件 - 提供 raw 链接或文件下载地址
- 在 Baka 中通过远程 URL 导入
- 社区成员通过同一地址导入,享受自动更新
脚本文档与帮助
- Baka 官方仓库有脚本开发指南(部分版本)
- 社区分享的脚本通常附带简要说明
- 遇到问题可以在相关社区交流
- 建议先参考已有脚本的写法再自己写