Benutzer:PerfektesChaos/js/wikiExport

Für die Lady.

Kombination aus Skripten, um den Export einer Wiki-Seite komfortabler und sicherer zu ermöglichen, als dies mit der Spezialseite möglich ist.

Die zusätzliche Funktionalität bietet folgende Möglichkeiten:

  • Beschränkungen in der Versionsanzahl entfallen.
  • Teilbereiche; etwa bis zu einem Zeitpunkt, an dem mittels Copy&Paste eine Version übernommen und anders weiterentwickelt wurde („Nachimport“).
  • Fortsetzung unterbrochener Exportvorgänge.
  • Begrenzung der Größe von XML-Dateien.
  • Direkter Import unter einem vorgegebenen Seitennamen ohne Zwischenseite und Verschiebungen.
  • Ordnungsgemäße Byte-Differenzen in der Versionsgeschichte.

Ohne Gewähr für die Vollständigkeit der Versionen; empfangene Rückgaben sind sofort bei Erhalt nachzuzählen.

Sicherheitshinweise Bearbeiten

Jede Interaktion, die eine Speicherung von Daten aus der Webseite in eine lokale Datei auf der Festplatte ermöglicht, durchlöchert das Sicherheitssystem des Browsers.

  • Die Verwendung erfolgt grundsätzlich nur auf eigene Gefahr des Benutzers.
  • In der Kombination aus Skript und Browser-Erweiterung wird das maximal Mögliche getan, um keine Eintrittspforten und Angriffsmöglichkeiten zu bieten.

Sicherheitskonzept Bearbeiten

Die Software ist aufgeteilt in

  1. ein normales Skript, das in die HTML-Seite des Wiki-Servers eingebettet ist, ohne Zugriff auf den Browser und Rechner des Benutzers
  2. eine Browser-Erweiterung („Add-On“ usw.), die etwa die gleichen Möglichkeiten hat wie jedes Programm auf dem Rechner, zumindest auch auf lokale Dateien zugreifen kann.

Zwischen diesen beiden Komponenten ist eine wirksame Trennung erforderlich. Es darf der Webseite in der Wiki-Welt nicht möglich sein, die Browser-Erweiterung außerhalb der vorgesehenen Zwecke zu steuern.

Das wird durch folgende Maßnahmen erreicht:

  • Die Seite aus dem Internet erhält keinerlei Zugriff auf das Add-On.
  • Sie kann nur über Ereignisse („Events“) informieren („ein Knopf wurde gedrückt“) und diese Ereignisse blind versenden; sie weiß aber nicht, wer und wo auf diese Ereignisse lauscht.
  • Die JavaScript-Informationen („global objects“) beider Komponenten haben keinen Kontakt miteinander; gegenseitig werden keine Funktionen aufgerufen und es werden keine Daten ausgelesen.
  • Bei der Informationsübermittlung werden zusammen mit Ereignissen nur einfache Zeichenketten übertragen, etwa Kennwörter für Aktivitäten oder XML-Text. Ausgeführt wird dies nicht.
  • Die Browser-Erweiterung, die „privilegiert“ ist, schreibt nur Zeichenketten in das Wiki-Dokument und sendet gelegentlich Ereignisse.
  • Es sind nur Funktionen vorhanden, die die Dateinamen in Benutzerverzeichnissen lesen können; nicht jedoch die Inhalte von Dateien. Ansonsten können nur Dateien geschrieben werden.

Installation und Konfiguration Bearbeiten

Beide Komponenten sind separat zu installieren.

Wiki-Helferlein Bearbeiten

Nach Integration in importUtility sind auf Seiten der Wiki-Einstellungen keine Maßnahmen durch Benutzer erforderlich.

Installieren Bearbeiten

  • Andernfalls sind die folgenden Zeilen in die persönliche common.js einzufügen:
mw.loader.load("//en.wikipedia.org/w/index.php?title=User:PerfektesChaos/js/wikiExport/r.js&action=raw&bcache=1&maxage=604800&ctype=text/javascript",
               "text/javascript");

