社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544
刷新链入页面
阅读
2024-04-27更新
最新编辑:Lu_23333
阅读:
更新日期:2024-04-27
最新编辑: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))