如何用Python更新MediaWiki文章?

6 投票
3 回答
3188 浏览
提问于 2025-04-16 08:52

你好,

我有一个定时任务,它会收集一些关于服务的统计数据。我需要这个定时任务能够自动更新一个媒体维基页面(在页面上添加内容)。

我正在使用Python来设置这个定时任务,请问我有哪些好的选择?有没有关于媒体维基和Python的库的例子,或者媒体维基是否提供了可以使用的HTTP/REST接口(可能是通过一个扩展)?

谢谢!

3 个回答

0

作为这个库的维护者,
https://github.com/WolfgangFahl/py-3rdparty-mediawiki,我想推荐一下它的命令行功能。这个功能让你可以直接通过脚本来处理标记语言。

这个库在使用语义媒体维基(Semantic MediaWiki)时效果最好,你可以查询到你感兴趣的页面:

$ wikibackup -s orth --backupPath "/home/user/wikibackup/orth_copy" -q "[[isA::Event]]" --limit 10


downloading 10 pages from orth to /home/user/wikibackup/orth_copy

1/10 (  10%): downloading " DBKDA 2021" ...✅
2/10 (  20%): downloading "ENERGY 2021" ...✅
3/10 (  30%): downloading "ICAS 2021" ...✅
4/10 (  40%): downloading "ICNS 2021" ...✅
5/10 (  50%): downloading 2021 ICIMP ...✅
6/10 (  60%): downloading 3DUI 2020 ...✅
7/10 (  70%): downloading 3IA 2009 ...✅
8/10 (  80%): downloading 3PGIC 2010 ...✅
9/10 (  90%): downloading 4S4D 2017 ...✅
10/10 ( 100%): downloading 5GU 2017 ...✅

在修改完标记语言后,你可以用以下命令恢复页面:

wikirestore -t orth --backupPath "/home/user/wikibackup/orth_copy"

restoring 10 pages from /home/user/wikibackup/orth_copy to orth
1/10 (  10%): restore 2021 ICIMP ...✅
2/10 (  20%): restore "ICNS 2021" ...✅
3/10 (  30%): restore 3PGIC 2010 ...✅
4/10 (  40%): restore 4S4D 2017 ...✅
5/10 (  50%): restore "ENERGY 2021" ...✅
6/10 (  60%): restore 3DUI 2020 ...✅
7/10 (  70%): restore " DBKDA 2021" ...✅
8/10 (  80%): restore 3IA 2009 ...✅
9/10 (  90%): restore "ICAS 2021" ...✅
10/10 ( 100%): restore 5GU 2017 ...✅
1

如果你在同一台电脑上运行mediawiki和定时任务(cron job),那么你可以使用维护目录下的edit.php脚本。

/bin/python /opt/page_renderer.py | php /var/www/mediawiki/maintenance/edit.php -b PageTitle

在这个例子中,/opt/page_renderer.py会输出wiki的markdown格式内容。这些内容会被传送到编辑脚本中,编辑脚本带有-b这个参数(表示这是一个机器人编辑),还有你想要编辑的页面标题。

当然,你可以从任何程序中将内容传送到编辑脚本中。如果你的mediawiki安装在其他地方,可能需要修改编辑脚本的路径。

5

如果PyWikipediaBot太复杂了,可以试试这个Python模块 mwclient

你可以登录,查看某个页面的当前内容,做出修改,然后在不到10行代码里查看结果 (示例)

import mwclient
site = mwclient.Site('en.wikipedia.org')
site.login('Pfctdayelise','password')
page = site.Pages['User:Pfctdayelise/Test']
text = page.edit()
print text.encode('utf-8')
newtext = "\n\nTesting the write api without logging in.\n"
page.save(text+newtext,summary='testing write api')

撰写回答