gacha-calendar-core 0.11.0 → 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core.mjs +32 -12
- package/package.json +1 -1
package/core.mjs
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// 用途:缓存里记录"这份数据是哪版插件产出的"。更新插件后首次启动,据此**强制**刷新一次
|
|
5
5
|
// (不看自动刷新开关)——因为有些改动(悬停格式、来源地址、样式、解析器)不刷新就看不到效果。
|
|
6
6
|
// 写入时机见 engine-api.js 的 refresh();判定见 60-helpers.js 的 autoRefreshPlan()。
|
|
7
|
-
const PLUGIN_VERSION = "0.11.
|
|
7
|
+
const PLUGIN_VERSION = "0.11.2";
|
|
8
8
|
//#endregion
|
|
9
9
|
|
|
10
10
|
//#region config
|
|
@@ -3971,14 +3971,23 @@ EVENT_FETCHERS["wuwa"] = {
|
|
|
3971
3971
|
}
|
|
3972
3972
|
|
|
3973
3973
|
|
|
3974
|
-
// 从 fz.wiki
|
|
3975
|
-
//
|
|
3974
|
+
// 从 fz.wiki 的数据里抽出 contentJson 的 JSON 对象。两种输入都要支持:
|
|
3975
|
+
// ① 活动页 HTML(Next.js App Router):数据在 `self.__next_f.push([1,"..."])` 的 RSC 流里;
|
|
3976
|
+
// ② REST API 响应(`api.fz.wiki`):**直接就是 JSON**,没有 `__next_f` 外壳。
|
|
3977
|
+
// 2026-10-04:fz.wiki 的活动页已不再在 HTML/RSC 里输出卡片数据(页面只剩导航外壳,
|
|
3978
|
+
// 实测 `endfieldCardActivityIndex` / `wikiCardItem` 在页面里 **0 处**),数据改由 API 提供
|
|
3979
|
+
// (`revision.contentJson`,结构与原来的 RSC payload 一致)。所以 fetcher 改走 API,
|
|
3980
|
+
// 这里补一条"输入本来就是 JSON"的分支;旧格式分支保留,页面若改回来也照样能用。
|
|
3976
3981
|
function extractFzContentJson(html) {
|
|
3977
|
-
const re = /self\.__next_f\.push\(\[1,"((?:[^"\\]|\\.)*)"\]\)/g;
|
|
3978
3982
|
let full = "";
|
|
3979
|
-
|
|
3980
|
-
|
|
3981
|
-
|
|
3983
|
+
if (html.includes("self.__next_f.push")) {
|
|
3984
|
+
const re = /self\.__next_f\.push\(\[1,"((?:[^"\\]|\\.)*)"\]\)/g;
|
|
3985
|
+
let m;
|
|
3986
|
+
while ((m = re.exec(html))) {
|
|
3987
|
+
try { full += JSON.parse('"' + m[1] + '"'); } catch { full += m[1]; }
|
|
3988
|
+
}
|
|
3989
|
+
} else {
|
|
3990
|
+
full = html;
|
|
3982
3991
|
}
|
|
3983
3992
|
if (!full.includes('"contentJson"')) return null;
|
|
3984
3993
|
const ci = full.indexOf('"contentJson"');
|
|
@@ -4003,7 +4012,8 @@ EVENT_FETCHERS["wuwa"] = {
|
|
|
4003
4012
|
// ③ endfieldCardActivityIndex.content[] → wikiCardItem.attrs.data(当前线上结构)
|
|
4004
4013
|
// 只收"有明确起止"的活动(timeRanges 末段的 open+close 都非空),
|
|
4005
4014
|
// 与旧行为一致——无 close 的是新手/每周/引导等常驻活动,不当作当期活动。
|
|
4006
|
-
// 时间格式 "2026/9/2 7:00:00"
|
|
4015
|
+
// 时间格式 "2026/9/2 7:00:00";悬停按**结束时间升序**逐行,外显另由 `pickEventPrimary`
|
|
4016
|
+
// 挑选(叙事/挑战类优先于签到/减耗类),不是简单的"第一条"。
|
|
4007
4017
|
function parseFzWikiActivities(html, now, tz) {
|
|
4008
4018
|
const obj = extractFzContentJson(html);
|
|
4009
4019
|
if (!obj) return null;
|
|
@@ -4064,12 +4074,22 @@ EVENT_FETCHERS["wuwa"] = {
|
|
|
4064
4074
|
}
|
|
4065
4075
|
|
|
4066
4076
|
|
|
4067
|
-
// 终末地(FZ Wiki 经 host 代理,无 CORS
|
|
4077
|
+
// 终末地(FZ Wiki 经 host 代理,无 CORS):活动排期。
|
|
4068
4078
|
// 三态口径:有当期活动 → 数据;解析到活动但没有当期 → null(nomatch);
|
|
4069
|
-
//
|
|
4079
|
+
// 结构变了/一条都解析不出 → parseFzWikiActivities 抛错(down)。
|
|
4080
|
+
// 2026-10-04:fz.wiki 把活动数据从页面 HTML/RSC 移到了 REST API(页面只剩外壳)→
|
|
4081
|
+
// 改为请求 `api.fz.wiki/api/v1/articles/by-title?ns=0&title=<页面名>&withRevision=1`。
|
|
4082
|
+
// 条目里的 `eventUrl` 仍是**给人看的页面地址**(设置页显示它);标题由该地址的路径推出,
|
|
4083
|
+
// 所以用户把 eventUrl 换成别的 wiki 页也能用。若直接把 eventUrl 配成 API 地址,则原样使用。
|
|
4070
4084
|
async function fetchFzWikiEndfield(pageUrl, _signal, tz, now = nowMs()) {
|
|
4071
|
-
|
|
4072
|
-
|
|
4085
|
+
let url = pageUrl;
|
|
4086
|
+
if (!/api\.fz\.wiki/.test(pageUrl)) {
|
|
4087
|
+
const m = /\/wiki\/([^/?#]+)/.exec(pageUrl);
|
|
4088
|
+
const title = m ? decodeURIComponent(m[1]) : "活动";
|
|
4089
|
+
url = "https://api.fz.wiki/api/v1/articles/by-title?ns=0&title=" + encodeURIComponent(title) + "&withRevision=1";
|
|
4090
|
+
}
|
|
4091
|
+
const text = await proxyFetchText(url, "https://fz.wiki/");
|
|
4092
|
+
return parseFzWikiActivities(text, now, tz);
|
|
4073
4093
|
}
|
|
4074
4094
|
|
|
4075
4095
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gacha-calendar-core",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.2",
|
|
4
4
|
"description": "二游活动/卡池排期抓取核心:11 款游戏的来源注册表 + 解析器 + 刷新编排 + 缓存降级。零依赖、零宿主环境依赖,任何 JS 运行时(浏览器扩展 background / Tauri / JavaScriptCore / ArkTS 嵌入式引擎)都能跑。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./core.mjs",
|