Ganz Hamburg ist im #Elphi-Fieber – wir auch 😉 Hier ein kurzer Werkstattbericht zum Liveblog zur Elbphilharmonie-Eröffnung, das unter live.flyp.tv/journal/elphi zu sehen ist.
Besonderheiten: Es ist (Stand 10. Januar, 22 Uhr) vollständig automatisiert. Vor einer Woche die Idee: „Ein Elphi-Liveblog muss her!“. Seither sammeln wir den Social-Media-Buzz um #Elphi und publizieren automatisch mit einem einfachen Algorithmus: offensichtlicher Spam wird ausgefiltert, Bild- und Video-Posts bevorzugt, Text-Posts kleiner dazu gepackt. Die Verteilung auf die Kacheln erfolgt zufällig.
Zeitaufwand bisher: ca. 4 Stunden.
Ob das am Eröffnungstag (das ist der 11.1.) so weitergehen kann, ist noch offen; ich bin gewappnet, den Stopword-Filter zu erweitern und manuell Posts zu löschen, die „stören“. Ich werde sicher manuell die Livestreams im Video-Bereich aktivieren: Der NDR wird fast den ganzen Abend live berichten (und streamen), und ARTE wird eine 360Grad-Liveübertragung machen.
Die einzelnen Schritte in FlypSite:
- Sammler-Einrichtung: Wir sammeln Twitter und Instagram (jeweils die Hashtags #elbphilharmonie, #elphi und #elbphi). So ganz klar sind die Hamburger da noch nicht, wie das Kind heißen soll…
- Außerdem sammeln wir alle Posts von der Facebook-Seite der Elbphilharmonie (elbphilharmonie.hamburg), Twitter-Posts und Retweets von @elbphilharmonie und Instagram-Posts von @elbphilharmonie.
- CSS-Tuning: Die Abteilung MMH („Mach-mal-hübsch!“) produziert direkt im FlypSite-Backend ein angepasstes CSS, wow! Zielgenau wurden Textfarben, Kachel-Hintergrund und Ränder angepasst.
- Ein erstes Video (der großartige Drohnenflug durch die Elbphilharmonie) auf die Video-Kachel packen. Der wird da nicht ewig stehen, hier ist er zum nach-sehen.
- Autopublishing/-trashing:
Als erstes: Den prominenten Platz neben dem Video bekommt die Elbphilharmonie (Alle Posts aus Punkt 2). Drei Pfeile gezogen und gut.
Dann: sechs der sieben Kacheln sollen automatisch mit den Hashtag-Posts aus Twitter und Instagram gefüllt werden. Da soll ein bisschen Magie am Start sein, deshalb nutze ich eine „Nashorn“-Engine für die Verteilung und Filterung, mit der ich per JavaScript ein paar einfache Regeln definieren kann. Die folgende Abbildung zeigt die Verkabelung: Hashtag-Sammler rein, Pfeile zu den Kacheln aus OUT1 bis OUT6, ein Pfeil aus OUT8 zum „Social Stream“, in dem ich nur Textnachrichten darstellen möchte. Und ein Pfeil zu einer „Aussortiert“-Liste, in die ich zur Kontrolle die Treffer meiner Blacklist route. - Nun noch die Logik für den Verteiler definieren:
Zunächst wird getestet, ob der Nachrichtentext Dinge enthält, die auf Spam hindeuten (definiert als Regular Expression in der Variable excludes). Wenn nicht, wird eine Zufallszahl zwischen 1 und 6 erzeugt; Textnachrichten werde auf den Ausgang 8, alle anderen Nachrichten auf den durch die Zufallszahl bestimmten Ausgang geleitet (flush). Für alle Nachrichtentypen wird die Layoutgröße noch angepasst; double ist das schöne Hochformat, in dem alle Bildposts angezeigt werden.
var excludes = /sex|#skycl|^RT |^The latest|wurde gerade veröffentlicht| wurde soeben publiziert|^TT|trending|Trend|#followback|#tagsforlikes/gi; if (message.text.match(excludes) == null) { var rand = Math.ceil(Math.random() * 6); if (message.layout == "message") { // Textnachrichten message.size = "base"; engine.flush(message, 'OUT8'); } else { // Bild-/Videonachrichten if (message.layout == "video") message.size = "base"; else message.size = "double"; engine.flush(message, 'OUT' + rand); } } else { engine.flush(message, 'OUT9'); }
Das wars. Das ganze „Plumber“-Schaubild für die FlypSite gibt’s bei Klick auf die Miniatur. Man sieht dort auch die „Standard-Verkabelung“, mit der Inhalte aus den Kacheln in den „Content Stream“ (der untere, wachsende Bereich der FlypSite) weitergeleitet werden, wenn in die Kacheln neue Inhalte einlaufen. Aber das ist normales FlypSite-Verhalten… Oh, und die Kachel rechts oben (mit Sternchen markiert) ist meine handbestückte Redakteurskachel: mal sehen, was da hinkommt?!
Bis zum 10.1. abends wurden bereits ca. 4.000 Nachrichten eingesammelt, davon verteilt über eine Woche ca. 3.500 automatisch veröffentlicht. Nur ca. 100 landeten in der Spam-Liste.
Das wird morgen wohl anders werden… Ich bin gespannt.
Nachtrag: Nach dem Event
Über die gesamte Eventzeit (3.1. bis 11.1. 24 Uhr) wurden über 16.000 Nachrichten eingesammelt; Instagram hat einen beachtlichen Anteil. Bei der Zahl der Facebook-Nachrichten ist zu beachten, dass bei Facebook keine Suche nach Hashtags o.ä. möglich ist; es wurden nur die Posts/Shares auf der Facebook-Page der Elbphilharmonie eingesammelt.
Ca. 20 spammende Accounts habe ich geblockt; wo möglich, habe ich aber versucht, die Spam-Muster zu erkennen und den Spam-Filter im obigen Script zu erweitern. Mit diesen Ausschlussbedingungen sind wir dann ganz gut gefahren:
var excludes = /Trump|^1|DSDS|follow|tendenz|blogpost|Lanz|ObamaFarewell|popular| sex|#skycl|^RT |^The latest|wurde gerade veröffentlicht|wurde soeben publiziert |^TT|trending|Trend|#followback|#tagsforlikes/gi;
Was man sieht: andere trendende Themen im Post sind ein guter Hinweis darauf, dass der Post nichts mit unserem Thema zu tun hat (Trump, DSDS, Lanz, ObamaFarewell). Unzählige Meldungen zu Trending Topics interessieren auch nicht wirklich (^TT, trending, Trend, ^1, popular). Bei Instagram sind #followback und #tagsforlikes meist ein guter Hinweis auf Posts, die nicht zum Thema passen. Und insbesondere ein Dienst, der jeden trending topic nutzt, um beliebige andere Themen zu posten, wurde ebenfalls ausgeschlossen (^The latest|wurde gerade veröffentlicht|wurde soeben publiziert).
100 % trennscharf sind diese Kriterien nicht, aber sie haben doch für ein erträglich niedriges Spam-Level gesorgt. Diese Liste ist eventspezifisch und muss gepflegt werden; trotz Automatisierung ist es daher nötig, die Nachrichten immer wieder zu sichten und gegebenfalls Spam zu löschen und den Filter zu erweitern.
Das war aber so überschaubar, dass ich mir gut nebenher das Eröffnungskonzert ansehen konnte 😉
Aus den etwas über 8.000 Bildnachrichten haben wir dann noch etwas ganz besonderes gemacht: #Elphi und ihre Hamburger: ein Bild aus 7000 Posts . Dafür wurden händisch ca. 600 Bilder aussortiert, die nur Firmenlogos oder anderen, mit der Elbphilharmonie nicht zusammenhängenden Bildinhalt zeigten. Die restlichen 7.419 Bilder wurden mit dem großartigen Programm photomosaic in ein 0,5 Gigapixel-Bild verwandelt und anschließend mit gdal2tiles in eine interaktive leaflet-Webanwendung umgewandelt und noch ein bisschen feingetunt. Have fun!
Nachtrag 2: Even more fun mit einem Replay
Die FlypSite „in Bewegung“ festzuhalten, war das Ziel einer weiteren kleinen haus-internen Produktion: Wir subskribierten die Beiträge aus dem #elphi-Event in einem neuen, leeren Event und ließen sie mit einem kleinen Javascript automatisch in den Eingang einlaufen. Von dort ging es dann mit dem Plumber (und einer „Round Robin“-Engine) weiter: sie verteilt die einlaufenden Nachrichten gemäß dem eingerichteten Plumbing (vgl. Abbildung) auf die Kacheln.
Das Ergebnis: