Bibliothek zur Nutzung der MediaWiki-API unter .NET

Für ein kleines Projekt war ich auf der Suche nach einer halbwegs aktuellen Bibliothek zur Nutzung der MediaWiki-API. Wenn man sich auf der entsprechenden Seite in der MediaWiki-Dokumentation umschaut, wird man feststellen das einem nicht all zu viele Bibliotheken zur Verfügung stehen.

Die Auswahl an .NET Bibliotheken fällt eher mager aus

Genutzt habe ich letztendlich die Bibliothek Wiki Client Library, da diese halbwegs aktuell ist und mit meinen MediaWiki-Installationen problemlos zusammenarbeitet. Ein minimales Beispiel zur Bearbeitung einer Wiki-Seite sieht mit der Bibliothek wie folgt aus:

// Init
var client = new WikiClient
{
    ClientUserAgent = "WikiBot"
};

var site = new WikiSite(client, https://wiki.example.com/api.php);

// Login
await site.Initialization;
try
{
    await site.LoginAsync("username", "password");
}
catch (WikiClientException ex)
{
    Console.WriteLine(ex.Message);
}

// Edit site
var page = new WikiPage(site, buildingName);

// Load page
await page.RefreshAsync(PageQueryOptions.FetchContent);

// Update page
page.Content = "new content";
await page.UpdateContentAsync("New page created.", minor: false, bot: true);

// Logout
await site.LogoutAsync();

Über die Nutzung von Generatoren ist es möglich größere Bereiche wie z.B. Kategorien oder Suchergebnisse zu iterieren:

// Iterate all pages
var generator = new AllPagesGenerator(site)
{
    StartTitle = "A",
    NamespaceId = BuiltInNamespaces.Main,
    PaginationSize = 50
};

using (var enumerator = generator.EnumPagesAsync().GetEnumerator())
{
    int index = 0;

    while (await enumerator.MoveNext(CancellationToken.None))
    {
        // Debug output
        var page = enumerator.Current;
        Console.WriteLine("{0}: {1}", index, page);
        index++;

        // Load page
        await page.RefreshAsync(PageQueryOptions.FetchContent);

        // Update page
        page.Content = "new content";
        await page.UpdateContentAsync("Update page.", minor: true, bot: true);
    }
}

Der Quelltext der Wiki Client Library ist auf GitHub zu finden. Lizenziert ist er unter der Apache Licence 2 und damit freie Software.

Zertifikatsüberprüfung bei wget deaktivieren

Wenn man mittels wget etwas herunterlädt, kann es passieren das der Download mittels:

wget https://example.com

mit folgender Meldung abbricht:

FEHLER: Kann das Zertifikat von »example.com« nicht prüfen, ausgestellt von »/C=US/O=Let’s Encrypt/CN=Let’s Encrypt Authority X3«:. Die Authorität des Ausstellers des Zertifikates kann lokal nicht geprüft werden.

In diesem Fall schlägt die Zertifikatsprüfung fehl. Möchte man die entsprechende Ressourche trotzdem herunterladen, so kann man die Zertifikatsprüfung deaktivieren:

wget https://example.com --no-check-certificate

Über den Schalter –no-check-certificate wird die Prüfung deaktiviert und der Downloads kann durchgeführt werden.

Rollback-Plugin für WordPress

Neben meinen eigentlichen WordPress-Instanzen betreibe ich einige Entwickler-Instanzen. Dort habe ich ab und an das Problem, das ich bestimmte Plugins in einer älteren Version nutzen möchte. Natürlich kann man nun für jeden Fall die gewünschte Version herunterladen und manuell installieren.

Über WP Rollback können Plugins auf beliebige Versionen zurückgerollt werden

Einfacher geht dies mit dem WordPress-Plugin WP Rollback. Das Plugin ermöglicht es über die administrative Oberfläche von WordPress beliebige Plugins auf beliebige Versionen zurückzusetzen. Dazu muss nur das passende Plugin und die gewünschte Version ausgewählt werden und anschließend wird der Rollback durchgeführt.

Der Quelltext des Plugins ist auf GitHub zu finden. Lizenziert ist das Plugin unter der GPL in Version 2 und damit freie Software.

Siri; die Neuheit aus den 80ern

Das Siri vor einigen Jahren erfunden wurde ist ja ein Trugschluss. Zu mindestens in diesem Video wird gezeigt wie Siri in der 80er Jahren aussah:

Aktivieren Sie JavaScript um das Video zu sehen.
Video-Link: https://www.youtube.com/watch?v=xGcrvGTMgkg

Vorgestellt wird in dem Video die MS-DOS Version von Siri, mit all ihren Stärken und Schwächen. Auf dem Kanal des Autors findet man weitere Zeitreise-Videos, mit heute bekannten Apps.

Footer einer MediaWiki bearbeiten

Bei einer Wiki, welche mittels der freien Software MediaWiki aufgesetzt wurde gibt es unten, am Ende jeder Seite, einen Footer mit einer Reihe von Links. Wenn man diesen Links ändern möchte muss die Konfiguration in der Datei LocalSettings.php angepasst werden. Die erste Möglichkeit wäre es den Footer komplett verschwinden zu lassen. Dazu muss am Ende der LocalSettings.php-Datei folgendes eingetragen werden:

$wgHooks['SkinTemplateOutputPageBeforeExec'][] = function( $sk, &$tpl ) {

        # Remove existing entries
        $tpl->data['footerlinks']['places'] = array();

        return true;
};

Technisch betrachtet wird der der Hook SkinTemplateOutputPageBeforeExec genutzt um die Logik für den Footer etwas abzuwandeln. Möchte man nach dem Löschen der alten Einträge neue Einträge hinzufügen, so ist dies ebenfalls möglich:

$wgHooks['SkinTemplateOutputPageBeforeExec'][] = function( $sk, &$tpl ) {

        # Remove existing entries
        $tpl->data['footerlinks']['places'] = array();

	# Add new entries
        $tpl->set( 'disclaimerpage', $sk->footerLink( 'disclaimerpage', 'disclaimerpage' ) );
        $tpl->data['footerlinks']['places'][] = 'disclaimerpage';

        $tpl->set( 'privacypage', $sk->footerLink( 'privacypage', 'privacypage' ) );
        $tpl->data['footerlinks']['places'][] = 'privacypage';

        return true;
};