diff --git a/README.md b/README.md
index 7d07a08..fd784d4 100644
--- a/README.md
+++ b/README.md
@@ -425,7 +425,7 @@ API 支持返回 Bilibili 标准 XML 格式的弹幕数据,通过查询参数
| DANMU_OUTPUT_FORMAT | 【可选】弹幕输出格式,默认为`json`,可选值:`json`(JSON格式)、`xml`(XML格式),支持通过查询参数`?format=xml`或`?format=json`覆盖此设置,优先级:查询参数 > 环境变量 > 默认值 |
| DANMU_SIMPLIFIED_TRADITIONAL | 【可选】弹幕简繁体转换设置:default(默认不转换)、simplified(繁转简)、traditional(简转繁) |
| DANMU_OFFSET | 【可选】弹幕时间偏移配置,用于解决弹幕与视频不同步的问题。格式:剧名:秒(全剧偏移)或 剧名/季:秒(整季偏移)或 剧名/季/集:秒(单集偏移),支持指定来源:剧名@来源:秒 或 剧名/季@来源1&来源2:秒(不指定来源则对所有来源生效),多条用逗号分隔。例如:`overlord/S01:90, re-zero/S02@bilibili:120, re-zero/S02/E03@dandan&bilibili:10`。正数表示弹幕延后(向右),负数表示弹幕提前(向左)。支持百分比模式,在路径/来源末尾添加 `%`,例如:`东方/S03/E02@tencent%:11`,按 `原时间 * (视频时长 + 偏移秒数) / 视频时长` 计算新的弹幕发送时间。 |
-| PROXY_URL | 【可选】代理/反代地址,目前只对巴哈姆特、TMDB API、bilibili生效,支持格式:
正常代理:`http://127.0.0.1:7890`
万能反代:`@http://127.0.0.1`
特定反代:`源字段@http://127.0.0.1`,目前支持的字段有:`bahamut,tmdb,bilibili`(bilibili字段会启用阿b的港澳台番剧的搜索与获取)
混合配置/示例:`http://你的代理地址:28233,bahamut@你的巴哈反代地址,tmdb@你的tmdb反代地址,@你的万能反代地址`
优先级:特定反代 > 万能反代 > 正常代理,高优先级覆盖低优先级使用。
(注意:如果巴哈姆特请求不通,会拖慢搜索返回速度,如需使用bahamut源请在SOURCE_ORDER环境变量中手动添加`bahamut`)如果你使用docker部署并且访问不了bahamut源,请配置代理地址或者反代([Netlify反代教程](https://github.com/wan0ge/bahamut-api-proxy));vercel/netlify/cf中理应都自然能联通,不用填写 |
+| PROXY_URL | 【可选】代理/反代地址,目前只对巴哈姆特、TMDB API、bilibili、animeko生效,支持格式:
正常代理:`http://127.0.0.1:7890`
万能反代:`@http://127.0.0.1`
特定反代:`源字段@http://127.0.0.1`,目前支持的字段有:`bahamut,tmdb,bilibili,animeko`(bilibili字段会启用阿b的港澳台番剧的搜索与获取)
混合配置/示例:`http://你的代理地址:28233,bahamut@你的巴哈反代地址,tmdb@你的tmdb反代地址,@你的万能反代地址`
优先级:特定反代 > 万能反代 > 正常代理,高优先级覆盖低优先级使用。
(注意:如果巴哈姆特请求不通,会拖慢搜索返回速度,如需使用bahamut源请在SOURCE_ORDER环境变量中手动添加`bahamut`)如果你使用docker部署并且访问不了 bahamut / animeko 源或 TMDB API ,请配置代理/反代地址(animeko 也可通过开启 Bangumi Data 解决)([Netlify反代教程](https://github.com/wan0ge/bahamut-api-proxy));vercel/netlify/cf中理应都自然能联通,不用填写 |
| TMDB_API_KEY | 【可选】TMDB API Key地址,目前只对巴哈姆特生效,配置后并行从TMDB获取日语原名搜索巴哈(如果TMDB条目类型不是动画或制作地区不是jp则不会进行巴哈搜索)可以解决巴哈译名不同导致的搜索无结果问题,例如大陆常用译名`间谍过家家`在巴哈译名为`間諜家家酒`,正常搜索无法搜索到,配置后可以解决这一问题但会稍微影响请求速度,[TMDBAPI](https://www.themoviedb.org/settings/api)获取方法参考:[TMDB API Key申请 - 绿联NAS私有云](https://www.ugnas.com/tutorial-detail/id-226.html) |
| RATE_LIMIT_MAX_REQUESTS | 【可选】限流配置:1分钟内同一IP最大请求次数,默认为`3`,设置为`0`表示不限流 |
| IP_BLACKLIST | 【可选】IP 黑名单列表,命中则拒绝请求。支持逗号/分号/换行分隔,支持 `/regex/` 或 `/regex/i` 正则,支持 IPv4/IPv6 CIDR,例如:`192.168.1.10,10.0.0.0/24,2001:db8::/64,/^203\.0\.113\./` |
@@ -677,7 +677,7 @@ API 支持返回 Bilibili 标准 XML 格式的弹幕数据,通过查询参数
- cloudflare貌似有单次请求数量限制,会导致后半部分没有弹幕。
- 如果想更换兜底第三方弹幕服务器,请添加环境变量`OTHER_SERVER`,示例`https://api.danmu.icu`。
- 如果想使用自定义弹幕源,请添加环境变量`CUSTOM_SOURCE_API_URL`,并在`SOURCE_ORDER`环境变量中添加`custom`源。
-- 如果想启用bilibili港澳台番剧弹幕源,请添加环境变量`PROXY_URL`并填写`bilibili@`字段的解析/反代服务地址,示例:`bilibili@https://233.233.233`,支持部分[公共解析服务器](https://github.com/yujincheng08/BiliRoaming/wiki/%E5%85%AC%E5%85%B1%E8%A7%A3%E6%9E%90%E6%9C%8D%E5%8A%A1%E5%99%A8),另外港澳台区域搜索最好在`BILIBILI_COOKIE`环境变量中加入包含`bili_jct`或`access_key`字段的cookie使用App接口,如果没有会使用不稳定的web接口进行搜索。(如果你填写的服务器遇到了App接口报错说明不支持App接口,Web接口报错-500、502正常,风控严重,但只要一直搜索总会成功)
+- 如果想搜索bilibili港澳台番剧,请开启`Bangumi Data`匹配或添加环境变量`PROXY_URL`并填写`bilibili@`字段的解析/反代服务地址,示例:`bilibili@https://233.233.233`,支持部分[公共解析服务器](https://github.com/yujincheng08/BiliRoaming/wiki/%E5%85%AC%E5%85%B1%E8%A7%A3%E6%9E%90%E6%9C%8D%E5%8A%A1%E5%99%A8),另外港澳台区域搜索最好在`BILIBILI_COOKIE`环境变量中加入包含`bili_jct`或`access_key`字段的cookie使用App接口,如果没有会使用不稳定的web接口进行搜索。(如果你填写的服务器遇到了App接口报错说明不支持App接口,Web接口报错-500、502正常,风控严重,但只要一直搜索总会成功)
- 如果想更换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不稳定,当然最稳定还是自己本地docker部署最佳。
diff --git a/config/.env.example b/config/.env.example
index ca0cb44..723aa68 100644
--- a/config/.env.example
+++ b/config/.env.example
@@ -258,8 +258,9 @@ USE_BANGUMI_DATA=false
# - 设置为巴哈反代为 bahamut@http://proxy-server:port 或 bahamut@https://proxy-server
# - 设置为TMDB反代为 tmdb@http://proxy-server:port 或 tmdb@https://proxy-server
# - 设置为bilibili反代为 bilibili@http://proxy-server:port 或 bilibili@https://proxy-server
-# 说明:目前只对巴哈姆特、TMDB API、bilibili生效
-# 如果使用 Docker 部署并且访问不了 bahamut 源或 TMDB API ,请配置代理/反代地址
+# - 设置为animeko反代为 animeko@http://proxy-server:port 或 animeko@https://proxy-server
+# 说明:目前只对巴哈姆特、TMDB API、bilibili、animeko生效
+# 如果使用 Docker 部署并且访问不了 bahamut / animeko 源或 TMDB API ,请配置代理/反代地址(animeko 也可通过开启 Bangumi Data 解决)
# 如果想启用B站港澳台番剧的弹幕搜索与获取请配置反代/解析服务器地址
# 反代教程参考:https://github.com/wan0ge/bahamut-api-proxy
# PROXY_URL=
diff --git a/danmu_api/configs/globals.js b/danmu_api/configs/globals.js
index 6a0a86d..1e47ca4 100644
--- a/danmu_api/configs/globals.js
+++ b/danmu_api/configs/globals.js
@@ -105,6 +105,9 @@ export const Globals = {
} else if (conf.startsWith('bilibili@') && hostname.includes('bilibili')) {
specificProxy = conf.substring(9);
break;
+ } else if (conf.startsWith('animeko@') && (hostname.includes('animeko') || hostname.includes('bgm.tv'))) {
+ specificProxy = conf.substring(8);
+ break;
} else if (conf.startsWith('@') && !universalProxy) {
universalProxy = conf.substring(1);
} else if (!conf.includes('@') && !forwardProxy) {
diff --git a/danmu_api/sources/animeko.js b/danmu_api/sources/animeko.js
index 610d15f..b0c4154 100644
--- a/danmu_api/sources/animeko.js
+++ b/danmu_api/sources/animeko.js
@@ -13,17 +13,23 @@ import { searchBangumiData } from '../utils/bangumi-data-util.js';
// =====================
// 接口健康状态缓存 (全局共享,跨请求持久化,实现业务级智能路由)
-// 链路层级规范: Danmu (GLOBAL -> CN)
+// 根据部署时区动态确定节点优先级,并记录当前健康的节点 URL
const API_HEALTH = {
- danmu: 'GLOBAL'
+ danmu: null,
+ subject: null
};
+// Animeko 详情数据短效缓存
+const SUBJECT_CACHE = new Map();
+const SUBJECT_CACHE_TTL = 3 * 60 * 1000; // 缓存有效期:3 分钟 (180000 毫秒)
+const SUBJECT_CACHE_MAX_SIZE = 100; // 最大缓存条目数
+
/**
- * Animeko 源适配器 (基于 Bangumi API V0)
+ * Animeko 源适配器 (基于 Bangumi API 搜索 + Animeko API 详情)
* 提供深度元数据搜索、结果过滤及条目关系检测功能
*/
export default class AnimekoSource extends BaseSource {
-
+
/**
* 获取标准 HTTP 请求头
* @returns {Object} 请求头对象
@@ -35,6 +41,110 @@ export default class AnimekoSource extends BaseSource {
};
}
+ /**
+ * 为 Bangumi API 搜索请求应用代理(Animeko API 不走代理)
+ */
+ _applyProxyForSearch(targetUrl) {
+ return globals.makeProxyUrl(targetUrl);
+ }
+
+ /**
+ * 动态获取基于部署时区的 Animeko 节点优先级列表 (完全反转官方逻辑)
+ * @returns {Array} 节点 URL 数组
+ */
+ _getAnimekoServerPriority() {
+ // 获取当前运行环境的时区偏移 (分钟),UTC+8 为 -480
+ const isUTC8 = new Date().getTimezoneOffset() === -480;
+
+ if (isUTC8) {
+ // 原中国时区 (UTC+8) 优先级: api.animeko.org, danmaku-global.myani.org, danmaku-cn.myani.org, s1.animeko.openani.org
+ // 完全反转后优先级:
+ return [
+ "https://s1.animeko.openani.org",
+ "https://danmaku-cn.myani.org",
+ "https://danmaku-global.myani.org",
+ "https://api.animeko.org"
+ ];
+ } else {
+ // 原其他时区优先级: danmaku-global.myani.org, api.animeko.org, s1.animeko.openani.org, danmaku-cn.myani.org
+ // 完全反转后优先级:
+ return [
+ "https://danmaku-cn.myani.org",
+ "https://s1.animeko.openani.org",
+ "https://api.animeko.org",
+ "https://danmaku-global.myani.org"
+ ];
+ }
+ }
+
+ /**
+ * 通过 Animeko API 获取条目详情(含剧集与关联数据,智能路由降级)
+ * 使用短效缓存策略兼顾请求去重与动态数据(剧集)的时效性
+ * @param {number} subjectId 条目 ID
+ * @returns {Promise