Skip to content

一个人人都能部署的基于 js 的弹幕 API 服务器,支持爱优腾芒哔人弹幕直接获取,兼容弹弹play的搜索、详情查询和弹幕获取接口,并提供日志记录,支持vercel/cloudflare/docker/claw等部署方式,不用提前下载弹幕,没有nas或小鸡也能一键部署。

License

Notifications You must be signed in to change notification settings

S29-zg/danmu_api

 
 

Repository files navigation

Clash

LogVar 弹幕 API 服务器

GitHub GitHub forks GitHub Repo stars GitHub License Docker Image Version Docker Pulls telegram telegram


一个人人都能部署的基于 js 的弹幕 API 服务器,支持爱优腾芒哔人韩巴弹幕直接获取,兼容弹弹play的搜索、详情查询和弹幕获取接口规范,并提供日志记录,支持vercel/netlify/edgeone/cloudflare/docker/claw等部署方式,不用提前下载弹幕,没有nas或小鸡也能一键部署。

本项目仅为个人爱好开发,代码开源。如有任何侵权行为,请联系本人删除。

有问题提issue或 私信机器人 都ok。

新加了 tg频道 ,方便发送更新通知,以及群组,太多人私信咨询了,索性增加一个 互助群 ,大家有问题可以在群里求助。

请不要在国内媒体平台宣传本项目!

