2013-08-09 8 views
5

Ich habe viele Textdateien, die ich in ein Wiki mit MediaWiki hochladen möchte. Ich weiß nicht einmal, ob das wirklich möglich ist, aber ich will es versuchen.Mass-Upload viele Textdateien in MediaWiki

Der Name jeder Textdatei ist der Titel der Wiki-Seite.

Eine Wiki-Seite für eine Datei.

Ich möchte alle Textdateien aus dem gleichen Ordner laden, da das Programm in ist.

Vielleicht fragen Sie es codieren alle zu viel verlangt, so könnten Sie mir wenigstens sagen, welche Sprache ich suchen soll um es zu versuchen?

Antwort

6

Was Sie wahrscheinlich wollen, ist ein bot, um die Artikel für Sie mit der MediaWiki API zu erstellen. Das wohl bekannteste Bot-Framework ist pywikipedia für Python, aber es gibt auch API libraries and bot frameworks für viele andere Sprachen.

In der Tat kommt pywikipedia mit einem Skript namens pagefromfile.py, das etwas ziemlich genau das tut, was Sie wollen. Standardmäßig erstellt es mehrere Seiten aus einer einzigen Datei, aber wenn Sie etwas Python kennen, sollte es nicht zu schwer sein, dies zu ändern.


Eigentlich, wenn die Dateien auf dem gleichen Server Wiki läuft sind (oder Sie sie dort hochladen können), dann brauchen Sie nicht einmal einen Bot überhaupt: Es gibt ein MediaWiki maintenance scriptimportTextFile.php aufgerufen, kann TU es für dich. Sie können es für alle Dateien in einem bestimmten Verzeichnis mit einem einfachen Shell-Skript laufen in, zum Beispiel:

for file in directory/*.txt; do 
    php /path/to/your/mediawiki/maintenance/importTextFile.php "$file"; 
done 

(Offensichtlich ersetzen directory mit dem Verzeichnis der Textdateien und /path/to/your/mediawiki mit dem tatsächlichen Pfad Ihrer MediaWiki-Installation enthält.)

Standardmäßig wird importTextFile.php den Namen der erstellten Seite auf den Dateinamen basieren, wobei alle Verzeichnispräfixe und Erweiterungen entfernt werden. Gemäß den standardmäßigen MediaWiki-Seitenbenennungsregeln werden Unterstriche durch Leerzeichen ersetzt und der erste Buchstabe wird groß geschrieben (es sei denn, Sie haben turned that off in Ihrer LocalSettings.php); so würde beispielsweise die Datei directory/foo_bar.txt als Seite "Foo bar" importiert werden. Wenn Sie die Seitenbenennung feiner steuern möchten, unterstützt importTextFile.php auch einen expliziten Parameter --title. Oder Sie können das Skript immer kopieren und selbst ändern, um die Regeln für die Seitenbenennung zu ändern.


Ps. Es gibt auch noch ein anderes MediaWiki-Wartungsscript mit der Bezeichnung edit.php, das fast genauso funktioniert wie importTextFile.php, außer dass es den Seitentext aus der Standardeingabe liest und nicht die üblichen Seitenbenennungsregeln von importTextFile.php hat. Es kann jedoch für automatische Änderungen mit Unix-Pipelines recht praktisch sein.


Nachtrag: Das importTextFile.php Skript erwartet, dass die Dateinamen und Inhalte in der UTF-8-Codierung sein. Wenn Ihre Dateien in einer anderen Codierung vorliegen, müssen Sie sie entweder zuerst korrigieren oder das Skript ändern, um die Konvertierung durchzuführen, z. mit mb_convert_encoding().

Insbesondere die folgenden Änderungen an dem Skript sollte es tun:

  1. der Datei Namen auf UTF-8, bearbeiten Sie die titleFromFilename() Funktion zu konvertieren, in der Nähe der Unterseite die script und ersetzen seine letzte Zeile:

    return $parts[0]; 
    

    mit:

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

    wo your-encoding sollte die character encoding für Ihre Dateinamen verwendet werden (oder auto, um automatische Erkennung zu versuchen).

  2. Um auch den Inhalt der Dateien zu konvertieren, eine ähnliche Änderung bilden höher, innerhalb des Hauptcode des Skripts, die Linie zu ersetzen:

    $text = file_get_contents($filename); 
    

    mit:

    $text = file_get_contents($filename); 
    $text = mb_convert_encoding($text, "UTF-8", "your-encoding"); 
    
+0

@llmari Karonen Vielen Dank sooooooooooo viel. Ich möchte nur herausfinden, welche Methode die schnellste ist. Welche garantiert die schnellste Buchung. Und da draußen sah ich viele Erweiterungen wie MultiUpload, UploadLocal, UploadWizard. Können diese schneller sein als die von Ihnen erwähnten Methoden? – user1849133

+0

@llmari Karonen Und wenn es tatsächlich die schnellste Methode gibt, wie schnell ist das? Wenn ich 10000 txt Dateien mit jeder Größe 10KB habe, wie schnell wird es sein? Ich habe getestet, dass mein ftp 1.2 solche 10KB TXT-Datei pro Sekunde durchschnittlich auf meinen Server hochlädt. Aber wie schnell wird es sein, diese hochgeladenen Dateien tatsächlich in mediawiki zu posten? – user1849133

+2

Das ist eine _really_ langsame Upload-Geschwindigkeit. Verwenden Sie ein altes Modem aus den 90er Jahren? Wie beim Importieren der Dateien in MediaWiki sollte es sicherlich schneller sein, die Dateien auf den Server hochzuladen (vielleicht in einem .zip/.tar.gz-Archiv, um es schneller zu machen) und importTextFile.php (oder edit.php, was sollte sei genauso schnell) als einen Bot zu benutzen. Ich nehme an, das Ändern des Skripts zum Importieren aller Dateien in einem Aufruf wäre noch schneller, aber wahrscheinlich nicht genug, um die Zeit zu kompensieren, die für die Durchführung der Änderungen benötigt würde, um sie zu testen. –

0

In MediaWiki 1.27 gibt es ein neues Wartungs-Skript, importTextFiles.php, das dies tun kann. Informationen finden Sie unter https://www.mediawiki.org/wiki/Manual:ImportTextFiles.php. Es verbessert das alte (jetzt entfernte) importTextFile.php Skript, da es Datei-Wildcards verarbeiten kann, so dass es den Import von vielen Textdateien gleichzeitig ermöglicht.