社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544

全站通知:

刷新链入页面

阅读

    

2024-04-27更新

    

最新编辑:Lu_23333

阅读:

  

更新日期:2024-04-27

  

最新编辑:Lu_23333

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
Lu_23333

要批量刷新一个页面的所有链入页面,如更新模版后需要刷新引用,可以使用JS或Python代码来辅助。

JS代码示例

下述代码提供了一个JS函数,其参数是页面名。

function refreshBacklinks(pagetitle) {
    const api = new mw.Api();
    function purgePages(titles) {
        // 每次请求可以处理多个页面,但注意不要超过API限制(例如50个标题)
        for (let i = 0; i < titles.length; i += 50) {
            let batch = titles.slice(i, i + 50);
            api.post({
                action: 'purge',
                titles: batch.join('|')
            }).done(function (data) {
                console.log('刷新成功:', data);
            }).fail(function (error) {
                console.error('刷新失败:', error);
            });
        }
    }
    function fetchBacklinks(blcontinue) {
        api.get({
            action: 'query',
            list: 'backlinks',
            bltitle: pagetitle,
            bllimit: 'max', // 获取尽可能多的链入页面
            blcontinue: blcontinue
        }).done(function (data) {
            if (data.query && data.query.backlinks) {
                let titles = data.query.backlinks.map(link => link.title);
                console.log("正在刷新")
                console.log(titles)
                purgePages(titles);

                // 如果存在继续查询的标志,则继续查询
                if (data.continue && data.continue.blcontinue) {
                    fetchBacklinks(data.continue.blcontinue);
                }
            }
        }).fail(function (error) {
            console.error('Failed to fetch backlinks:', error);
        });
    }

    // 开始获取链入页面
    fetchBacklinks();
}

调用方式如:

refreshBacklinks('页面名')

也可以将其页面名参数设为 mw.config.get("wgPageName") 以使用所在页面的页面名。

Python代码示例

使用了mwclient库。

from mwclient import Site

wiki_name = "tools"
page_name = "帮助:Loop"

wiki = Site(f"wiki.biligame.com/{wiki_name}", path="/", scheme="https")
wiki.login(cookies={'SESSDATA': '你的SESSDATA,泄露此信息有被盗窃账号风险。'})

page = wiki.pages[page_name]

if not page.exists:
    print(f"页面 {page_name} 不存在")
    exit(-1)

titles = [p.name for p in page.backlinks()]

for i in range(0, len(titles), 50):
    batch = titles[i:i+50]
    response = wiki.post('purge', titles='|'.join(batch))

    if 'error' in response:
        print('遇到错误:', dict(response['error']))
        print('退出程序……')
        exit(-1)
    if 'warnings' in response:
        print('遇到警告:', dict(response['warnings']))
        print('退出程序……')
        exit(-1)
    if 'purge' in response:
        for result in response['purge']:
            if 'purged' in result:
                print('\t\t刷新成功:', result['title'])
        # 最后输出刷新失败
        for result in response['purge']:
            if 'purged' not in result:
                print('此刷新失败:', result["title"], dict(result))