跳转到内容

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;
            }
        }
    };
})();