Skip to content
 
 

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/cloudflare/docker/claw等部署方式,不用提前下载弹幕,没有nas或小鸡也能一键部署。

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

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

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

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

功能

  • API 接口
    • GET /api/v2/search/anime?keyword=${queryTitle}:根据关键字搜索动漫。
    • POST /api/v2/match:根据关键字匹配动漫,用于自动匹配。(目前已支持在match接口中通过@语法动态指定平台优先级,如赴山海 S01E28 @qiyi
    • GET /api/v2/search/episodes:根据关键词搜索所有匹配的剧集信息。
    • GET /api/v2/bangumi/:animeId:获取指定动漫的详细信息。
    • GET /api/v2/comment/:commentId?withRelated=true&chConvert=1:获取指定弹幕评论,支持返回相关评论和字符转换。
    • POST /api/v2/comment/by-url:通过视频URL直接获取弹幕。
    • GET /api/logs:获取最近的日志(最多 500 行,格式为 [时间戳] 级别: 消息)。
  • 日志记录:捕获 console.log(info 级别)和 console.error(error 级别),JSON 内容格式化输出。
  • 部署支持:支持本地运行、Docker 容器化、Vercel 一键部署、Cloudflare 一键部署和 Docker 一键启动。
  • 手动选择记忆:支持记住之前搜索title时手动选择的anime,并在后续的match自动匹配时优选该anime【实验性】。
  • 手动搜索支持输入播放链接获取弹幕:支持手动搜索的播放器输入爱优腾芒哔播放链接可获取弹幕,如senplayer

前置条件

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

本地运行

  1. 克隆仓库

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

    npm install
  3. 启动服务器

    npm start

    服务器将在 http://{ip}:9321 运行,默认token是87654321。 或者使用下面的命令

    # 启动
    node ./danmu_api/server.js
    # 测试
    node --test ./danmu_api/worker.test.js
  4. 测试 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?withRelated=true&chConvert=1
    • POST http://{ip}:9321/87654321/api/v2/comment/by-url
    • 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中的默认值。
  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环境变量。
    services:
      danmu-api:
        image: logvar/danmu-api:latest
        container_name: danmu-api
        ports:
          - "9321:9321"
        environment:
          - TOKEN=87654321  # 请将 87654321 替换为你想自定义的 Token 值
        restart: unless-stopped    # 可选配置,容器退出时自动重启(非必需,可根据需求删除)
    • 或使用docker compose部署。
    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         # 监控的目标容器名
    • 可以使用watchtower监控有新版本自动更新。
  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_domian}.vercel.app/87654321/api/v2/search/anime?keyword=子夜归

优化点

  • Settings > Functions > Advanced Setting > Function Region 切换为 Hong Kong,能提高访问速度,体验更优

    hk有可能访问不了360或其他源,可以尝试切其他region,如新加坡等

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

部署到 腾讯云 edgeone pages

一键部署

使用 EdgeOne Pages 部署

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

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

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

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

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

解决方法:请配置环境变量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_domian}.workers.dev/87654321/api/v2/search/anime?keyword=子夜归

手动部署

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

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

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. 现已支持手动搜索标题输入爱优腾芒哔播放链接获取弹幕。

注意:

小幻在填写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,...,示例:vod@https://www.caiji.cyou,vod2@https://zy.xmm.hk,不填默认为vod@https://www.caiji.cyou
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,tencent,renren,hanjutv,bahamut
PLATFORM_ORDER 【可选】自动匹配优选平台,按顺序优先返回指定平台弹幕,默认为空,即返回第一个满足条件的平台,示例:bilibili1,qq,表示如果有b站的播放源,则优先返回b站的弹幕,否则就返回腾讯的弹幕,两者都没有,则返回第一个满足条件的平台;当前可选择的平台字段有 qiyi, bilibili1, imgo, youku, qq, tencent, renren, hanjutv, bahamut
EPISODE_TITLE_FILTER 【可选】剧集标题正则过滤,按正则关键字对剧集或综艺的集标题进行过滤,适用于过滤一些预告或综艺非正式集,只支持match自动匹配,默认值如下
BLOCKED_WORDS 【可选】弹幕屏蔽词列表,默认为空,示例如下
GROUP_MINUTE 【可选】合并去重分钟数,表示按n分钟分组后对弹幕合并去重,默认为1,最大值为30,0表示不去重
PROXY_URL 【可选】代理地址,示例: http://127.0.0.1:7897 ,目前只对巴哈姆特生效(注意:如果巴哈姆特请求不通,会拖慢搜索返回速度,所以除vercel/cloudflare之外默认不开启bahamut源,开启请先在SOURCE_ORDER环境变量中添加bahamut)如果你使用docker部署并且访问不了bahamut源,请配置代理地址;vercel/cf中理应都自然能联通,不用填写
RATE_LIMIT_MAX_REQUESTS 【可选】限流配置:1分钟内同一IP最大请求次数,默认为3,设置为0表示不限流
UPSTASH_REDIS_REST_URL 【可选】update redis url,需配合UPSTASH_REDIS_REST_TOKEN使用,用于持久化存储,不会因为冷启动而丢失过去的查询信息(在cf/eo/claw上配置后应该能更稳定点,也能解决小幻掉匹配的问题,但会稍微影响请求速度),获取方法请参考:https://cloud.tencent.cn/developer/article/2424508
UPSTASH_REDIS_REST_TOKEN 【可选】update redis token,需配合UPSTASH_REDIS_REST_URL使用,用于持久化存储,不会因为冷启动而丢失过去的查询信息(在cf/eo/claw上配置后应该能更稳定点,也能解决小幻掉匹配的问题,但会稍微影响请求速度),获取方法请参考:https://cloud.tencent.cn/developer/article/2424508
# EPISODE_TITLE_FILTER 
(||)?||||vlog|reaction|||||||||访||||||||||||||||||||||||||||||||||||NG|NG|NG||||||||||||OST|MV|MV|||||||||访|访|访|访|访|访|||||||Plus|||||||.{2,}|(?!.*(||)).{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||)/  # 

项目结构

danmu_api/
├── .github/
│   └── workflows/
│       ├── docker-image.yml
│       └── sync_fork.yml # vercel自动同步配置文件
├── danmu_api/
│   ├── esm-shim.js     # Node.js低版本兼容层
│   ├── server.js       # 本地node启动脚本
│   ├── worker.js       # 主 API 服务器代码
│   ├── worker.test.js  # 测试文件
├── node-functions/
│   ├── [[...path]]..js # edgeone pages 所有路由跳转指向index
│   └── index.js        # edgeone pages 中间处理逻辑
├── .gitignore
├── Dockerfile
├── edgeone.json        # edgeone pages 配置文件
├── LICENSE
├── package.json
├── README.md
├── vercel.json         # vercel 配置文件
└── wrangler.toml       # cloudflare worker 配置文件

注意事项

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

关联项目

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

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

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

以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

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages