Angewandte Web-Automatisierung

Hunderte Daten­sätze von Hand in ein Web­formular eintip­pen oder ein­kopie­ren? Nein – denn das müsste sich doch auto­mati­sieren lassen. Und ja: so gehts.

Seit bald drei Jahren entschädigt die Schweizer Verwertungsgesellschaft für Urheberrechte, Pro Litteris, nicht nur Autoren von Büchern, Zeitungs- und Zeitschriftenartikel, sondern auch Blogger. Ich habe seinerzeit gefragt, ob jetzt der warme Geldregen für uns Blogger kommt. Die Antwort war damals ein Nein. Die Erfassung der Beiträge im System der Pro Litteris erschien mir viel zu aufwändig, als dass es sich für mich als Blogger lohnen würde.

Nun hatte ich neulich Gelegenheit, auf diesen Entscheid zurückzukommen. Und zwar aus zwei Gründen: Erstens habe ich in den letzten Jahren viel Erfahrung mit Word­press gesammelt. Zweitens hatte ich zwei Automatisierungslösungen getestet, die mir die Hoffnung nährten, dass ich meine bei Pro Litteris würde erfassen können, ohne sie einzeln, Blogpost für Blogpost, hinterlegen zu müssen.

Und in der Tat: Das hat geklappt. Und natürlich erkläre ich gerne, wie ich es gemacht habe:

Das System von Pro Litteris funktioniert so, dass gemessen wird, wie oft ein Artikel aufgerufen und gelesen wird. Dazu werden Zählmarken verwendet, die als Tracker auf der Seite platziert werden. Damit das System weiss, welche Autoren für einen Beitrag eine Vergütung zugute haben, muss man für jede Zählmarke den dazugehörenden Artikel im Backend der Organisation eintragen. Dort hinterlegt man die Zählmarken-ID, den Titel und den gesamten Inhalt. Letzteres ist deswegen nötig, weil die Beiträge eine gewisse Länge haben müssen, um entschädigungsberechtigt zu sein. Die Details dazu erkläre ich im bereits erwähnten Beitrag.

1) Zählmarken

Erstens muss man Pro Litteris ermöglichen, bei jedem Artikel zu zählen, wie oft er aufgerufen wird. Es braucht eine Art Tracker, der zum Glück maximal einfach konzipiert ist. Er besteht in einer unsichtbaren Grafik, die vom Server der Vergütungsorganisation abgerufen wird. Im Dateinamen steckt der Code des Verlags – das wäre in diesem Fall ich als Blogbetreiber – und ein Code für den Artikel.

In meinem Fall sieht dieser Aufruf wie folgt aus:

<IMG src="https://pl02.owen.prolitteris.ch/na/vzm.883910-22741" height="1" width="1" border="0">

Die Zählmarke ist in diesem Beispiel vzm.883910-22741, wobei die Zahl vor dem Strich die Kennung meines Blogs und die Zahl nach dem Strich die ID eines einzelnen des Artikels enthält. Ich verwende als ID der Einfachheit halber die Nummer, die der Artikel in der Word­press-Datenbank hat.

Wenn man sich mit den Interna des Content-Management-Systems auskennt, ist es keine Hexerei, diese Word­press-ID einzubauen: Man ergänzt den Code in der Seite single.php, die für die Anzeige eines einzelnen Beitrags zuständig ist. Die beiden Codezeilen für die obige Zählmarke sieht so aus:

$post_id = get_the_ID();
echo('<IMG src="https://pl02.owen.prolitteris.ch/na/vzm.883910-' . $post_id . '" height="1" width="1" border="0">');

Es ist sinnvoll, für diese Änderung ein Child-Theme zu verwenden. Die Details dazu beschreibe ich in anderen Zusammenhang im Beitrag Das perfektionistische Ende eines überambitionierten Projekts.

2) Erfassung der Beiträge im Backend

Damit werden die Aufrufe für die Beiträge gezählt. Das bringt aber nichts, solange nicht für jede Zählmarke ein Eintrag zum Blogpost erfasst wurde. Das könnte man von Hand machen, aber lieber wäre einem eine automatisierte Lösung – zumindest dann, wenn man ein fleissiger Blogger ist und pro Jahr mehr als eine Handvoll Artikel schreibt.

Für jeden Blogpost muss diese Eingabemaske hier ausgefüllt werden. Möchte man das von Hand für Hunderte Beiträge tun?

Dafür habe ich zwei Methoden evaluiert, die ich beide hier im Blog beschrieben habe: Erstens die Erweiterung Browserflow für Google Chrome (Wie man Aufgaben im Web automatisiert), zweitens Microsoft Power Automate (Microsofts hilfreicher Windows-Geist).

