5

我有很多文本文件要上传到运行 MediaWiki 的 wiki。我什至不知道这是否真的可能,但我想试一试。

每个文本文件的名称都是 wiki 页面的标题。

一个文件一个wiki页面。

我想从程序所在的同一文件夹中上传所有文本文件。

也许要求您编写所有代码要求太多了,所以您能告诉我至少我应该寻找哪种语言来试一试吗?

4

2 回答 2

6

您可能想要的是一个使用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()

特别是,应该对脚本进行以下修改:

  1. 要将文件名转换为 UTF-8,请编辑脚本底部附近的 titleFromFilename() 函数,并替换其最后一行:

    return $parts[0];
    

    和:

    return mb_convert_encoding( $parts[0], "UTF-8", "your-encoding" );
    

    whereyour-encoding应该是用于文件名的字符编码auto(或尝试自动检测)。

  2. 要同时转换文件的内容,请在脚本的主代码内部进行类似的更改,替换以下行:

    $text = file_get_contents( $filename );
    

    和:

    $text = file_get_contents( $filename );
    $text = mb_convert_encoding( $text, "UTF-8", "your-encoding" );
    
于 2013-08-09T21:11:25.967 回答
0

在 MediaWiki 1.27 中,有一个新的维护脚本 importTextFiles.php 可以做到这一点。有关信息,请参阅https://www.mediawiki.org/wiki/Manual:ImportTextFiles.php。它改进了旧的(现已删除)importTextFile.php 脚本,因为它可以处理文件通配符,因此它允许一次导入许多文本文件。

于 2016-08-11T10:26:38.310 回答