From e402f1f77c0b8a9b8f2a1adf1acb611f9b298d64 Mon Sep 17 00:00:00 2001 From: huangxd- <649924757@qq.com> Date: Fri, 27 Feb 2026 22:53:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=85=BE=E8=AE=AF=E6=BA=90/?= =?UTF-8?q?=E7=88=B1=E5=A5=87=E8=89=BA=E6=BA=90/=E4=BC=98=E9=85=B7?= =?UTF-8?q?=E6=BA=90/=E8=8A=92=E6=9E=9C=E6=BA=90/b=E7=AB=99=E6=BA=90/?= =?UTF-8?q?=E5=92=AA=E5=92=95=E6=BA=90/=E6=90=9C=E7=8B=90=E6=BA=90?= =?UTF-8?q?=E5=BC=B9=E5=B9=95=E7=82=B9=E8=B5=9E=E6=95=B0=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=20(#204)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修改搜索接口的titleMatches里的相似度阈值从原先>=80%改为>80% * 打印hanjutv搜索结果 * 增加 s5 解密后 打印 * 删除hanjutv打印 * 搜狐源增加弹幕点赞数显示 * 芒果源增加弹幕点赞数显示 * 腾讯源/爱奇艺源/优酷源/芒果源/b站源/咪咕源/搜狐源增加弹幕点赞数显示 * 恢复多余的修改 --- README.md | 4 +++- danmu_api/apis/system-api.js | 2 +- danmu_api/configs/globals.js | 2 +- danmu_api/sources/bilibili.js | 15 +++++++-------- danmu_api/sources/iqiyi.js | 3 +++ danmu_api/sources/mango.js | 1 + danmu_api/sources/migu.js | 3 ++- danmu_api/sources/sohu.js | 3 ++- danmu_api/sources/tencent.js | 2 ++ danmu_api/sources/youku.js | 1 + danmu_api/ui/template.js | 2 +- danmu_api/utils/cache-util.js | 7 ++++++- danmu_api/utils/common-util.js | 4 ++-- danmu_api/utils/danmu-util.js | 9 +++++---- 14 files changed, 37 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 1857c35..75da5f2 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ LogVar 弹幕 API 服务器 --- -一个人人都能部署的基于 js 的弹幕 API 服务器,支持爱优腾芒哔咪人韩巴狐乐西弹幕直接获取,兼容弹弹play的搜索、详情查询和弹幕获取接口规范,并提供日志记录,支持vercel/netlify/edgeone/cloudflare/docker/claw等部署方式,不用提前下载弹幕,没有nas或小鸡也能一键部署。 +一个人人都能部署的基于 js 的弹幕 API 服务器,支持爱优腾芒哔咪人韩巴狐乐西埋弹幕直接获取,兼容弹弹play的搜索、详情查询和弹幕获取接口规范,并提供日志记录,支持vercel/netlify/edgeone/cloudflare/docker/claw等部署方式,不用提前下载弹幕,没有nas或小鸡也能一键部署。 本项目仅为个人爱好开发,代码开源。如有任何侵权行为,请联系本人删除。 @@ -76,6 +76,7 @@ LogVar 弹幕 API 服务器 - 将顶部和底部弹幕转换为浮动弹幕(`CONVERT_TOP_BOTTOM_TO_SCROLL`) - 转换弹幕颜色为白色或彩色(`CONVERT_COLOR`) - 解决部分播放器不支持顶部/底部弹幕和彩色弹幕的问题 + - 增加点赞数显示,先去重再拼接点赞标记,点赞数缩写显示,≥5 才显示,避免低赞干扰 - **弹幕限制数量**:支持通过环境变量配置等间隔采样弹幕数量。 - **弹幕分片请求**: - `/api/v2/comment` 请求时支持定义 `segmentflag=true` 参数,用于请求弹幕分片列表 @@ -587,6 +588,7 @@ API 支持返回 Bilibili 标准 XML 格式的弹幕数据,通过查询参数 │ ├── cookie-util.js # b站 cookie获取工具 │ ├── danmu-util.js # 弹幕处理工具 │ ├── douban-util.js # 豆瓣API请求工具 +│ ├── hanjutv-util.js # 韩剧tv加解密工具 │ ├── http-util.js # 请求工具 │ ├── imdb-util.js # IMDB API请求工具 │ ├── log-util.js # 日志工具 diff --git a/danmu_api/apis/system-api.js b/danmu_api/apis/system-api.js index 5f7e0df..5801d37 100644 --- a/danmu_api/apis/system-api.js +++ b/danmu_api/apis/system-api.js @@ -75,7 +75,7 @@ export function handleConfig(hasPermission = false) { originalEnvVars: originalEnvVars, // 系统设置使用原始环境变量(已脱敏) hasAdminToken: hasAdminToken, // 添加admin token配置状态 repository: "https://github.com/huangxd-/danmu_api.git", - description: "一个人人都能部署的基于 js 的弹幕 API 服务器,支持爱优腾芒哔咪人韩巴狐乐西弹幕直接获取,兼容弹弹play的搜索、详情查询和弹幕获取接口规范,并提供日志记录,支持vercel/netlify/edgeone/cloudflare/docker/claw等部署方式,不用提前下载弹幕,没有nas或小鸡也能一键部署。", + description: "一个人人都能部署的基于 js 的弹幕 API 服务器,支持爱优腾芒哔咪人韩巴狐乐西埋弹幕直接获取,兼容弹弹play的搜索、详情查询和弹幕获取接口规范,并提供日志记录,支持vercel/netlify/edgeone/cloudflare/docker/claw等部署方式,不用提前下载弹幕,没有nas或小鸡也能一键部署。", notice: "本项目仅为个人爱好开发,代码开源。如有任何侵权行为,请联系本人删除。有问题提issue或私信机器人都ok,TG MSG ROBOT: [https://t.me/ddjdd_bot]; 推荐加互助群咨询,TG GROUP: [https://t.me/logvar_danmu_group]; 关注频道获取最新更新内容,TG CHANNEL: [https://t.me/logvar_danmu_channel]。" }); } diff --git a/danmu_api/configs/globals.js b/danmu_api/configs/globals.js index 384d89d..1ffa7ea 100644 --- a/danmu_api/configs/globals.js +++ b/danmu_api/configs/globals.js @@ -13,7 +13,7 @@ export const Globals = { accessedEnvVars: {}, // 静态常量 - VERSION: '1.15.1', + VERSION: '1.15.2', MAX_LOGS: 1000, // 日志存储,最多保存 1000 行 MAX_ANIMES: 100, MAX_RECORDS: 100, // 请求记录最大数量 diff --git a/danmu_api/sources/bilibili.js b/danmu_api/sources/bilibili.js index d054a5b..197576c 100644 --- a/danmu_api/sources/bilibili.js +++ b/danmu_api/sources/bilibili.js @@ -839,14 +839,13 @@ export default class BilibiliSource extends BaseSource { } formatComments(comments) { - // 弹幕繁体转简体 - if (globals.danmuSimplifiedTraditional === 'simplified') { - return comments.map(c => { - if (c.m) c.m = simplized(c.m); - return c; - }); - } - return comments; + return comments.map(c => { + if (globals.danmuSimplifiedTraditional === 'simplified') { + if (c.m) c.m = simplized(c.m); + } + c.like = c.like_num; + return c; + }); } // 构建代理URL diff --git a/danmu_api/sources/iqiyi.js b/danmu_api/sources/iqiyi.js index 736f959..9f1bed6 100644 --- a/danmu_api/sources/iqiyi.js +++ b/danmu_api/sources/iqiyi.js @@ -870,11 +870,13 @@ export default class IqiyiSource extends BaseSource { const danmaku = extract(xml, "content"); const showTime = extract(xml, "showTime"); const color = extract(xml, "color"); + const like = extract(xml, "likeCount"); contents.push(...danmaku.map((content, i) => ({ content, showTime: showTime[i], color: color[i], + like: parseInt(like[i]) || 0, }))); } @@ -900,6 +902,7 @@ export default class IqiyiSource extends BaseSource { content.color = parseInt(item["color"], 16); content.content = decodeHtmlEntities(item["content"]); content.size = 25; + content.like = item["like"]; return content; }); } diff --git a/danmu_api/sources/mango.js b/danmu_api/sources/mango.js index 7cb086d..74dba12 100644 --- a/danmu_api/sources/mango.js +++ b/danmu_api/sources/mango.js @@ -725,6 +725,7 @@ export default class MangoSource extends BaseSource { content.timepoint = item.time / 1000; content.content = item.content; content.uid = item.uid; + content.like = item.v2_up_count; return content; }); } diff --git a/danmu_api/sources/migu.js b/danmu_api/sources/migu.js index 8be85d5..87312f1 100644 --- a/danmu_api/sources/migu.js +++ b/danmu_api/sources/migu.js @@ -359,7 +359,8 @@ class MiguSource extends BaseSource { cid: Number(c.cid), p: `${c.playtime},1,${hexToInt(c.textcolor)},[migu]`, m: c.msg, - t: c.playtime + t: c.playtime, + like: c.praiseCount })); } diff --git a/danmu_api/sources/sohu.js b/danmu_api/sources/sohu.js index a5dcf37..455957e 100644 --- a/danmu_api/sources/sohu.js +++ b/danmu_api/sources/sohu.js @@ -512,7 +512,8 @@ export default class SohuSource extends BaseSource { cid: String(danmuId), p: pString, m: comment.c || '', - t: parseFloat(vtime) + t: parseFloat(vtime), + like: comment.fcount }; } catch (error) { log("error", `格式化弹幕失败: ${error.message}, 弹幕数据:`, comment); diff --git a/danmu_api/sources/tencent.js b/danmu_api/sources/tencent.js index c010718..b4cbbd9 100644 --- a/danmu_api/sources/tencent.js +++ b/danmu_api/sources/tencent.js @@ -616,6 +616,8 @@ export default class TencentSource extends BaseSource { } } + content.like = parseInt(item.up_count) || 0; + return content; }); } diff --git a/danmu_api/sources/youku.js b/danmu_api/sources/youku.js index f58ec7d..50df3cd 100644 --- a/danmu_api/sources/youku.js +++ b/danmu_api/sources/youku.js @@ -682,6 +682,7 @@ export default class YoukuSource extends BaseSource { else if (pos === 2) content.ct = 4; } content.content = item.content; + content.like = item.extFields.voteUp; return content; }); } diff --git a/danmu_api/ui/template.js b/danmu_api/ui/template.js index a65e064..eb5a5ef 100644 --- a/danmu_api/ui/template.js +++ b/danmu_api/ui/template.js @@ -303,7 +303,7 @@ export const HTML_TEMPLATE = /* html */ `