Aus Word­press exportieren und die Daten aufbereiten

Um diese Lösungen zu testen, musste ich die Daten zu meinen Beiträgen in passender Form bereithalten. Ich habe dazu mit dem Word­press-Plugin WP All Export Veröffentlichungsdatum, ID, Titel und Inhalt der Blogposts als CSV-Datei exportiert ¹. Da das Plugin den Inhalt mit HTML-Code exportiert, habe ich eine Bereinigung mit Notepad++ vorgenommen und die HTML-Codes mittels regulärer Ausdrücke entfernt.

Die wichtigsten Ersetzungen dafür sind die folgenden:

  • Suchen nach <(h1|h2|h3|h4|h5|i|em|b|code|strong|li|blockquote)>(.*?)<\/(h1|h2|h3|h4|h5|i|em|b|code|strong|li|blockquote)>, ersetzen durch $2
  • Suchen nach <a href=""(.*?)"">(.*?)</a>, ersetzen durch $2

Wenn die Tabelle mit dem Blogposts vorhanden ist, macht man sich an die Automatisierung. Bei Browserflow stellt man die Tabelle via Google Tabellen (Google Sheets) zur Verfügung, bei Microsoft Power Automate via Excel. Falls Excel die CSV-Datei nicht richtig einliest, hilft ein Konvertierungs-Programm weiter; ich habe mit online-convert.com gute Erfahrungen gemacht.

Ansonsten ist der Trick, bei Excel die Datei nicht direkt zu öffnen, sondern im Reiter Daten im Abschnitt Daten abrufen und transformieren die Option Aus Text/CSV zu wählen und die CSV-Datei als Dateiquelle in einer Tabelle einzubinden.

Microsoft Power Automate erhält den Zuschlag

Im direkten Vergleich war Browserflow zwar viel einfacher zu handhaben, doch Microsoft Power Automate hat einen robusteren Eindruck gemacht und es besser geschafft, alle notwendigen Aktionen auszuführen. Auch das Programm hat es nicht hinbekommen, alle Beiträge in einem Rutsch zu erfassen, was aber auch damit zu tun hatte, dass ich es nicht unterlassen konnte, nebenbei weiterhin mit Firefox zu arbeiten. (Ich habe die Automatisierung via Firefox vorgenommen, schlauer wäre aber auf alle Fälle gewesen, einen separaten Browser zu nutzen, der sich um nichts anderes kümmern muss.)

Microsoft Power Automate ist daran, Blogpost für Blogpost zu erfassen.

Fazit: Damit hat Power Automate den Praxistest bestanden. Ich bemängle die schlechte Dokumentation und die im Vergleich nicht gerade intuitive Syntax der Befehle. Aber die Software erledigt die Arbeit – und das obendrein kostenlos. Und darum lässt sich an dieser Stelle festhalten: Praxistest bestanden!

Fussnoten

1) Ein Nachtrag: Es gibt ein Plugin, das mir inzwischen noch besser gefällt, nämlich WP Import Export Lite: Das macht einen leichtfüssigeren Eindruck als WP All Export und hat obendrein den Vorteil, dass sich beim Exportieren via Filteroptionen das Datum berücksichtigen lässt: Wir müssen somit nicht Tausende von Blogposts exportieren, sondern nur diejenigen, die noch nicht erfasst sind.

Beitragsbild: Ein kleiner Datenroboter erspart es uns, selbst Hunderte von Datensätzen einzutöggeln (Kindel Media, Pexels-Lizenz).

2 Kommentare zu «Angewandte Web-Automatisierung»

  1. Raffinierte Lösung mit Power Automate! Aber es ginge einfacher: Pro Litteris bietet eine API.😉 Doku siehe https://prolitteris.ch/fileadmin/user_upload/ProLitteris/Dokumente/Informationen/onlinewerke/Integrationsbeschreibung_verlage_onlinewerke_entschaedigen_04-05-2019.pdf, Seite 23.

    Damit könntest Du für jeden Datensatz einen POST-Request absetzen, zum Beispiel mit PowerShell oder mit curl.

    Falls Du ein Projekt suchst: Das wäre ein Fall für ein eigenes WordPress-Plugin. Dieses würde den Zählpixel einfügen, sich in die Funktion „Beitrag erstellen“ einhängen und beim Veröffentlichen eines neuen Beitrages gleich über die API die Eintragung erledigen. Als Benutzer müsste man nur die ID sowie die ProLitteris-Zugangsdaten eintragen.

    Ich weiss nicht, ob sich das monetarisieren liesse, aber Dein Fame in der Schweizer Blog-Szene wäre gross. 😀

Kommentar verfassen