User:Kurgenera/killRSP/fetch.js
外观
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
致来访者:
在您计划向本页面提交任何更改前,请知悉维基百科社群关于尊重他人专属空间的编辑指引。除非您当前正在执行符合社群广泛共识的头衔授予,或者在特定置顶区域完成必要的站务签名,否则请勿对本页面的主体内容做出任何形式的文本干扰。此外,本页面承载的全部原创文字均已基于知识共享署名-相同方式共享4.0国际协议进行公开授权,在后续任何形式的重用、分发或衍生过程中,均请严格注意并切实履行您的署名义务与授权原则。
另请注意User:MonoFinet不要搬运和使用本人的任何自动化工具,否则本人对原工具进行快速删除处理。
/**
* KillRSP 数据工厂
* 负责抓取、去重、预清洗并提供统一的数据接口
*/
window.KillRSPLoader = (function() {
const api = new mw.Api();
const request = async (template) => {
const resp = await api.get({
action: 'expandtemplates',
text: template,
prop: 'wikitext',
format: 'json'
});
return JSON.parse(resp.expandtemplates.wikitext);
};
return {
initAll: async function() {
try {
// 并行执行所有请求,提高加载效率
const [rawRsp, whiteData, guData, helpData] = await Promise.all([
request('{{#invoke:KillRSP|getKillData}}'),
request('{{#invoke:KillRSP/Whitelist|getWhitelist}}'),
request('{{#invoke:KillRSP/GUlist|getGUListData}}'),
request('{{#invoke:KillRSP/HelpData|getHelpData}}')
]);
// 提取所有高危域名,用于后期去重
const helpDomains = new Set((helpData.absolute || []).map(i => (i.d || i).toLowerCase()));
// 定义预清洗函数:如果某个来源的名称匹配可能误伤 HelpData 域名,则标记或剔除
const cleanData = (group) => {
if (!group || !group.suspected) return;
// 这里可以根据需要过滤掉那些与 helpDomains 冲突的名称
// 但由于主脚本逻辑已经有了屏蔽机制,这里主要做数据结构标准化
};
// 标准化主数据结构
const processedRsp = {
blacklist: rawRsp.blacklist || { absolute: [], suspected: [] },
unreliable: rawRsp.unreliable || { absolute: [], suspected: [] },
primary: rawRsp.primary || { absolute: [], suspected: [] }
};
return {
rsp: processedRsp,
white: whiteData || { domains: {}, names: {} },
gu: guData || { absolute: [], suspected: [] },
help: helpData || { absolute: [] },
helpDomains: helpDomains,
// 预编译正则转义函数
esc: (d) => d.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
};
} catch (e) {
console.error("KillRSP Data Factory Error:", e);
throw e;
}
}
};
})();