Gammelfleisch auf Twitter

Mein zweites Datenjournalismusprojekt: Der Twitteraccount @Mahlzeit_BY postet automatisch Verstöße gegen das Lebensmittelrecht in Bayern. So funktioniert’s:

Update: Der Bayerische Journalistenverband hat mich zu @Mahlzeit_BY interviewt.

Update 2: Wegen einer Entscheidung des Bayerischen Verwaltungsgerichtshofs wurde die Veröffentlichung der Verstöße ausgesetzt. @Mahlzeit_BY ist deshalb bis auf Weiteres inaktiv.

Vor ein paar Monaten habe ich mich ein bisschen mit Datenjournalismus auseinandergesetzt und als erstes Projekt die Geburtsorte aller Bundesligaspieler auf einer Karte visualisiert. Vergangene Woche habe ich ein Seminar zu Datenjournalismus von Marco Maas besucht, das mich für ein zweites Projekt motiviert hat: Ein Twitteraccount, der die Namen von Gaststätten postet, die in Bayern gegen das Lebensmittelrecht verstoßen haben. Inspiriert von der Restaurant Ratings Map der New York Times und von Lorenz Matzats Twitteraccount @Anfrage, der die Anfragen des Bundestags postet, allerdings basierend auf anderen Tools.

Datengrundlage für @Mahlzeit_BY ist eine regelmäßig aktualisierte Tabelle mit Verstößen gegen das Lebensmittelrecht, die das Bayerische Landesamt für Gesundheit und Lebensmittelsicherheit herausgibt. Das Gesundheitsamt bietet leider keinen RSS-Feed für den Datensatz an. Um die Daten automatisiert auszulesen nutze ich deshalb den Service Feed43, der daraus einen RSS-Feed generiert. Mit dem sehr nützlichen Tool If This Then That werden die Daten aus dem Feed dann automatisiert auf den Twitteraccount übertragen und abgeschickt.

Feed43 ist ein kleines Tool, das Webseiten automatisch ausliest und die Inhalte in einen Feed packt. Dafür muss man sich nicht einmal anmelden. Man muss Feed43 nur sagen, welche Inhalte in den Feed sollen und welche nicht.

Ich habe also die Seite des Gesundheitsamtes in Feed43 geladen. Eine Tabellenzeile im Ursprungsdokument sieht als Quellcode so aus:

Im nächsten Schritt muss man Feed43 sagen, welche Teile der Webseite ausgelesen und in den RSS-Feed gepackt werden sollen. Dafür nutzt man die Operatoren {%}, um den Content zu definieren und {*}, um mehrere {%}’s zu verknüpfen. Hört sich kompliziert an, ist aber gar nicht so schwierig. In diesem Fall sieht das dann so aus:

 

Im Fenster “Global Search Pattern” gibt man an, welcher Bereich der Seite überhaupt abgesucht werden soll. In diesem Fall ist das die komplette Tabelle, also der Bereich zwischen den beiden <tbody>-Klammern, die die Tabelle definieren. Der Rest der Seite wird ignoriert. Im zweiten Fenster “Item Search Pattern” wird nun das sich immer wiederholende Muster einer Tabellenzeile dargestellt. Die Tabellenzeile beginnt mit <tr>, dazwischen sind die Zellen, jeweils mit <td> markiert. Was zwischen <td> und </td> steht ist also der für uns interessante Inhalt.

Mit einem Klick auf “Extract” durchsucht Feed43 die Webseite nach dem Muster und zeigt an, was es gefunden hat.

Feed43 hat jetzt 114 Items gefunden, das heißt das oben definierte Muster hat sich 114 Mal wiederholt, die Tabelle hat also 114 Zeilen. Wenn alles geklappt hat (das ist etwas Fummelarbeit), gibt Feed43 nun für jeden {%}-Operator ein Ergebnis aus.

Im nächsten Schritt kann man mit den Operatoren {%1} bis {%8} den RSS-Feed layouten.

Der Titel ist in unserem Fall {%6}, nämlich Name und Adresse des getesteten Restaurants. Item Link ist logischerweise {%5}, der Link auf die Detailseite beim Gesundheitsamt. Diese beiden Inhalte wird der Twitteraccount später posten. Der Rest, also der eigentliche Content des Feeds, ist für den Twitteraccount egal, aber da er eh schon gescrapet wird, gebe ich ihn im Feed auch aus. Wie das Ganze dann als fertiger Feed aussieht, kann man sich hier anschauen.