Damit wird das Skript auf Seiten des Internets bereitgestellt. Es passt zu allen Browsern.

Konfigurieren Bearbeiten

Vor dem mw.loader.load sind die folgenden Zeilen anzugeben, beispielsweise:

if ( typeof mw.libs.wikiExport !== "object" ) {
   mw.libs.wikiExport  =  { };
}
mw.libs.wikiExport.pages   =  [ [ 4, "ImportExport" ] ];
mw.libs.wikiExport.preset  =  { "wikiProject":   "wikipedia",
                                "interLanguage": "de" };
  • .pages ist ein Array von Arrays aus Namensraum-Nummer und Seitentitel.
    • Nur auf den dadurch spezifizierten Seiten wird das Werkzeug aktiv; hier Wikipedia:ImportExport.
    • Als Namensräume sind nur Benutzer und Projekt möglich.
  • .preset ist ein Objekt mit optionalen Komponenten, mit denen der obere Bereich des Formulars dynamisch vorbelegt werden kann:
"wikiProject" Projekt
"interLanguage" Sprachversion
"pageName" Seitenname
"stopBefore" Vor Version
"startAfter" Nach Version
"revNumber" Versionsanzahl insgesamt
"storeName" Name der Zielseite
.flush() Formular zurücksetzen
.focus() Export als aktuelles Element

Add-On Bearbeiten

Anschließend ist die Erweiterung für den Browser zu installieren:

  • Firefox
  • Google Chrome (möglich, aber bislang nicht implementiert)

Add-On konfigurieren Bearbeiten

Im entsprechenden Konfigurationsdialog nach der Installation sind optional verschiedene Angaben möglich.

  1. Allgemeine Vorgaben für den Export können gesetzt werden.
    • Das Basisverzeichnis für alle Dateien kann an dieser Stelle ausgewählt werden.
    • Bei jedem einzelnen Export kann individuell von der Grundkonfiguration abgewichen werden.
  2. Es kann mit Start des Browsers das Add-On dienstbereit geschaltet werden.
    • Das ist die „werksseitige“ Voreinstellung, damit die ersten Schritte erleichtert werden. Sobald man mit der Funktionsweise vertraut ist und wenn das Werkzeug nicht laufend benutzt wird, sollte diese Einstellung deaktiviert werden und der Modus explizit zugeschaltet werden, wenn er tatsächlich benötigt wird.

Arbeitsseite konfigurieren Bearbeiten

Bei Integration in importUtility wird dies automatisch vorgenommen.

Es ist eine Seite im Benutzer- oder Projektnamensraum erforderlich, auf der ein Element mit der id="WEX_Wrapper" vorhanden ist. Weiterhin muss der Inhalt der Seite /form das leere Formular konfigurieren.

Allgemeine Hinweise Bearbeiten

Dateien Bearbeiten

  • Eine Protokolldatei (txt) wird angelegt, wenn es eine verwertbare Antwort der API gab. Lehnt die API bereits den ersten Zugriff ab, kommt sie nicht zustande.
  • Der jeweilige Inhalt der Protokolldatei wird laufend unter dem Formular angezeigt.
  • Die einzelnen XML-Dateien sind in jeder Phase abgeschlossen und können auch nach einem Absturz genutzt werden. Der zuletzt erfolgreich gespeicherte Zeitstempel ist in der Protokolldatei vermerkt; zur Fortsetzung eines unterbrochenen Laufs kann er unmittelbar in das Formular eingegeben werden.
  • Das Arbeitsverzeichnis sollte konfiguriert werden; notfalls wird versucht, den als TEMP deklarierten Ordner auf dem Rechner ausfindig zu machen.
  • Eine Kurzkennung kann für einzelne Läufe oder allgemein konfiguriert werden; iux wird vorgegeben. Die Kurzkennung dient zur Bildung der Dateinamen und intern der Zuordnung verschiedener Läufe. Für aufeinanderfolgende oder gleichzeitige Exporte bei noch vorhandenen Dateien wird an die Kurzkennung eine zweistellige Zahl angehängt und bildet eine Auftrags-Identifikation.
    • Für einen Sonderauftrag abweichend von der Routine können durch eine besondere Kennung die generierten Dateien leicht erkannt werden.
  • Die Mindestgröße einer XML-Datei hängt von der Anzahl der Versionen pro API-Abruf ab; übersteigt der Block eine erwünschte Größenbegrenzung, lässt sich das nur durch Verringerung der Anzahl der Versionen pro API-Abruf lösen.

