Quiq::MediaWiki::Api - Clientseitiger Zugriff auf MediaWiki API
Quiq::Hash
Diese Klasse implementiert verschiedene clientseitige Methoden für den Zugriff auf die serverseitige MediaWiki-API.
Die MediaWiki-API wird über api.php (statt index.php) angesprochen. Die Doku der API wird angezeigt, wenn api.php ohne Parameter oder mit "action=help&recursivesubmodules=1" (alles auf einer Seite) aufgerufen wird.
Die MediaWiki-API empfängt und liefert alle Daten in UTF-8.
$mwa = $class->new($url,@opt); $mwa = $class->new($url,$user,$password,@opt);
API-URL des MediaWiki, z.B. https://en.wikipedia.org/w/api.php.
Benutzername (für automatisches Login statt explizites Login).
Passwort (für automatisches Login statt explizites Login).
Gib die Laufzeitinformation (wird mit -debug=>1 eingeschaltet) in Farbe aus.
Gib Laufzeit-Information wie den Kommunikationsverlauf auf STDERR aus.
Client-Objekt
Instantiiere einen Client für die MediaWiki-API $url und liefere eine Referenz auf dieses Objekt zurück. Sind Benutzername $user und Passwort $password angegeben, wird der Benutzer mit dem ersten Request automatisch eingeloggt. Alternativ kann die Methode $mwa->login() genutzt werden, um den Benutzer zu einem beliebigen Zeitpunkt einzuloggen.
https://www.mediawiki.org/w/api.php
http://lxv0103.ruv.de:8080/api.php
$res = $mw->login($user,$password);
Name des Nutzers
Passwort des Nutzers
Logge den Benutzer $user mit Passwort $password auf dem MediaWiki-Server ein. Alternativ ist ein automatisches Login möglich, siehe Konstruktor.
$ perl -MQuiq::MediaWiki::Api -E 'Quiq::MediaWiki::Api->new("http://lxv0103.ruv.de:8080/api.php",-debug=>1)->login("XV882JS","<PASSWORD>")'
$token = $mwa->getToken($action);
Operation, für die das Token benötigt wird.
Besorge vom Server ein Token zum Ausführen von Operation $action und liefere dieses zurück. Da das Token je Session für alle Seiten identisch ist, cachen wir die Tokens, so dass nur eine Serveranfrage je Operationstyp nötig ist.
$pag = $mwa->getPage($pageId,@opt); $pag = $mwa->getPage($title,@opt);
Page-Id der Seite.
Titel der Seite.
Wirf keine Exception, wenn die Seite nicht gefunden wird.
Page-Objekt (Hash)
Ermittele die Seite mit der PageId $pageId bzw. dem Titel $title und liefere diese zurück.
$res = $mwa->editPage($title,$text); $res = $mwa->editPage($pageId,$text);
Text der Seite
Response
Setze den Inhalt der Seite mit dem Titel $title auf Text $text. Drei Fälle lassen sich unterscheiden:
Existiert die Seite nicht, wird sie angelegt.
Existiert die Seite und der Text ist verschieden, wird der bestehende Text ersetzt.
Existiert die Seite und der Text ist identisch, wird der Aufruf vom Wiki ignoriert.
Response nach Neuanlage einer Seite
$mwa->editPage("XV882JS - API Testseite 8","Ein Text")';
produziert (Log)
---JSON--- \ { edit { contentmodel "wikitext", new "", newrevid 13318, newtimestamp "2018-12-27T11:54:51Z", oldrevid 0, pageid 2446, result "Success", title "XV882JS - API Testseite 8" } }
$res = $mwa->movePage($oldTitle,$newTitle,@opt); $res = $mwa->movePage($pageId,$newTitle,@opt);
Zukünftiger Titel der Seite.
Grund für die Umbenennung.
Erzeuge ein Redirekt von der alten zur neuen Seite.
Benenne die Seite mit dem Titel $oldTitle bzw. der Page-Id $pageId in $newTitle um. Die alte Seite existiert weiterhin. Das Wiki richtet automatisch eine Umleitung von der alten zur neuen Seite ein.
$mwa->loadPage($mirrorDir,$pageName,$input,@opt);
Pfad zum Spiegel-Verzeichnis. Der Inhalt des Spiegel-Verzeichnisses wird von der Methode verwaltet. Es enthält Kopien der MediaWiki-Seiten (*.mw).
Name für die Seite im Spiegel-Verzeichnis. Dieser Name identifiziert die Seite im Spiegel-Verzeichnis (und ist nicht zu verwechseln mit dem Titel der Seite). Der Name $pageName muss eindeutig sein.
Pfad der MediaWiki Seitendatei oder eine Stringreferenz auf den Inhalt der Seitendatei.
Lade die Seite $input mit dem eindeutigen Namen $pageName (im Spiegel-Verzeichnis) ins MediaWiki. Der $pageName ist nicht zu verwechseln mit dem Titel der Seite. Der Titel der Seite ist zusammen mit dem Inhalt der Seite Teil der externen Seitenrepräsentation $input. Die Methode erkennt, ob die externe Seite $input
bereits im Wiki existiert oder neu angelegt werden muss
sich der Titel geändert hat -> movePage()
sich der Inhalt gegenüber dem letzten Stand geändert hat -> editPage()
eine Änderung im Wiki erfahren hat und diese Änderung in die externe Seite eingepflegt werden muss -> Fehlermeldung
$res = $mwa->send($method,$action,@keyVal);
Die HTTP Request-Methode: 'GET' oder 'POST'.
Die Aktion, die ausgeführt werden soll, z.B. 'query'.
Die Liste der Schlüssel/Wert-Paare, die an den Server übermittelt werden, entweder als URL-Parameter im Falle von GET oder im Body des Requests im Falle von POST.
Dekodiertes JSON in UTF-8 als Perl-Hash
Grundlegende Methode, über die sämtliche Interaktion mit dem MediaWiki-Server läuft. Die Interaktion besteht in einem Austausch von Schlüssel/Wert-Paaren via HTTP mittels GET oder POST. Der Client sendet mit einem Request eine Menge von Schlüssel/Wert-Paaren und erhält vom Server in der Response eine Menge von Schlüssel/Wert-Paaren zurück. In beide Richtungen wird UTF-8 Encoding vorausgesetzt. D.h. die @keyVal-Elemente müssen UTF-8 kodiert sein, die Elemente in der Response $res sind es ebenfalls.
$pag = $mwa->reduceToPage($res); $pag = $mwa->reduceToPage($res,$sloppy);
Response vom Server mit Seitenliste.
Wirf keine Exception, wenn keine Seite existiert.
Reduzierte Response
Reduziere die Server-Response $res mit einer Seitenliste der Art
{ query => { pages => { $pageId => { @keyVal }, ... }, } }
auf
{ @keyVal }
also auf ein Element und liefere dieses zurück.
Enthält die Seitenliste mehr als ein Element, oder handelt es sich um ein ungültiges (als "missing" gekennzeichnetes) Element, wird eine Exception geworfen.
$mwa->log($title,$text);
Schreibe den Text $text unter der Überschrift $title nach STDERR.
1.130
https://www.mediawiki.org/wiki/API
Frank Seitz, http://fseitz.de/
Copyright (C) 2019 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.