如何用Python更新MediaWiki文章?
你好,
我有一个定时任务,它会收集一些关于服务的统计数据。我需要这个定时任务能够自动更新一个媒体维基页面(在页面上添加内容)。
我正在使用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')