Laufzeit, Parallelaktion und Begrenzungen Bearbeiten

  • Die Generierung erfolgt so lange, wie das Fenster im Browser existiert.
  • Kommt es zu einer Unterbrechung (Stromausfall, Browsercrash, Netzwerkausfall, manueller Abbruch), kann unter Wiederverwendung der XML-Dateien des letzten Laufs fortgesetzt werden.
  • Mehrere Exporte sind gleichzeitig in mehreren Browsertabs mögich.
  • Eine Begrenzung auf 1000 Versionen pro Export besteht nicht, weil nicht 1000, sondern nur einige Dutzend Versionen mit jedem API-Abruf herausgegeben werden.
  • Es besteht vermutlich eine Begrenzung von etwas über 200 MB für eine einzelne XML-Datei.
    • Diese Grenze wurde nicht erprobt.
    • Auf Wunsch könnte auf 4 GB pro XML-Datei ausgebaut werden; das sollte dann für eine einzelne Seite reichen.

Wenn nicht benötigt Bearbeiten

Wenn das Hilfsmittel nicht mehr benötigt wird, kann es einfach abgeschaltet werden, indem auf den Anwendungs-Icon in der Browser-Werkzeugleiste geklickt wird. Es reagiert dann sofort nur noch auf einen erneuten Klick auf den Icon. Die Arbeitsseite muss nach Reaktivierung neu geladen werden.

Formular Bearbeiten

Das Formular ist in zwei Blöcke aufgeteilt:

  1. Oben die Spezifikation des aktuellen Exports.
    • Die Werte können dynamisch vorbelegt werden.
    • Das importUtility füllt so die Seitenspezifikation anhand der Anfrage aus.
  2. Unten die Parameter von Kommunikation und Dateispeicherung.
    • Die Parameter werden aus den Vorgaben des Add-On vorbelegt; können jedoch für jeden einzelnen Export anders konfiguriert werden.

Ungültige Eingaben werden gnadenlos entfernt.

  • Leere Angaben sind bis auf den Namen der Seite zulässig und bewirken das Standardverhalten.
