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.

Quelltext einer Mediawiki-Seite anzeigen

Vor einiger Zeit hatte ich einen Twitter-Bot entwickelt welcher als Datenquelle unter anderem die Wikipedia nutzt. Dazu nutzt der Bot unter anderem eine Bibliothek um auf die MediaWiki-API zuzugreifen. Nun stellte ich fest das die Nutzung der API in diesem Fall allerdings überdimensioniert war. Stattdessen ist es möglich sich für eine beliebige MediaWiki-Seite denn Quelltext anzeigen zu lassen. Die URL sieht dabei wie folgt aus:

https://de.wikipedia.org/wiki/Machinima?action=raw

Durch den Parameter action=raw wird der Quelltext anstatt des HTML-Renderings ausgegeben und kann somit ausgewertet werden.

Bundesedit

In der Wikipedia kann man sich anonym an der Erstellung und Verbesserung von Artikeln beteiligen. Problematisch wird das ganze nur dann wenn bestimmte Interessengruppen versuchen, einen Artikel zu ihren Gunsten zu beeinflussen.

Der Bundesedit Twitter-Account

Der Bundesedit Twitter-Account

Für einen Fall dieses Problem gibt es mit Bundesedit eine Lösung. Dabei handelt es sich um einen Twitter-Bot welcher anonyme Änderungen aus der Wikipedia, welche aus dem Netz des Bundes geschehen sind, twittert und sie damit für die Öffentlichkeit nachvollziehbar macht. Neben dem Twitter-Account @bundesedit, gibt es mittlerweile auch @euroedit und @landesedit. Die offizielle Seite des Projektes ist unter anderem unter bundesedit.de zu finden.

Dieser Tweet ist in dieser Woche nicht verfügbar

Ich hatte vor einiger Zeit einen Status-Bot für Twitter geschrieben. Dieser Bot schaut ob eine Bedingung erfüllt ist und twittern dann einen Satz wie:

Die Tür ist offen.

Wenn die Bedingung sich wieder ändert, könnte der Bot:

Die Tür ist zu.

twittern. Allerdings gibt es da ein Problem. Twitter lässt doppelte Tweets innerhalb einer bestimmten Zeitspanne (Gerüchten zu folge – eine Woche) nicht zu. Damit muss sich der Status-Bot etwas ausdenken wenn er die gleiche Nachricht öfters verschicken möchte. Wenn man dieses Verhalten von Twitter nicht kennt, wundert sich warum der Tweet nicht abgeschickt werden kann. Die einfachste Möglichkeit ist es hier einfach einen Zähler in den Tweet einzubauen. Alternativ kann man die gleiche Nachricht natürlich in unterschiedliche sprachliche Konstrukte packen.

Nekrologium

Mit der Twitter-API und einer Datenquelle kann man einiges anstellen. Und da man es bekanntlich nicht nur bei der grauen Theorie belassen sollte, habe ich das ganze in die Praxis umgesetzt.

Nekrologium auf Twitter

Nekrologium auf Twitter

Herausgekommen ist dabei der Twitter-Account Nekrologium welcher automatisch twittert, wenn eine bekannte Person verstorben ist. Als Datenquelle dient dabei der Nekrolog der Wikipedia, welcher ausgewertet und auf neue Todesfälle untersucht wird. Wenn dies der Fall ist, wird ein Tweet abgesetzt.