功能

  • API 接口
    • GET /api/v2/search/anime?keyword=${queryTitle}:根据关键字搜索动漫。
    • POST /api/v2/match:根据关键字匹配动漫,用于自动匹配。(已支持在match接口中通过@语法动态指定平台优先级,如赴山海 S01E28 @qiyi;已支持从网盘资源命名,如无忧渡.S01E01.2160p.WEB-DL.H265.DDP.5.1中提取 title/season/episode)
    • GET /api/v2/search/episodes:根据关键词搜索所有匹配的剧集信息。
    • GET /api/v2/bangumi/:animeId:获取指定动漫的详细信息。
    • GET /api/v2/comment/:commentId?format=json:获取指定弹幕评论,支持返回相关评论和字符转换。
    • GET /api/v2/comment?url=${videoUrl}&format=json:通过视频URL直接获取弹幕(兼容第三方弹幕服务器格式)。
    • GET /api/logs:获取最近的日志(最多 500 行,格式为 [时间戳] 级别: 消息)。
  • 弹幕格式输出:支持 JSON 和 XML 两种格式输出,通过以下方式配置:
    • 环境变量:DANMU_OUTPUT_FORMAT=json|xml(默认:json)
    • 查询参数:?format=xml?format=json(优先级最高)
    • 优先级:查询参数 > 环境变量 > 默认值
    • 示例:GET /api/v2/comment/10001?format=xml 返回 XML 格式弹幕
    • XML 格式说明:完全遵循 Bilibili 标准格式,8字段标准弹幕属性
  • 日志记录:捕获 console.log(info 级别)和 console.error(error 级别),JSON 内容格式化输出。
  • 智能缓存管理:支持内存缓存搜索结果和弹幕数据,避免短期内重复的不必要API请求。包括:
    • 搜索结果缓存(可通过 SEARCH_CACHE_MINUTES 配置,默认1分钟)
    • 弹幕缓存(可通过 COMMENT_CACHE_MINUTES 配置,默认5分钟)
    • 用户偏好记录(可通过 MAX_LAST_SELECT_MAP 配置,默认100条)
    • Redis 分布式缓存支持(可选)
  • 部署支持:支持本地运行、Docker 容器化、Vercel 一键部署、Netlify 一键部署、Edgeone 一键部署、Cloudflare 一键部署、Claw部署和 Docker 一键启动。
  • 手动选择记忆:支持记住之前搜索title时手动选择的anime,并在后续的match自动匹配时优选该anime【实验性】。
  • 手动搜索支持输入播放链接获取弹幕:支持手动搜索的播放器输入爱优腾芒哔播放链接可获取弹幕,如senplayer
  • 弹幕转换功能:支持通过环境变量配置弹幕转换规则,包括:
    • 将顶部和底部弹幕转换为浮动弹幕(CONVERT_TOP_BOTTOM_TO_SCROLL
    • 将彩色弹幕转换为纯白弹幕(CONVERT_COLOR_TO_WHITE
    • 解决部分播放器不支持顶部/底部弹幕和彩色弹幕的问题

前置条件

  • Node.js(v18.0.0 或更高版本;理论兼容更低版本,请自行测试)
  • npm
  • Docker(可选,用于容器化部署)

本地运行

  1. 克隆仓库

    git clone <仓库地址>
    cd <项目目录>
  2. 安装依赖

    npm install
  3. 配置应用(可选):

    本项目支持三种配置方式,优先级从高到低:

    1. 系统环境变量(最高优先级)
    2. .env 文件(中等优先级)- 复制 .env.example.env 并修改
    3. config.yaml 文件(最低优先级)- 复制 config.yaml.exampleconfig.yaml 并修改

    如果某个系统无法编辑 .env 文件,可以使用 config.yaml 文件替代。

  4. 启动服务器

    npm start

    服务器将在 http://{ip}:9321 运行,默认token是87654321

    热更新支持:修改 .envconfig.yaml 文件后,应用会自动检测并重新加载配置(无需重启应用)。

    或者使用下面的命令

    # 启动
    node ./danmu_api/server.js
    # 测试
    node --test ./danmu_api/worker.test.js
  5. 测试 API: 使用 Postman 或 curl 测试:

    • GET http://{ip}:9321/87654321
    • GET http://{ip}:9321/87654321/api/v2/search/anime?keyword=生万物
    • POST http://{ip}:9321/87654321/api/v2/match
    • GET http://{ip}:9321/87654321/api/v2/search/episodes?anime=生万物
    • GET http://{ip}:9321/87654321/api/v2/bangumi/1
    • GET http://{ip}:9321/87654321/api/v2/comment/1?format=json
    • GET http://{ip}:9321/87654321/api/v2/comment?url=https://v.qq.com/x/cover/xxx.html&format=json
    • GET http://{ip}:9321/87654321/api/logs

使用 Docker 运行

  1. 构建 Docker 镜像

    docker build -t danmu-api .
  2. 运行容器

    docker run -d -p 9321:9321 --name danmu-api -e TOKEN=87654321 danmu-api
    • 使用-e TOKEN=87654321设置TOKEN环境变量,覆盖Dockerfile中的默认值。
    • 或使用 --env-file .env 加载 .env 文件中的所有环境变量:docker run -d -p 9321:9321 --name danmu-api --env-file .env danmu-api

    热更新支持:如需支持环境变量热更新(修改 .env 文件后无需重启容器),请使用 Volume 挂载:

    docker run -d -p 9321:9321 --name danmu-api -v $(pwd)/.env:/app/.env --env-file .env danmu-api

    推荐:使用 docker compose 部署可以更方便地管理配置和支持热更新,详见下方"Docker 一键启动"部分。

  3. 测试 API: 使用 http://{ip}:9321/{TOKEN} 访问上述 API 接口。

Docker 一键启动 【推荐】

  1. 拉取镜像

    docker pull logvar/danmu-api:latest
  2. 运行容器

    docker run -d -p 9321:9321 --name danmu-api -e TOKEN=87654321 logvar/danmu-api:latest
    • 使用-e TOKEN=87654321设置TOKEN环境变量。
    • 或使用 --env-file .env 加载 .env 文件中的所有环境变量:docker run -d -p 9321:9321 --name danmu-api --env-file .env logvar/danmu-api:latest

    热更新支持:如需支持环境变量热更新(修改 .envconfig.yaml 文件后无需重启容器),请使用 Volume 挂载:

    docker run -d -p 9321:9321 --name danmu-api -v $(pwd)/.env:/app/.env -v $(pwd)/config.yaml:/app/config.yaml --env-file .env logvar/danmu-api:latest

    或使用 docker compose 部署(推荐,支持环境变量热更新):

    services:
      danmu-api:
        image: logvar/danmu-api:latest
        ports:
          - "9321:9321"
        # 热更新支持:挂载 .env 和 config.yaml 文件,修改后容器会自动重新加载配置(无需重启容器)
        volumes:
          - ./.env:/app/.env
          - ./config.yaml:/app/config.yaml
        restart: unless-stopped

    可以使用 watchtower 监控有新版本自动更新:

    services:
      watchtower:
        image: containrrr/watchtower
        container_name: watchtower-gx
        restart: always
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        environment:
          - TZ=Asia/Shanghai  # 保持时区正确
        command:
          - --cleanup         # 更新后清理旧镜像
          - --interval        # 间隔参数
          - "12600"           # 30分钟(1800秒),适合测试
          - danmu-api         # 监控的目标容器名
  3. 测试 API: 使用 http://{ip}:9321/{TOKEN} 访问上述 API 接口。

部署到 Vercel 【推荐】

一键部署

点击以下按钮即可将项目快速部署到 Vercel:

Deploy with Vercel

注意:请将按钮链接中的 https://github.com/huangxd-/danmu_api 替换为你的实际 Git 仓库地址。编辑 README.md 并更新链接后,推送到仓库,点击按钮即可自动克隆和部署。

  • 设置环境变量:部署后,在 Vercel 仪表板中:
    1. 转到你的项目设置。
    2. 在“Environment Variables”部分添加 TOKEN 变量,输入你的 API 令牌值。
    3. 保存更改并重新部署。
  • 示例请求:https://{your_domain}.vercel.app/87654321/api/v2/search/anime?keyword=子夜归

优化点

  • Settings > Functions > Advanced Setting > Function Region 切换为 新加坡/韩国/日本等,能提高访问速度,体验更优

    hk有可能访问不了360或其他源,可以尝试切其他region

  • vercel在国内被墙,请配合代理或绑定自定义域名使用

部署到 Netlify 【推荐】

一键部署

点击以下按钮即可将项目快速部署到 Netlify:

默认访问domain:https://{你的部署项目名}.netlify.app

  • 设置环境变量:部署后,在 Netlify 仪表板中:
    1. 点击Project configuration。
    2. 在“Environment variables”部分点击 “Add a variable” 添加 TOKEN 变量,输入你的 API 令牌值。
    3. 保存更改并重新部署。

部署到 腾讯云 edgeone pages

一键部署

使用 EdgeOne Pages 部署

注意:部署时请在环境变量配置区域填写你的TOKEN值,该变量将用于API服务的身份验证相关功能

示例请求:https://{your_domain}/{TOKEN}/api/v2/search/anime?keyword=子夜归确认是否部署成功

部署的时候项目加速区域最好设置为"全球可用区(不含中国大陆)",不然不绑定自定义域名貌似只能生成3小时的预览链接?相关文档

也可直接用国际站的部署按钮一键部署,默认选择"全球可用区(不含中国大陆)" 使用 EdgeOne Pages 部署

如果每次访问都遇到404等问题,可能是edgeone pages修改了访问策略,每次接口请求都转发到了新的环境,没有缓存,导致获取不到对应的弹幕,推荐用vercel/netlify部署。

解决方法:请配置环境变量UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKEN,开启upstash redis存储

部署到 Cloudflare

一键部署

点击以下按钮即可将项目快速部署到 Cloudflare:

Deploy to Cloudflare Workers

注意:请将按钮链接中的 https://github.com/huangxd-/danmu_api 替换为你的实际 Git 仓库地址。编辑 README.md 并更新链接后,推送到仓库,点击按钮即可自动克隆和部署。

  • 设置环境变量:部署后,在 Cloudflare 仪表板中:
    1. 转到你的 Workers 项目。
    2. 转到“Settings” > “Variables”。
    3. 添加 TOKEN 环境变量,输入你的 API 令牌值。
    4. 保存并部署。
  • 示例请求:https://{your_domain}.workers.dev/87654321/api/v2/search/anime?keyword=子夜归

手动部署

创建一个worker,将danmu_api/worker.js里的代码直接拷贝到你创建的worker.js里,然后点击部署。

cf部署可能不稳定,推荐用vercel/netlify部署。

API食用指南

支持 forward/senplayer/hills/小幻/yamby/eplayerx/afusekt 等支持弹幕API的播放器。

senplayer为例:

  1. 获取到部署之后的API地址,如 http://192.168.1.7:9321/87654321 ,其中87654321是默认token,如果有自定义环境变量TOKEN,请替换成相应的token
  2. 将API地址填入自定义弹幕API,在设置 - 弹幕设置 - 自定义弹幕API
  3. 播放界面点击弹幕按钮 - 搜索弹幕,选择你的弹幕API,会根据标题进行搜索,等待一段时间,选择剧集就行。

4. 现已支持手动搜索标题输入爱优腾芒哔播放链接获取弹幕。

XML 格式说明

API 支持返回 Bilibili 标准 XML 格式的弹幕数据,通过查询参数 ?format=xml 指定。

XML 格式示例

<?xml version="1.0" ?>
<i>
    <d p="5.0,5,25,16488046,1751533608,0,0,13190629936">有 162 条弹幕来袭~请做好准备🔥!</d>
    <d p="4.0,5,25,13818234,1751533608,0,0,84261947057">阿姐我来啦![打call了]</d>
    <d p="5.0,1,25,16488046,1751533608,0,0,33648506749">2025-07-02打卡</d>
</i>

属性 p 字段说明(8个字段,逗号分隔):

  1. 时间:弹幕出现时间(秒)
  2. 类型:1=滚动, 4=底部, 5=顶部
  3. 字体:字体大小(25=中, 18=小)
  4. 颜色:RGB 转十进制(16777215=白色)
  5. 时间戳:Unix 时间戳(秒)
  6. 弹幕池:弹幕池编号(通常为0)
  7. 用户Hash:用户唯一标识(数字格式)
  8. 弹幕ID:弹幕唯一编号(11位数字)

使用示例

  • 获取 JSON 格式:GET /api/v2/comment/10001
  • 获取 XML 格式:GET /api/v2/comment/10001?format=xml
  • 通过 URL 获取弹幕:GET /api/v2/comment?url=https://v.qq.com/x/cover/xxx.html&format=json

注意:

小幻在填写API的时候需要在API后面加上/api/v2,如http://192.168.1.7:9321/87654321/api/v2

(已对小幻做兼容,/api/v2可加可不加都可以正确处理)

小幻在使用时可能出现掉匹配无法加载弹幕的问题,详见这个issue,可以通过配置环境变量UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKEN,开启upstash redis存储解决

有很多人问FW能不能用,FW推荐直接使用插件,如果非要使用,则可以配合 https://raw.githubusercontent.com/huangxd-/ForwardWidgets/refs/heads/main/widgets.fwd 里的danmu_api插件使用

环境变量列表

变量名称 描述
TOKEN 【可选】自定义用户token,不填默认为87654321
OTHER_SERVER 【可选】兜底第三方弹幕服务器,不填默认为https://api.danmu.icu
VOD_SERVERS 【可选】VOD服务器列表,支持多个服务器并发查询,格式:名称@URL,名称@URL,...,示例:金蝉@https://zy.jinchancaiji.com,789@https://www.caiji.cyou,听风@https://gctf.tfdh.top,不填默认为金蝉@https://zy.jinchancaiji.com,789@https://www.caiji.cyou,听风@https://gctf.tfdh.top
VOD_RETURN_MODE 【可选】VOD返回模式,可选值:all(返回所有站点结果)、fastest(只返回最快的站点结果),默认为fastest。当配置多个VOD站点时,all模式会返回所有站点的结果(结果较多),fastest模式只返回首先响应成功的站点结果(结果较少,避免重复)
VOD_REQUEST_TIMEOUT 【可选】VOD服务器单个请求超时时间(毫秒),防止慢速或失效的采集站阻塞搜索,默认为10000(10秒),建议值:5000-15000。由于fastest模式只返回最快响应的站点,可以设置较大的超时时间给慢速站点更多机会
BILIBILI_COOKIE 【可选】b站cookie(填入后能抓取完整弹幕),如 buvid3=E2BCA ... eao6; theme-avatar-tip-show=SHOWED,请自行通过浏览器或抓包工具抓取,热心网友测试后,实际最少只需取 SESSDATA=xxxx 字段
YOUKU_CONCURRENCY 【可选】youku弹幕请求并发数,用于加快youku弹幕请求速度,不填默认为8,最高16
SOURCE_ORDER 【可选】源排序,用于按源对返回资源的排序(注意:先后顺序会影响自动匹配最终的返回),默认是360,vod,renren,hanjutv,表示360数据排在最前,hanjutv数据排在最后,示例:360,renren:只返回360数据和renren数据,且360数据靠前;当前可选择的源字段有 360,vod,douban,tencent,youku,iqiyi,imgo,bilibili,renren,hanjutv,bahamut
PLATFORM_ORDER 【可选】自动匹配优选平台,按顺序优先返回指定平台弹幕,默认为空,即返回第一个满足条件的平台,示例:bilibili1,qq,表示如果有b站的播放源,则优先返回b站的弹幕,否则就返回腾讯的弹幕,两者都没有,则返回第一个满足条件的平台;当前可选择的平台字段有 qiyi, bilibili1, imgo, youku, qq, renren, hanjutv, bahamut
EPISODE_TITLE_FILTER 【可选】剧集标题正则过滤,按正则关键字对剧集或综艺的集标题进行过滤,适用于过滤一些预告或综艺非正式集,只支持match自动匹配,默认值如下
ENABLE_EPISODE_FILTER 【可选】是否在手动选择接口中启用集标题过滤,默认为false(禁用),启用后 GET /api/v2/bangumi/{id} 和 GET /api/v2/search/anime 接口会过滤掉预告、花絮等特殊集,以及名称包含特殊关键词的动漫。
STRICT_TITLE_MATCH 【可选】是否启用严格标题匹配模式,默认为false(宽松模糊匹配),启用后只匹配标题开头或完全匹配的结果。例如:搜索"遮天"时,false会匹配"古惑仔3之只手遮天",true只匹配"遮天"、"遮天 第一季"等。可选值:truefalse
BLOCKED_WORDS 【可选】弹幕屏蔽词列表,默认为空,示例如下
GROUP_MINUTE 【可选】合并去重分钟数,表示按n分钟分组后对弹幕合并去重,默认为1,最大值为30,0表示不去重
CONVERT_TOP_BOTTOM_TO_SCROLL 【可选】是否将顶部和底部弹幕转换为浮动弹幕,默认为false(不转换),启用后顶部弹幕(ct=5)和底部弹幕(ct=4)会被转换为浮动弹幕(ct=1),可选值:truefalse
CONVERT_COLOR_TO_WHITE 【可选】是否将彩色弹幕转换为纯白弹幕,默认为false(不转换),启用后所有非白色的弹幕颜色会被转换为纯白色(16777215),可选值:truefalse
DANMU_OUTPUT_FORMAT 【可选】弹幕输出格式,默认为json,可选值:json(JSON格式)、xml(XML格式),支持通过查询参数?format=xml?format=json覆盖此设置,优先级:查询参数 > 环境变量 > 默认值
DANMU_SIMPLIFIED 【可选】是否将繁体弹幕转换为简体,目前只对巴哈姆特生效,默认为true(转换),可选值:false(不转换)
PROXY_URL 【可选】代理/反代地址,目前只对巴哈姆特和TMDB API生效,支持格式:
http://127.0.0.1:7890(正常代理)
@http://127.0.0.1(万能反代)
bahamut@http://127.0.0.1tmdb@http://127.0.0.1(特定反代)
http://你的代理地址:28233,bahamut@你的巴哈反代地址,tmdb@你的tmdb反代地址,@你的万能反代地址(混合配置)
优先级:特定反代 > 万能反代 > 正常代理,高优先级覆盖低优先级使用。
(注意:如果巴哈姆特请求不通,会拖慢搜索返回速度,如需使用bahamut源请在SOURCE_ORDER环境变量中手动添加bahamut)如果你使用docker部署并且访问不了bahamut源,请配置代理地址或者反代(Netlify反代教程);vercel/netlify/cf中理应都自然能联通,不用填写
TMDB_API_KEY 【可选】TMDB API Key地址,目前只对巴哈姆特生效,配置后并行从TMDB获取日语原名搜索巴哈(如果TMDB条目类型不是动画或制作地区不是jp则不会进行巴哈搜索)可以解决巴哈译名不同导致的搜索无结果问题,例如大陆常用译名间谍过家家在巴哈译名为間諜家家酒,正常搜索无法搜索到,配置后可以解决这一问题但会稍微影响请求速度,TMDBAPI获取方法参考:TMDB API Key申请 - 绿联NAS私有云
RATE_LIMIT_MAX_REQUESTS 【可选】限流配置:1分钟内同一IP最大请求次数,默认为3,设置为0表示不限流
LOG_LEVEL 【可选】日志级别,默认为info,可选值:error(仅错误)、warn(错误和警告)、info(所有日志),生产环境建议使用warn,调试时使用info
SEARCH_CACHE_MINUTES 【可选】搜索结果缓存时间(分钟),默认为1,避免短期内重复的不必要API请求,同时保证获取最新的结果列表,可根据需要调整:Vercel/Cloudflare建议1-5分钟,Docker可设置5-30分钟,设置为0表示不缓存
COMMENT_CACHE_MINUTES 【可选】弹幕缓存时间(分钟),默认为1,弹幕数据的缓存时间,独立于搜索结果缓存
REMEMBER_LAST_SELECT 【可选】是否记住手动选择结果,用于match自动匹配时优选上次的选择,默认为true,表示记住,请注意,该功能为实验性功能,会记住某个剧上次选择的结果作为下次自动匹配的优选,如不需要,请关闭
MAX_LAST_SELECT_MAP 【可选】最后选择映射缓存大小限制,默认为100,lastSelectMap最多保存的条目数,超过限制时删除最早的条目(FIFO),用于存储查询关键字上次选择的animeId
UPSTASH_REDIS_REST_URL 【可选】Upstash redis url,需配合UPSTASH_REDIS_REST_TOKEN使用,用于持久化存储,不会因为冷启动而丢失过去的查询信息(在cf/eo/claw上配置后应该能更稳定点,也能解决小幻掉匹配的问题,但会稍微影响请求速度),获取方法请参考:https://cloud.tencent.cn/developer/article/2424508
UPSTASH_REDIS_REST_TOKEN 【可选】Upstash redis token,需配合UPSTASH_REDIS_REST_URL使用,用于持久化存储,不会因为冷启动而丢失过去的查询信息(在cf/eo/claw上配置后应该能更稳定点,也能解决小幻掉匹配的问题,但会稍微影响请求速度),获取方法请参考:https://cloud.tencent.cn/developer/article/2424508
# EPISODE_TITLE_FILTER 
(||)?||(|vlog)?||vlog|reaction||(|)?|(|||)?|||()?|||访|(||)?|(|)?|()?|||(||||)?||||||||||||||||||||||||||||||NG|NG||||||||||||OST|MV|MV|||||||||访|访|访|访|访|访|访|()?||||Plus|||||||||||.{3,}|(?!.*(||)).{2,}|||top|||REACTION|VLOG|||||||||

# EPISODE_TITLE_FILTER'|'
|test
# BLOCKED_WORDS 
/.{20,}/,/^\d{2,4}[-/.]\d{1,2}[-/.]\d{1,2}([.]*)?$/,/^(?!+$)([a-zA-Z\u4e00-\u9fa5])\1{2,}/,/[0-9]+\.*[0-9]*\s*(w|)+\s*(\+|||)+/,/^[a-z]{6,}$/,/^(?:qwertyuiop|asdfghjkl|zxcvbnm)$/,/^\d{5,}$/,/^(\d)\1{2,}$/,/\d{1,4}/,/(20[0-3][0-9])/,/(0?[1-9]|1[0-2])/,/\d{1,2}[.-]\d{1,2}/,/[@#&$%^*+\|/\-_=<>°]/,/[\d]+/,/[\d]+/,/(|||||||||||||||||||||||||||||||||DVD||||||||||||||||||||||||tm||)/

# 
/.{20,}/  # 20
/^\d{2,4}[-/.]\d{1,2}[-/.]\d{1,2}([.])?$/  # 
/^(?!+$)([a-zA-Z\u4e00-\u9fa5])\1{2,}/  # 3
/[0-9]+.[0-9]\s(w|)+\s*(\+|||)+/  # 
/^[a-z]{6,}$/  # 6
/^(?:qwertyuiop|asdfghjkl|zxcvbnm)$/  # 
/^\d{5,}$/  # 5
/^(\d)\1{2,}$/  # 
/\d{1,4}/  # 1-4
/(20[0-3][0-9])/  # 2000-2039
/(0?[1-9]|1[0-2])/  # 
/\d{1,2}[.-]\d{1,2}/  # 
/[@#&$%^*+\|/\-_=<>°]/  # 
/[\d]+/  # 
/[\d]+/  # 
/(|||||||||||||||||||||||||||||||||DVD||||||||||||||||||||||||tm||)/  # 

采集源及对应平台列表

采集源 平台列表
360 qiyi, bilibili1, imgo, youku, qq
vod qiyi, bilibili1, imgo, youku, qq
douban qiyi, bilibili1, youku, qq
tencent qq
youku youku
iqiyi qiyi
imgo imgo
bilibili bilibili1
renren renren
hanjutv hanjutv
bahamut bahamut

项目结构

danmu_api/
├── .github/
│   └── workflows/
│       ├── docker-image.yml
│       └── sync_fork.yml # vercel自动同步配置文件
├── danmu_api/
│   └── apis/
│       └── dandan-api.js # 弹弹play兼容接口函数
│   └── configs/
│       ├── envs.js       # 环境变量处理脚本
│       └── globals.js    # 全局变量处理脚本
│   └── models/
│       └── dandan-model.js  # 弹弹play数据模型
│   └── sources/
│       ├── bahamut.js    # 巴哈姆特源
│       ├── base.js       # 弹幕源获取基类
│       ├── bilibili.js   # b站源
│       ├── douban.js     # 豆瓣源
│       ├── hanjutv.js    # 韩剧TV源
│       ├── iqiyi.js      # 爱奇艺源
│       ├── kan360.js     # 360看源
│       ├── mango.js      # 芒果TV源
│       ├── other.js      # 第三方弹幕服务器
│       ├── renren.js     # 人人视频源
│       ├── tencent.js    # 腾讯视频源
│       ├── vod.js        # vod源
│       └── youku.js      # 优酷源
│   └── utils/
│       ├── cache-util.js    # 缓存数据处理工具
│       ├── codec-util.js    # 编解码工具
│       ├── common-util.js   # 通用工具
│       ├── danmu-util.js    # 弹幕处理工具
│       ├── http-util.js     # 请求工具
│       ├── log-util.js      # 日志工具
│       ├── redis-util.js    # redis工具
│       ├── time-util.js     # 时间日期工具
│       ├── tmdb-util.js     # tmdb处理工具
│       └── zh-util.js       # 中文繁简转换工具
│   ├── esm-shim.js     # Node.js低版本兼容层
│   ├── server.js       # 本地node启动脚本
│   ├── worker.js       # 主 API 服务器代码
│   └── worker.test.js  # 测试文件
├── netlify/
│   └── functions/
│       └── api.js      # netlify 中间处理逻辑
├── node-functions/
│   ├── [[...path]]..js # edgeone pages 所有路由跳转指向index
│   └── index.js        # edgeone pages 中间处理逻辑
├── .env.example        # .env 配置文件示例
├── config.yaml.example # YAML 配置文件示例(无法编辑 .env 时使用)
├── .gitignore
├── Dockerfile
├── edgeone.json        # edgeone pages 配置文件
├── LICENSE
├── netlify.toml        # netlify 配置文件
├── package.json
├── README.md
├── vercel.json         # vercel 配置文件
└── wrangler.toml       # cloudflare worker 配置文件

注意事项

热更新相关

  • 本地运行:修改 .envconfig.yaml 文件后,应用会自动检测并重新加载配置(无需重启应用)。
  • Docker 部署:需要使用 Volume 挂载 .env 和/或 config.yaml 文件才能支持热更新。推荐使用 docker compose 部署(见"Docker 一键启动"部分),配置 Volume 后修改配置文件容器会自动重新加载配置。
  • Vercel/Netlify/Cloudflare:需要在平台的环境变量设置中修改,然后重新部署才能生效。
  • 配置优先级:系统环境变量 > .env 文件 > config.yaml 文件

其他注意事项

  • 日志存储在内存中,服务器重启后会清空。
  • /api/logs 中的 JSON 日志会格式化显示,带缩进以提高可读性。
  • 搜索结果和弹幕数据存储在内存中,服务器重启后会清空,可通过配置 UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKEN 启用 Redis 持久化存储。
  • 搜索结果缓存默认时间为 1 分钟,可通过环境变量 SEARCH_CACHE_MINUTES 调整(设置为 0 表示不缓存)。
  • 确保 package.json 中包含 node-fetch 依赖。
  • 一键部署需要将项目推送到公开的 Git 仓库(如 GitHub),并更新按钮中的仓库地址。
  • 运行 Docker 容器时,需通过 -e TOKEN=87654321 传递 TOKEN 环境变量。
  • cloudflare貌似被哔风控了。
  • 如果想更换兜底第三方弹幕服务器,请添加环境变量OTHER_SERVER,示例https://api.danmu.icu
  • 如果想更换vod站点,请添加环境变量VOD_SERVERS,示例金蝉@https://zy.jinchancaiji.com,789@https://www.caiji.cyou,听风@https://gctf.tfdh.top(支持多个服务器并发查询)。
  • 当配置多个VOD站点时,可通过VOD_RETURN_MODE环境变量控制返回结果方式:all(返回所有站点结果)或fastest(默认,只返回最快的站点结果,避免结果过多)。
  • 推荐vercel/netlify部署,cloudflare/edgeone/claw不稳定,当然最稳定还是自己本地docker部署最佳。
  • /api/v2/comment接口默认限流:1分钟内同一IP只能请求3次,可通过环境变量RATE_LIMIT_MAX_REQUESTS调整(设置为0表示不限流)。

关联项目

喂饭教程1:danmu_api vercel 自动同步部署方案 - 永远保持最新版本!实时同步原作者更新

喂饭教程2:logvar弹幕搭建教程(docker/claw)

喂饭教程3:使用Netlify反向代理巴哈姆特api,实现danmu_api项目国内直连获取巴哈姆特弹幕

部署完成后在播放器填写后弹幕未生效自主排查步骤

以API示例 http://192.168.1.7:9321/87654321 为例

  1. 首先确认你的api部署成功 访问 http://192.168.1.7:9321/87654321 有json输出
  2. 检查你在播放器的填写是否正确,有无多余空格等
  3. 播放器请求后,查看 http://192.168.1.7:9321/87654321/api/logs 日志,看请求是否有报错,比如有用户在自己软路由上搭建,但走了全局代理,导致人人等访问不了,请确保走直连
  4. 如果你播放的影片片名不规范,很可能搜不到,请确保片名规范

贡献者

contributors

📈项目 Star 数增长趋势

Star History

Star History Chart

About

一个人人都能部署的基于 js 的弹幕 API 服务器,支持爱优腾芒哔人弹幕直接获取,兼容弹弹play的搜索、详情查询和弹幕获取接口,并提供日志记录,支持vercel/cloudflare/docker/claw等部署方式,不用提前下载弹幕,没有nas或小鸡也能一键部署。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 99.9%
  • Dockerfile 0.1%