Projekt
Die Wikipedia; auch Wikisource usw.
Ohne Angabe ist es wikipedia.
Sprachversion
de oder en usw.
Ohne Angabe gilt die momentane Projektsprache.
Seitenname im Export-Wiki
Einschließlich Namensraum, ohne Escaping.
Einziger Pflichtparameter.
Bei manueller Eingabe muss das Feld verlassen werden, damit die Eingabe wirksam wird.
Vor Version
Die spezifizierte Version und jüngere ausschließen.
Für Zeitzone, Serverzeit, Sommerzeit wird keine Haftung übernommen.
Die UTC-Zeit kann durch nachgestelltes Z spezifiziert werden.
Die Versionsnummer kann mit vorangestelltem Gleichheitszeichen angegeben werden.
Ohne Angabe gilt der momentane Zeitpunkt.
Vorgesehen für den Nachimport.
Nach Version
Die spezifizierte Version und ältere ausschließen.
Für Zeitzone, Serverzeit, Sommerzeit wird keine Haftung übernommen.
Die UTC-Zeit kann durch nachgestelltes Z spezifiziert werden.
Die Versionsnummer kann mit vorangestelltem Gleichheitszeichen angegeben werden.
Ohne Angabe gilt ab ovo, ab Erstellung der Seite.
Vorgesehen für die Fortsetzung eines begonnenen aber abgebrochenen Exports, oder das Schließen einer Lücke in der Versionsgeschichte.
Versionsanzahl insgesamt
Die Gesamtzahl der wirksamen Versionen kann begrenzt werden.
Naturgemäß werden nur die sichtbaren Versionen gezählt; keine versteckten oder gelöschten. Vermerke über Verschiebungen, Seitenschutz und auch Importe können auf der Quellseite als Version gezählt werden, rechnen aber bei tatsächlichen Versionen und Import nicht mit.
Zusammen mit der vorangehenden Versionsidentifikation kann ein Fenster aus der Versionsgeschichte kopiert werden; alternativ durch die Identifikation der begrenzenden Versionen.
Ohne Angabe werden alle Versionen abgerufen.
Name der Zielseite
Name der Seite (einschließlich Namensraum), unter dem direkt importiert werden soll.
Dieser Seitenname wird in die XML-Dateien eingebunden und täuscht den Import über den Inhalt.
Ohne Angabe wird wie sonst auch der Seitenname im Export-Wiki gewählt.
Verzeichnis
Dateiverzeichnis auf den lokalen Festplatten usw.
Konfiguration des Add-On, sonst Auswahl; sonst in irgendein Konfigurationsverzeichnis des Browsers.
Kurzkennung der Dateigruppe
Einer oder mehrere Kleinbuchstaben.
Vorgabe ist die Konfiguration des Add-On, sonst iux.
HTTPS
Diese Option ist zurzeit nicht aktiv.
Standardmäßig wird die API-Abfrage mit dem gleichen Protokoll abgewickelt, unter dem die Benutzeranmeldung erfolgte.
Perspektivisch könnten alle Abfragen unter http: erfolgen, sofern nicht https: besonders angefordert wurde.
Die genaue Wirkung zwischen verschiedenen Wikis muss jedoch noch untersucht werden; möglicherweise ist dies nicht realisierbar.
Versionsanzahl pro Abruf
Anzahl der Versionen bei einer einzelnen API-Abfrage (Block).
Vorgabe ist die Konfiguration des Add-On, sonst 25.
Dateigrößenbeschränkung
Anzahl der ganzen Megabyte, die eine einzelne XML-Datei höchstens beanspruchen darf.
Zumindest ein Block mit der vorgegebenen Einzel-Versionsanzahl ist jedoch unabhängig von seiner Größe immer enthalten.
Vermutlich gibt es bei mehreren 100 MB Begrenzungen, die zur Unterbrechung des Exports oder zum Absturz des Browsers führen.
Es sind keine Grenzen vorgegeben.
Versionsanzahl pro Datei
Anzahl der sichtbaren Versionen, die eine einzelne XML-Datei höchstens enthalten darf.
Das kann aber nur ganzzahliges Vielfaches der Versionsanzahl pro Abruf sein, weil mindestens so viele Versionen in jedem Block enthalten sind.
Es sind keine Grenzen vorgegeben.

Reaktion Bearbeiten

Nach Auslösen des Exports wird unter dem Formular die Auftrags-Identifikation angezeigt.

  • Nach dem ersten erfolgreichen API-Kontakt wird aufgelistet:
    • Nummer des Namensraums
    • Normalisierter Seitenname (Aliasse aufgelöst; Großschreibung)
    • Abweichender Name mit Escaping
    • Seitenkennnummer

Darunter das aktuelle Protokollfeld.

  • Durch fehlende Versionen (etwa versteckt) können zwischen den regelmäßigen Anzahlen und der tatsächlichen Gesamtzahl Differenzen auftreten.

Codes Bearbeiten

Die Stammseite ist en:User:PerfektesChaos/js/wikiExport mit:

Quellcode
ResourceLoader
Namensräume 2, 4
mw.libs wikiExport
Add-On ID PerfektesChaos.wikiExport@user.wikimedia.org