Nun kommt If This Then That (IFTTT) ins Spiel. Dieses nützliche Tool verknüpft verschiedene Web-Dienste miteinander. Eigentlich ist IFTTT wohl konzipiert worden, um dem User den Alltag zu erleichtern. Dafür nutzt IFTTT einfache Wenn-Dann-Rezepte, zum Beispiel: “Wenn ich ein neues Foto bei Instagram hochlade, speichere eine Kopie in meine Dropbox”. IFTTT kann aber auch für Datenjournalisten interessant sein, immer dann, wenn Prozesse automatisiert werden sollen. In unserem Fall heißt das Rezept: “Wenn im RSS-Feed ein neuer Eintrag erscheint, poste ihn bei Twitter”:

 

IFTTT ist sehr einfach zu benutzen, aber äußerst effektiv. Alle 15 Minuten checkt das Tool, ob es im RSS-Feed was Neues gibt. Man kann noch einstellen, welche Teile des Feeds getwittert werden sollen, in unserem Fall sind das der Titel, also der Name der Gaststätte, und der Link auf die Detailseite beim Gesundheitsamt. Leider kann IFTTT nur mit jeweils einem Twitteraccount umgehen, weshalb ich für @Mahlzeit_BY einen neuen IFTTT-Account anlegen musste.

Schnell noch den Twitteraccount aufgehübscht und… fertig:

@Mahlzeit_BY postet nun fleißig die Verstöße gegen das Lebensmittelrecht in Bayern, solange das Gesundheitsamt das Layout seiner Tabelle nicht verändert. Leider habe ich es bisher noch nicht geschafft, die Umlaute und Sonderzeichen korrekt darzustellen, aber ich denke das kann auch noch behoben werden.

Kurzer Nachtrag: Das Umlautproblem ist gelöst. Wie von Michael im Kommentar erklärt, lag es an der UTF-8 Codierung, das kann man bei Feed43 einstellen. Außerdem habe ich nach einem Hinweis von Tobias eingerichtet, dass vor jedem Tweet ein “Verstoß bei:” steht, für selbsterklärende Retweets. Das kann man auch bei IFTTT einstellen. Der erste automatische Tweet, aktuell vom 21.1.2013 sieht übrigens so aus:

 

 

tl;dr: Ich lese eine regelmäßig aktualisierte Tabelle des bayerischen Gesundheitsamts mit dem Tool Feed43 automatisiert aus, erstelle damit einen RSS-Feed und schicke dessen Inhalt mit If This Then That an den Twitteraccount.

20. Januar 2013 von mzierer
Kategorien: Allgemein, Tutorial | Schlagwörter: , , , | 4 Kommentare

Kommentare (4)

  1. Sehr schöne Sache, Maximilian – und vorbildlich dokumentiert! +1

    Was die Sonderzeichen angeht: Du solltest mal checken, ob alle verarbeitenden Seiten UTF-8 als Encoding verwenden (und dein Browser auch).

    Die Seite des LGL ist auf jeden Fall in UTF-8, und Twitter auch. D.h., irgendwo auf der Strecke wird das Character Encoding verdreht. Es sieht für meine Begriffe nach Feed43 als Fehlerquelle aus (weil der 1. Screenshot schon die “falschen” Zeichen enthält) .

  2. Vielen Dank fürs konstruktive Feedback, freut mich!

    Ich denke auch, dass das Problem bei Feed43 liegt, man kann da auch verschiedene Encodings angeben, allerdings sollte er das eigentlich automatisch erkennen. Ich werde das mit UTF-8 auf alle Fälle noch testen.

  3. coole sache! und sehr schick, dass du es auch noch dokumentiert hast!

  4. Schöne Anleitung – ich konnte das wirklich innerhalb einer Dreiviertelstunde nachkochen. Allerdings war mir IFTTT für diesen Fall zu umständlich – ich hab’ einfach twitterfeed.com verwendet.

    Einziger Stolperstein bei feed43 ist, dass das Muster wirklich genau passen muss – ein Leerzeichen zu viel, und das Muster wird nicht mehr erkannt. Und natürlich ist das Suchraster, das feed43 anbietet, vergleichsweise simpel. (Für die Vollnerds unter uns: wenn man statt feed43 beispielsweise eine Yahoo Pipe einsetzt, kann man mit der Datenbank-Sprache YQL und sog. “regulären Ausdrücken” arbeiten.)

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert