我有很多文本文件要上传到运行 MediaWiki 的 wiki。我什至不知道这是否真的可能,但我想试一试。
每个文本文件的名称都是 wiki 页面的标题。
一个文件一个wiki页面。
我想从程序所在的同一文件夹中上传所有文本文件。
也许要求您编写所有代码要求太多了,所以您能告诉我至少我应该寻找哪种语言来试一试吗?
我有很多文本文件要上传到运行 MediaWiki 的 wiki。我什至不知道这是否真的可能,但我想试一试。
每个文本文件的名称都是 wiki 页面的标题。
一个文件一个wiki页面。
我想从程序所在的同一文件夹中上传所有文本文件。
也许要求您编写所有代码要求太多了,所以您能告诉我至少我应该寻找哪种语言来试一试吗?
您可能想要的是一个使用MediaWiki API为您创建文章的机器人。最著名的机器人框架可能是Python 的pywikipedia,但也有许多其他语言的API 库和机器人框架。
事实上,pywikipedia 附带了一个名为pagefromfile.py的脚本,它的功能与您想要的非常接近。默认情况下,它从单个文件创建多个页面,但如果您了解一些 Python,那么更改它应该不会太难。
实际上,如果文件在您的 wiki 运行的同一台服务器上(或者您可以将它们上传到那里),那么您甚至根本不需要机器人:有一个名为importTextFile.php的 MediaWiki维护脚本可以为您完成. 您可以使用简单的 shell 脚本对给定目录中的所有文件运行它,例如:
for file in directory/*.txt; do
php /path/to/your/mediawiki/maintenance/importTextFile.php "$file";
done
(显然,替换directory
为包含文本文件的目录和/path/to/your/mediawiki
您的 MediaWiki 安装的实际路径。)
默认情况下,importTextFile.php 将基于文件名创建页面的名称,去除任何目录前缀和扩展名。此外,根据标准 MediaWiki 页面命名规则,下划线将替换为空格,首字母大写(除非您在 LocalSettings.php 中将其关闭);因此,例如,该文件directory/foo_bar.txt
将作为页面“Foo bar”导入。如果您想更好地控制页面命名,importTextFile.php 还支持显式--title
参数。或者您可以随时复制脚本并自行修改以更改页面命名规则。
附言。还有另一个名为edit.php的MediaWiki 维护脚本,它的作用与importTextFile.php 几乎相同,只是它从标准输入读取页面文本,并且没有importTextFile.php 方便的默认页面命名规则。不过,对于使用 Unix 管道的自动编辑来说,它可能非常方便。
附录: importTextFile.php 脚本要求文件名和内容采用 UTF-8 编码。如果您的文件采用其他编码,则必须先修复它们或修改脚本以进行转换,例如使用mb_convert_encoding()。
特别是,应该对脚本进行以下修改:
要将文件名转换为 UTF-8,请编辑脚本底部附近的 titleFromFilename() 函数,并替换其最后一行:
return $parts[0];
和:
return mb_convert_encoding( $parts[0], "UTF-8", "your-encoding" );
whereyour-encoding
应该是用于文件名的字符编码auto
(或尝试自动检测)。
要同时转换文件的内容,请在脚本的主代码内部进行类似的更改,替换以下行:
$text = file_get_contents( $filename );
和:
$text = file_get_contents( $filename );
$text = mb_convert_encoding( $text, "UTF-8", "your-encoding" );
在 MediaWiki 1.27 中,有一个新的维护脚本 importTextFiles.php 可以做到这一点。有关信息,请参阅https://www.mediawiki.org/wiki/Manual:ImportTextFiles.php。它改进了旧的(现已删除)importTextFile.php 脚本,因为它可以处理文件通配符,因此它允许一次导入许多文本文件。