Baka 中文文档 下载 App

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"
    }
  }
}

必填字段

可选字段

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 适配器的优势

脚本 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 解码

开发调试流程

本地调试

  1. 在电脑上编写脚本(推荐 VS Code + JS 语法高亮)
  2. 放到 Baka 的脚本目录(Android: /Android/data/ani.baka/files/scripts/)
  3. 重启 Baka 或在源管理中刷新
  4. 打开 Baka 的开发者面板看日志(部分版本需要开启)
  5. 反复修改和测试

发布脚本

  1. 在 GitHub / Gitee 等平台创建仓库
  2. 发布 .js 或 .json 文件
  3. 提供 raw 链接或文件下载地址
  4. 在 Baka 中通过远程 URL 导入
  5. 社区成员通过同一地址导入,享受自动更新

脚本文档与帮助