Web-Crawling und Erreichbarkeitsvisualisierung
Transcrição
Web-Crawling und Erreichbarkeitsvisualisierung
Leopold-Franzens-Universität Innsbruck Institut für Informatik Datenbanken und Informationssysteme Web-Crawling und Erreichbarkeitsvisualisierung von Events Bachelor-Arbeit Nikolaus Risslegger betreut von DI Nikolaus Krismer Prof. Dr. Günther Specht Innsbruck, 31. Oktober 2015 Zusammenfassung Die Darstellung von Ereignispunkten - Points of Interest (POIs) im Web ist aus dem Umfeld der interaktiven Kartendarstellung kaum mehr wegzudenken. Die gängigen Umsetzungen haben jedoch alle gemeinsam, dass Informationen zur Erreichbarkeit eines Punktes nur unvollständig verfügbar sind. Entweder werden diese mit Hilfe eines öffentlichen Verkehrsmittels und nahegelegenen Haltestellen umgesetzt (wobei dann häufig auf den Weg zwischen Haltestelle und POI selbst vergessen wird) oder unter Verwendung eines PKWs. Sinnvoller für den Kunden, den Verkehrsteilnehmer, wäre es, bekannte Algorithmen aus dem Feld der Erreichbarkeitsanalysen zu verwenden, um Kombinationen mehrerer Verkehrsmittel zu erlauben. Genau dies ist das Ziel dieser Bachelor-Arbeit. Hier werden Isochrone verwendet, um das Einzugsgebiet“ eines POIs zu berechnen. Dafür nicht beliebi” ge Punkte zur Berechnung herangezogen, sondern nur solche, an denen eine Veranstaltung stattfindet. Es bedarf folgedessen der Umsetzung eines Crawling-Mechanismus, um geeignete Punkte zu ermitteln. Diese werden dann mit einer Isochronen-Berechnung kombiniert, um eine Erreichbarkeit für Events zu visualisieren. Abstract The visualisation of Point Of Interests (POI) is a well-known feature in interactive maps and hardly indispensable. The current solutions have in common, that information about the point’s reachability is incomplete. In many cases the reachability is calculated on basis of the public transport system (where the way between the bus stop and the event is mostly ignored) OR a car. More useful calculations for the customer could be computed with algorithms from the field of reachability analysis. This would improve the reachability information, since multiple transportation systems could be combined. That’s exactly the goal of this BSc thesis. Isochrones are used to calculated a reachability region“ of a POI. Furthermore, not ” all POIs are allowed as query point, only points where an event is planned. Therefore a crawling mechanism has to be implemented to get such points. These points are then combined with algorithms from isochrone algorithms to visualize the correct reachability of an event. Inhaltsverzeichnis 1 Einleitung 1.1 Aufgaben und Ziele . . . . . . . . . . . . . . . . . . . . . . 1.2 Inhaltlicher Aufbau der Arbeit . . . . . . . . . . . . . . . 2 Grundlagen 2.1 Mashups . . . . . . . . . . . . . . . . . . 2.2 Web-Mapping . . . . . . . . . . . . . . . 2.2.1 Anforderungen an Kartensysteme 2.2.2 Vorteile digitaler Kartensysteme 2.3 State of the Art . . . . . . . . . . . . . . 2.3.1 Event-Karten . . . . . . . . . . . 2.3.2 Öffentliche Verkehrsdaten . . . . 3 Umsetzung 3.1 Event Crawling . . . . . . . . . . . . 3.1.1 POI-Anbieter . . . . . . . . . 3.1.2 Import der Daten . . . . . . . 3.2 Server und verwendete Technologien 3.2.1 Datenbank und ORM . . . . 3.2.2 Caching der Daten . . . . . . 3.2.3 Ruby on Rails . . . . . . . . 3.3 REST-API . . . . . . . . . . . . . . 3.3.1 Grundlagen . . . . . . . . . . 3.3.2 Aufbau . . . . . . . . . . . . 3.4 Event Visualisierung . . . . . . . . . 3.4.1 Technische Grundlagen . . . 3.4.2 Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 . . . . . . . 3 4 7 7 8 9 9 10 . . . . . . . . . . . . . 13 14 14 17 21 22 24 24 28 28 30 32 32 36 4 Ausblick 38 Abbildungsverzeichnis 39 Literaturverzeichnis 44 III Kapitel 1 Einleitung Ein digitales Kartensystem bietet heutzutage neben der klassischen Kartenansicht und eines Navigationssystems weitere Funktionen an. Google Maps beispielsweise, visualisiert die aktuelle Verkehrslage, integriert Geschäfte und Firmen und zeigt deren Informationen meist in Verbindung mit google+ an, wie z.B. die Öffnungszeiten, Benutzerbewertungen oder Angebote. Microsoft Bing, Apple Karten sowie OpenStreetMap verfügen über ähnliche Angebote und Dienstleistungen. Trotz den vielfältigen Möglichkeiten, die die digitalen Kartensysteme bisher bieten, stehen sie bei manchen Diensten vor Schwierigkeiten. Ein Beispiel ist die Integration von Daten der öffentlichen Verkehrsmittel. Viele Verkehrsbetriebe stellen ihre Daten nicht der Allgemeinheit über eine offene Schnittstelle zur Verfügung, was eine Integration kaum ermöglicht. Außerdem besteht die Schwierigkeit, die regionalen Verkehrsbetriebe (z.B. Wiener Linien, Verkehrsverbund Tirol) mit größeren Betrieben (z. B. ÖBB, DB etc.) zu synchronisieren. Die vorliegende Arbeit beschäftigt sich mit einer weiteren Möglichkeit: der Interaktion von Eventdaten bzw. sogenannten Points of Interest (POIs). Es stehen verschiedene Anbieter von POIs zur Verfügung, die eine relativ ähnliche Struktur besitzen, aber nicht einfach miteinander genutzt werden können. In dieser Sparte hat sich noch kein Anbieter global absetzen können und regionale Anbieter konkurrieren mit Hilfe von sozialen Netzwerken um die Vormachtstellung. 1.1 Aufgaben und Ziele Die zwei Komponenten - Web-Mapping und digitale Eventkalender - sollen in einer Applikation vereint werden. Neben allen Features einer interaktiven Karte sollen ausgewählte Events im umliegenden Bereich aufscheinen. Dem Nutzer werden Filteroptionen und Detailansichten ermöglicht. Dabei ist darauf zu achten, dass 1 KAPITEL 1. EINLEITUNG die Benutzbarkeit und die Übersichtlichkeit des gesamten Systems nicht darunter leidet, sondern die Eventdarstellung als leichtgewichtiges Plugin implementiert ist. Wesentlich hierbei ist, den Benutzer nicht mit zu viel Informationen zu überfordern, sondern die Veranstaltungen zu gruppieren und die Anzeige durch ein Filtersystem zu regulieren. Außerdem soll die Eventvisualisierung in ein bestehendes System eingebettet werden, das eine Isochronen-Berechnung für öffentliche Verkehrsmittel bereitstellt. Isochrone bezeichnen in der Verkehrsgeographie die Verbindungslinien aller Orte, die von einem Ausgangspunkt aus in der selben Zeit erreichbar sind. Eine Isochronen-Karte, selbst oft unter dem Begriff Isochrone“ ” geführt, ist demnach eine Landkarte, die jene Verbindungslinien darstellt. Isochronen-Karten werden seit mindestens vierzig Jahren in der Stadt- und Verkehrsplanung herangezogen. [GBCI11] Mit dieser Technik ist es möglich, die Einzugsgebiete für die einzelnen Punkte zu berechnen und die aktuellen Events im jeweiligen Isochron anzeigen zu lassen. Die Eventdaten werden von einer offenen Schnittstelle ausgelesen und müssen nicht manuell eingetragen werden. Dieses Event-Crawling soll im Hintergrund ablaufen und den Benutzer in keinster Weise berühren. Dabei wird keine neue Plattform erstellt, sondern bestehende Eventprovider genutzt und deren Daten in das System integriert. Die Administration der Anwendung wird dadurch erheblich minimiert. 1.2 Inhaltlicher Aufbau der Arbeit Nach der Einleitung beschäftigt sich Kapitel 2 mit den Grundlagen von web-mapping-Systemen und erörtert den aktuellen Stand der Forschung (2015). Dabei werden die wichtigsten Begriffe in Bezug auf die Arbeit abgegrenzt. In Kapitel 3 werden die technischen Schwerpunkte der Arbeit dargestellt. Zunächst werden die serverseitigen Strukturen definiert und die Schwierigkeiten bei der Importierung der Event-Daten gezeigt. Der Aufbau der eigens erstellten REST-API wird ebenfalls in diesem Kapitel dargelegt. Es folgt die Beschreibung der Implementierung des Clients und eine kurze Einleitung über die Verwendung des Apps. Zum Schluss werden in Kapitel 4 Optimierungsmöglichkeiten an der Datenbank und mögliche Verfahren für eine Erweiterung des ImportVerfahren erörtert. Die Quellen bzw. Informationen der Abbildungen befinden sich im Abbildungsverzeichnis. 2 Nikolaus Risslegger Kapitel 2 Grundlagen Die stetige Weiterentwicklung der Browser und des HTML-Standards ermöglichen heute eine einfache plattformunabhängige Programmierung. Applikationen nutzen die Interaktion mit den Benutzern bzw. verbinden sich mit anderen Web-Services und verwenden deren Ressourcen. Das entwickelte System basiert auf den Grundsätzen einer web 2.0 Applikation: [KHW08] [Ker06] • Generischer Inhalt: Die Daten werden von Benutzern editiert und erstellt. Folglich wächst durch eine rege Community der Inhalt des Tools. • Das Web als Plattform: Die Plattform ist in jedem HTML5fähigen Browser nutzbar und eine eigene Adaption des Tools auf die verschiedenen Endgeräte, wie Smartphones oder Tablets, ist nicht nötig. • Vernetzung: Web-Apps nutzen Komponenten und Web-Services, die von anderen Entwicklern bereitgestellt werden. Einzelne Dienste werden nicht getrennt genutzt, Webinhalte und Dienste werden über offene Programmierschnittstellen von anderen Diensten verwendet. • Software Updates: Der klassische Software-Lebenszyklus ist hinfällig. Serverseitige Updates bemerken die Benutzer nicht, clientseitige Apps werden nach einer Aktualisierung neu geladen. Bei dieser Arbeit handelt es sich beim Client um eine HTML5-Anwendung, sie benötigt somit keine zusätzliche Software und ist auf allen Endgeräten (Desktop, Tablet, Smartphone) benutzbar. Durch die Verwendung verschiedener Ressourcen von unterschiedlichen Quellen (Event-Daten und die Fahrpläne der öffentlichen Verkehrsmittel) kann dieses App als Mashup eingestuft werden. Der Begriff Mash” up“ wird in Kapitel 2.1 abgegrenzt. 3 KAPITEL 2. GRUNDLAGEN Die zentrale Ansicht der App ist eine interaktive Kartenansicht. Die Entwicklungen in diesem Bereich werden in Kapitel 2.2 erläutert. In Kapitel 2.3 werden aktuelle Technologien und Verfahren von vergleichbaren Anwendungen gezeigt. 2.1 Mashups Mashups sind Webapplikationen, die sich durch die Verwendung und Integration von unterschiedlichen Quellen auszeichnen. Gartner definiert in [RSHM08] Mashups wie folgt: A mashup is a lightweight tactical integration of multisourced applications or content into a single offering. Die Verzahnung der Applikationen untereinander und Integration externer Daten ist eine gängige Methode, um Applikationen einfacher, kostengünstiger und sicherer zu entwickeln. Die führenden Internetunternehmen wie Yahoo1 , Facebook2 und vor allem Google3 bieten zumindest einen Teil kostenfrei über APIs (Application Programming Interface) an. Für die Service-Provider ermöglicht sich somit ein sicherer Weg, dass ihre Daten auch von externen Applikationen genutzt werden. Damit wächst der Bekanntheitsgrad des Providers, dessen Daten verwendet und kostenlos durch die Benutzer aktualisiert werden. Durch eine mögliche Benutzer-Authentifizierung über die externe Applikation (z.B. OAuth 2.0 - siehe Kapitel 3.1.2) werden auch weitere Informationen über den Endbenutzer gesammelt. Als häufige Schnittstelle zur Kommunikation zwischen Diensten werden REST-APIs (siehe Kapitel 3.3) verwendet. Abbildung 2.1 zeigt den Grad der Integration von externen Diensten in neue Services und gliedert die Mashups in drei Stufen. • Mashups der ersten Stufe: Es werden externe Daten von einer API geladen, um sie dann umformatiert in der eigenen Web-App oder der Homepage anzuzeigen. Beispiele hierfür sind Beiträge aus Social Media-Kanälen (tweets, instagram-fotos), Like-Boxen oder Gefällt mir-Angaben von Facebook. Für den Anbieter ist die Einbettung eine indirekte Erlösquelle und erreicht somit weitere Benutzer. Außerdem werden Cookies gesetzt, um das Surfverhalten der Benutzer zu analysieren. Diese Daten werden vom Anbieter weiterverwendet. 1 developers.yahoo.com facebook.com/developers 3 developers.google.com 2 4 Nikolaus Risslegger KAPITEL 2. GRUNDLAGEN Abbildung 2.1: Klassifikation von Mashups • Mashups der zweiten Stufe: Die Inhalte werden in die WebApplikation eingebunden und mit bestehenden Inhalten kombiniert. Beispielsweise nutzt ein Immobiliendienst Google Maps und stellt auf der Karte umliegende Verkaufsobjekte dar. Das Ziel ist es, mit fremden Inhalten die eigene Applikation zu erweitern und dem Nutzer einen höheren, für ihn positiven Nutzen, zu bieten. • Mashups der dritten Stufe: Inhalte und Anwendungen von zwei oder mehr Anbietern werden kombiniert, dass die Anwendung einen völlig neuen Dienst darstellt. In diese Kategorie kann diese Bachelorarbeit eingestuft werden. Die Anzahl von Mashups steigt stetig an, dadurch hat auch die Verwendung von Web-APIs in den letzten Jahren stark zugenommen. Abbildung 2.2 zeigt den rasanten Anstieg der Anzahl von Web-APIs und die Wichtigkeit für die führenden Anbieter, auf dem Markt präsent zu sein. Nikolaus Risslegger 5 KAPITEL 2. GRUNDLAGEN Abbildung 2.2: Anstieg der Web-APIs von 2005 bis 2013 ProgrammableWeb analysiert und listet die beliebtesten Web-APIs auf:4 1. Google Maps: Google Maps API erlaubt den Zugriff über eine REST-Schnittstelle, die eine einfache Einbindung über Javascript oder eine serverseitige Integration ermöglicht. 2. Twitter: Das Blogging Service des Dienstes beinhaltet zwei RESTful APIs, um Daten aus dem Netzwerk abzufragen und zu posten. 3. YouTube: Die von Google übernommene API unterstützt alle Aktionen zum Hinzufügen, Suchen etc. von Videos. 4. Flickr: Das von Yahoo geführte Foto-Portal stellt eine API zur Verfügung, mit der Bilder, Feeds, Freunde etc. ausgelesen und bearbeitet werden können. 5. Facebook: Die Facebook-API (siehe 3.1.2) bietet alle Methoden an, um mit dem sozialen Netzwerk interagieren zu können. Das gesamte Projekt ist als Mashup verschiedenster Technologien zu sehen: Die Eventvisualisierung kann als Plugin in die Doktorarbeit isochrone-web von Nikolaus Krismer gesehen werden. Isochrone-web nutzt als Kartendienst leaflet5 und verwendet die Daten von diversen Verkehrsbetrieben. Leaflet ermöglicht auch weitere Layers wie z.B. von Bing-Maps oder Google-Maps zu visualisieren. Die gesamte 4 6 www.programmableweb.com/category/all/apis?order=field_popularity Nikolaus Risslegger KAPITEL 2. GRUNDLAGEN Funktionsweise und die Integration der unterschiedlichen Webdienste wird in Kapitel 3 erklärt. 2.2 Web-Mapping Die Kartenansicht ist die zentrale Ansicht für den Endbenutzer des Tools, damit erfolgen alle Interaktionen und die Auswahl der Events. Die digitale Kartentechnologie wurde 2005 populär, als Google Maps6 2005 seinen Kartendienst veröffentlichte und die Kartennutzung revolutionierte. Traditionell werden Pläne und Karten auf Papier gedruckt, wobei ihre thematischen Ebenen wie Gelände, Straßen, Flüsse in unterschiedlichen Farben, Schattierungen, etc. gekennzeichnet werden. Bis zum Ende des 20. Jahrhunderts war dies die einzige Möglichkeit, kartographisches Wissen weiterzugeben. Mittlerweile gibt es eine breite Sparte an digitalen Kartenanbietern: Google Maps, Bing Maps, Apple Karten oder Leaflet sind die bekanntesten, daneben gibt es weitere kleine und regionale/nationale Landkartensysteme. Karten kategorisieren, definieren, arrangieren, lokalisieren bestimmte Gebiete der Erdoberfläche und erleichtern die Denkweise und das Handeln auf vierlerlei Hinsicht, es veranschaulicht für den Benutzer raumbezogene Daten und schwer formulierbare räumliche Zusammenhänge. In Kapitel 2.2.1 werden die klassischen Anforderungen und Aufgaben der klassischen Kartographie erläutert, anschließend bringt Kapitel 2.2.2 die Vorteile digitaler Kartensysteme näher. 2.2.1 Anforderungen an Kartensysteme Kartographie behandelt die Interpretation und Darstellung von raumbezogenen Informationen: die Sachaussage über ein Objekt und dessen geometrische Festlegung in einem Bezugssystem. Kartographische Darstellungen bestehen aus einem System geometrisch gebundener Zeichen aus einem endlichen, mit vereinbarter Bedeutung versehenen Zeichenvorrat. Darunter ist die Karte am bedeutsamsten; die übrigen Formen (Luftbild, Panorama, Globus) gelten als kartenverwandte Darstellungen. [HGM94] Das Hauptproblem analoger Karten ist der begrenzte Raum und die Schwierigkeit, relevante Informationen übersichtlich darzustellen. Entweder ist die Karte auf ein bestimmtes Gebiet spezialisiert und kann 5 6 www.leafletjs.com www.google.com/maps Nikolaus Risslegger 7 KAPITEL 2. GRUNDLAGEN in diesem Landkreis viele Details darstellen oder es werden bei einem entsprechend großen Maßstab auf nicht relevante Daten verzichtet. 2.2.2 Vorteile digitaler Kartensysteme Die technischen Möglichkeiten, die Zugänglichkeit von öffentlichen Daten und die rasche Entwicklung von Informations- und Kommunikationstechnologien haben in den letzten Jahren in der Kartographie für grundlegende Änderungen und Vorteile gesorgt. Geodaten und geographische Anwendungen waren zuvor nur für Experten zugänglich. Heute kann die breite Öffentlichkeit mit den Hilfsmitteln ohne gröbere Kenntnisse über Geodaten oder Kartographie die Online Maps nutzen. Für alltägliche Handlungen wie die Auswahl des nächsten Cafés oder Bestimmung einer Route mit inkludierten Echtzeitdaten der Verkehrslage werden heute Karten-Applikationen benutzt. Dies liegt an den vielen Erleichterungen und Vorteilen, die die digitale Darstellung bringt: • Flexibilität: Bei analogen Plänen muss ein Maßstab gewählt werden: Dabei muss ein Kompromiss zwischen der dargestellten Fläche und der detaillgetreuen Darstellung getroffen werden. Eine digitale Karte lässt sich beliebig benutzen, sie lässt sich ohne Schwierigkeiten verkleinern oder vergrößern. • Interaktion: Moderne Kartensysteme arbeiten mit sozialen Netzwerken, Verkehrsbetrieben und weiteren Plattformen zusammen. So kann bei einer Firmensuche gleichzeitig die Route geplant werden, wobei das aktuelle Verkehrsaufkommen (siehe Abbildung 2.3) bei der Berechnung berücksichtigt wird. • Layers: Eine statische Karte spezialisiert sich auf ein bestimmtes Thema: beispielsweise Wanderkarten, topologische Karten oder historische Karten. Bei modernen Systemen können die Ebenen (=layers) beliebig gewählt werden. Google Maps7 bietet eine Schnittstelle an, womit Benutzer eigenständig neue Objekte in die Karte eintragen bzw. bestehende Karten ausbessern können. • Aktualisierung: Analoge Kartensysteme sind nach einiger Zeit nicht mehr aktuell, da Landstriche umgewidmet werden oder Neubauten entstehen. Die Aktualisierung der online-Mapping übernimmt meist der Betreiber, außer der Betreiber ist die Community selbst (OpenStreetMap). 7 8 www.google.at/mapmaker Nikolaus Risslegger KAPITEL 2. GRUNDLAGEN Abbildung 2.3: Darstellung der normalen Verkehrslage in Innsbruck montags, 9:00 Uhr (google maps) 2.3 State of the Art Nachdem das World Wide Web 1989 enstand, gab es schon wenige Jahre später die erste web-mapping Anwendung: Der von Xerox entwickelte PARC Map Viewer verwendete eine geographische Datenbank um Daten on demand zu erstellen und anzuzeigen. [Put94] Viele Länder entwickelten eigene regionale Kartensysteme. Um 2005 erreichten die Dienste Multimap (Großbritannien) bis zu 7.3 Millionen, Mapquest (USA) 47 Millionen Besucher. Google revolutionierte mit den Diensten Google Maps und Google Earth die digitale Kartographierung. Schon 2007 wurde Google Maps von über 71 Millionen Besuchern genutzt und es gab über 50.000 Webseiten die die Dienste von Google verwendeten. [HSP08] Mittlerweile nutzen mehrere Millionen Besucher Map-Anwendungen täglich und wie im vorherigen Kapitel beschrieben, entwickeln sich die WebMapping-Systeme in vielen Arten weiter. Die Problemstellung dieser Arbeit, die Integration von Eventdaten in ein Kartensystem wird bis dato von keiner App berücksichtigt, dies zeigt folgendes Kapitel 2.3.1. Anschließend wird in Kapitel 2.3.2 die aktuelle Lage des Datenexports von öffentlichen Verkehrsmitteln beschrieben. 2.3.1 Event-Karten Die Darstellung von Events ist für die Karten-Betreiber bis dato nicht implementiert. Einzig Google Maps liefert brauchbare Daten: Wie Abbildung 2.4 zeigt, werden bei einer Suche nach Veranstaltungen oder Nikolaus Risslegger 9 KAPITEL 2. GRUNDLAGEN Events die Veranstaltungszentren geliefert, Veranstaltungsdaten sind jedoch nicht sichtbar. Abbildung 2.4: Ergebnisse der Suche Events in Innsbruck via Google Maps Um eine große Anzahl von Datensätzen anzuzeigen, verwendet Google Maps unterschiedlich große Marker: sichtbare Einträge in der Liste links werden hervorgehoben, andere erscheinen als kleinere Punkte. Diese Technik eignet sich bei großem Zoomfakter gut, bei größerem Maßstab verliert der Benutzer schnell den Überblick. Ein Clustering der Daten wäre von Vorteil. Microsofts Kartendienst Bing Karten und OpenStreetMap liefern zu den Suchtermen Events“ oder Veranstaltungen“ keine sinnvollen Ergebnis” ” se. 2.3.2 Öffentliche Verkehrsdaten Die Integration von Daten aus den öffentlichen Verkehrsbetrieben ist in Österreich nicht einfach. Es gibt für jedes Bundesland eigenständige Betriebe (Tiroler Verkehrsbetriebe, Kärntner Linien, etc.), die nur widerwillig ihre Daten für die Öffentlichkeit zugänglich machen. Das Thema Open Data wird stiefmütterlich behandelt. Derzeit wird an einer österreichweiten, einheitlichen Lösung gearbeitet, die bei der Verkehrsauskunft Österreich angesiedelt werden soll. Es sei nicht sinnvoll, wenn jedes Verkehrsunternehmen und jeder Verkehrsverbund eine eige” ne Open Data-Lösung“ aufbaue. Bei Verwendung von Google Maps fällt auf, dass die Daten der ÖBB integriert sind, diese haben einen exklusiven Vertrag für die Verwendung der Daten. Die Initiative offene Öffis schildert das Problem:8 10 Nikolaus Risslegger KAPITEL 2. GRUNDLAGEN Die ÖBB hat bewiesen, dass es für sie technisch kein Problem ist, ihre Daten anderen zu geben – sie hätte dies problemlos auch als Open Data machen können, so dass auch andere Unternehmen die ÖBB-Daten in ihre Apps und Services integrieren können. Österreichweit bieten momentan nur die Linz AG9 und die Wiener Linien10 ihre Abfahrtsdaten und Routenplanung als Open Data an. 8 www.offene-oeffis.at/2013/12/17/google-bekommt-oebb-daten/ data.linz.gv.at/daten/LinzAGLinien/ 10 open.wien.at/site/datenkatalog/?search-term=wiener+linien& connection=and#showresults 9 Nikolaus Risslegger 11 Kapitel 3 Umsetzung Für die Umsetzung des Projektes wird eine Server-Client-Architektur gewählt, die die Aufgaben hat, das Event-Crawling und die Visualisierung sinnvoll zu teilen. Abbildung 3.1 visualisiert das Schema des entwickelten Systems, wobei alle Komponenten seperat weiterentwickelt werden können. Abbildung 3.1: Aufbau des Systems Es gibt einen eigenständigen Server, der die Veranstaltungen von externen Quellen importiert, aufbereitet und über eine REST-Schnittstelle anbietet. Die Daten können von mehreren verschiedenen Client-Systemen genutzt werden. Welche Schwierigkeiten das Crawling und Zwischenspeichern von Events von den Big Data-Anbietern wie Twitter, Facebook oder Google bereitet, wird in Kapitel 3.1 beschrieben. In Kapitel 3.2 wird die Wahl des relationalen DB-Managementsystems und der Aufbau der Serverarchi13 KAPITEL 3. UMSETZUNG tektur erläutert. Die Aufrufe und der Aufbau der REST-API wird in Abschnitt 3.3 beschrieben. Die clientseitige Arbeit, genauer die Visualisierung und die Integration in das Projekt IsoMap“ wird in Kapitel 3.4 erläutert. ” 3.1 Event Crawling Um die Entwicklung und vor allem die Administration einer eigenständigen Event-Plattform zu vermeiden, werden die POIs aus einem öffentlichen Veranstaltungsportal geladen. Die Prioritäten bei der Auswahl des Anbieters werden nachfolgend aufgelistet: • Angebot: Die Plattform muss regional unabhängig sein und ein möglichst breites Spektrum von Veranstaltungen abdecken. • Preis: Die Administration für den Veranstalter, sowie der remoteZugriff für die Applikation, dürfen keine Kosten verursachen. • ständige Verfügbarkeit, Wachstum: Die Plattform sollte auch in Zukunft weiter bestehen und zu jeder Zeit erreichbar sein. • Attribute: Geo-Informationen der POIs sind essentiell notwendig, andere Attribute wie Eintrittspreise, Veranstalter etc. sind vernachlässigbar. Das Kapitel 3.1.1 beschreibt Vor- und Nachteile ausgewählter Anbieter und erklärt, warum Facebook als Schnittstelle gewählt wird. Der Authentifizierungs-Prozess und der Import der Daten werden in Kapitel 3.1.2 erläutert. 3.1.1 POI-Anbieter Die Veranstaltungsorganisation von Tourismusbetrieben, Verkaufsstellen, Gemeinden, etc. wird unterschiedlich gelöst. Die Eventkalender sind in den kleinen, regionalen Anbietern statisch in ihren Websiten eingebunden. Der wichtigste Punkt für die Anbieter ist meist ein gutes Ranking bei Suchmaschinen. Dies wird durch Search Engine Optimization - das Einfügen von Metadaten, entsprechende HTML-Tags - erreicht, und ist aus marketingtechnischer Sicht wichtiger, als eine Schnittstelle zum Abgreifen der Daten bereitzustellen. Ein Feature von Google zeigt (siehe Abbildung 3.2) aktuelle Veranstaltungen in der Umgebung als Feed. Um in dieser Ansicht aufzuscheinen, müssen die Daten in einem vorgegebenen Schema1 in den Websiten deklariert werden, um von Google als Veranstaltung erkannt zu werden, das Listing 3.1 zeigt ein Beispiel. 1 14 schema.org/Event Nikolaus Risslegger KAPITEL 3. UMSETZUNG Abbildung 3.2: Darstellung von Events mit der Google-Websuche mit Hilfe von schema.org Event-Tags Listing 3.1: Event-Schema < s c r i p t t y p e=” a p p l i c a t i o n / l d+j s o n ”> { ” @context ” : ” h t t p : // schema . o r g ” , ” @type ” : ” TheaterEvent ” , ”name” : ”Noch e i n m a l v e r l i e b t von Joe D i P i e t r o ” , ” u r l ” : ” h t t p : //www. k e l l e r t h e a t e r . a t / s p i e l p l a n / 4 7 / noch− einmal−v e r l i e b t . htm” , ” s t a r t D a t e ” : ” 2 0 1 5−0 8−0 6T2 0 : 0 0 : 0 0 . 0 0 0 ” , ” location ” : { ” @type ” : ” P e r f o r m i n g A r t s T h e a t e r ” , ”name” : ”INNSBRUCKER KELLERTHEATER” , ”sameAs” : ” h t t p : //www. k e l l e r t h e a t e r . a t ” , ” address ” : { ” @type ” : ” P o s t a l A d d r e s s ” , ” s t r e e t A d d r e s s ” : ” Adolf−P i c h l e r −P l a t z 8 ” , ” a d d r e s s L o c a l i t y ” : ” Innsbruck ” , ” addressRegion ” : ” Tirol ” , ” postalCode ” : ”6020” , ” a d d r e s s C o u n t r y ” : ”AT” } } } </ s c r i p t > Die Websites müssten eigens indiziert und gecrawlt werden, da Google keine Export-Möglichkeit der fertigen Daten anbietet (Stand Juli/2015). Dafür würde ein großes Serversystem benötigt werden, um selbst nur einen kleinen Teil des world-wide-webs zu crawlen. Folgend wird eine Importquelle aus diversen Event-Plattformen oder den Social MediaNetzwerken gesucht. Event-Netzwerke Ein POI-Netzwerk zeichnet sich durch die Interaktionen mit den Benutzern und das dadurch stetig wachsende Angebotsprogramm aus. Im Vergleich zu Single-Pages wird das Administrations-Recht der Events von einigen einzelnen Berechtigten auf alle registrierte Benutzer übertragen. Der wichtigste Punkt einer Eventplattform ist somit die Benutzeranzahl, Nikolaus Risslegger 15 KAPITEL 3. UMSETZUNG daraus folgt der Wiedererkennungswert und die Marktpräsenz. Upcoming“ war von 2004 bis April 2013 ein solches, stark frequen” tiertes Veranstaltungsportal. Es kombinierte die Funktionen eines sozialen Netzwerkes und einer Eventdatenbank. Das Portal wurde durch die starke Usercommunity populär, erweiterte Filterfunktionen für Veranstaltungen rundeten das Angebot ab. 2007 wurde die Plattform von Yahoo! übernommen und begann anschließend Veranstaltungen von kommerziellen Quellen zu importieren. Neben den bestehenden Exportmöglichkeiten via iCalendar und RSS, stand auch die Möglichkeit zur Verfügung, die Daten über eine offene API-Schnittstelle zu suchen und zu verwalten. 2013 wurde das Portal geschlossen, wobei der Gründer Andy Baio 2014 eine KickstarterKampagne (30.000 Dollar in 90 Minuten) erfolgreich durchführte, um das Portal wiederzueröffnen. [Bal14] [Bai13] Bis dato ist das Projekt2 aber noch nicht online. Eine Alternative stellt die Plattform Eventful“ 3 dar. Gegründet wurde ” der Online-Event-Manger im Jahr 2004 und ist mittlerweile eine SubMarke der CBS Corporation. Wie bei ähnlichen Plattformen übernehmen die registrierten Benutzer die Administration der Veranstaltungen. Daneben stehen klassische Filtermöglichkeiten nach Zeit, Künstler, Ort und anderen Tags zur Verfügung. Die Suchmöglichkeit steht auch über eine API4 zur Verfügung, welche die Daten in XML liefert. In Europa ist die Plattform kaum bekannt und besitzt wenig Events, weshalb sie als Importquelle für das Projekt ausscheidet. Soziale Netzwerke, allen voran Google+, Twitter oder Facebook, erweitern stetig ihren Umfang und bieten unter anderem folgende Funktionen an: Private und öffentliche Gruppen ermöglichen den Interessensaustausch unbekannter Personen; Hashtagging vereinfacht die Kategorisierung öffentlicher Beiträge in Themengebiete. Es gibt ebenfalls Integrationen von Veranstaltungsplattformen in den sozialen Netzwerken. Weiters erstellen Firmen, Sportvereine, Organisationen und öffentliche Personen Seiten, um ihre Fans mit Neuigkeiten zu versorgen. Die Verbindung wird nach dem Producer-Consumer-Modell aufgebaut: Die Follower erhalten nach dem Abonnement der Seite alle Benachrichtigungen derselben. Durch die gute internationale wie regionale Präsenz und der ausgereiften API erfolgt der Veranstaltungsimport über Facebook. [ZZ11] Es gibt keinen vergleichbaren Anbieter, der einen ähnlich großen Benutzerstamm und folglich dementsprechend viele Veranstaltungen beinhal2 upcoming.org eventful.com 4 api.eventful.com/docs/events/search 3 16 Nikolaus Risslegger KAPITEL 3. UMSETZUNG tet und diese weiters über eine offene Schnittstelle anbietet. Google+ scheidet als brauchbare Alternative aus, da in unseren Gegenden dieses Netzwerk nicht ausreichend genutzt wird. Facebook als Eventanbieter Als erster Schritt muss eine Veranstaltung durch eine öffentliche Seite oder eine Privatperson angelegt werden (Abbildung 3.3). Die wichtigste Einstellung ist die Sichtbarkeit: Öffentliche Events werden von Suchmaschinen indiziert und jeder kann die angegebenen Informationen auslesen. Privatveranstaltungen sollten als solche gekennzeichnet werden, um unnötige Resonanz zu vermeiden. Abbildung 3.3: Sichtbarkeitseinstellungen eines Events, Facebook Facebook legt das Hauptaugenmerk auf die Interaktion mit den Benutzern: Auf der Pinnwand der Veranstaltung können Videos, Fotos oder Statusupdates gepostet werden. Dadurch werben die Teilnehmer indirekt bei deren Freunden für das Ereignis. Für den Veranstalter ist das ein Vorteil, er erreicht kostengünstig potentielle Teilnehmer. Der Kontakt mit den Besuchern vereinfacht sich ebenfalls: Über die Plattform können Updates bezüglich Wetter oder Anfahrt kommuniziert werden. 3.1.2 Import der Daten Alle großen Web-Plattformen wie z.B. Twitter, Facebook, Yahoo oder Google bieten ihre Daten über verschiedene Schnittstellen an. Dabei verfolgen die Unternehmen unterschiedliche Ansätze, sei es das Format für den Request, die Authentifizierung oder die Response-Daten: Yahoo ermöglicht den Zugriff ihrer Daten über eine an den SQL-Standard angelehnte Abfragesprache (YQL - Yahoo Query Language). Listing 3.2 zeigt eine Abfrage mit YQL aus der Weather API5 : 5 developer.yahoo.com/weather/h Nikolaus Risslegger 17 KAPITEL 3. UMSETZUNG Listing 3.2: Wetterabfrage für Innsbruck mit Yahoo! Wetter API SELECT ∗ FROM w e a t h e r . f o r e c a s t WHERE woeid IN (SELECT woeid FROM geo . p l a c e s ( 1 ) WHERE t e x t=” i n n s b r u c k , aut ” ) Eine Alternative stellt der Zugriff der Daten über eine REST-API mit eindeutigen URI und entsprechenden GET-Parametern dar (Google, Facebook, Twitter). Listing 3.3 zeigt eine Routenberechnung von Innsbruck nach Schwaz mit der google-maps-API. Listing 3.3: Zugriff google-maps-API h t t p s : / / maps . g o o g l e a p i s . com/maps/ a p i / d i r e c t i o n s / j s o n ? o r i g i n= I n n s b r u c k&d e s t i n a t i o n=Schwaz&a v o i d=highways&mode=w a l k i n g Der Zugriff auf die Daten über die Facebook-API und der Import in das System beschreiben folgende Unterkapitel. Facebook graph API Mit der seit 2007 zugänglichen Graph-API ist es möglich, Daten aus der Facebook-Plattform zu lesen und zu schreiben. Der Zugriff basiert auf einer low-level HTTP-API und ermöglicht den Zugriff auf folgende Informationen:6 • nodes: - Elemente wie Personen, Seiten, Kommentare oder Fotos • edges: - stellen die Verbindungen zwischen den nodes dar: Person x postet Foto y auf Seite z. • fields: - sämtliche Attribute der nodes, wie Titel, Geburtstag, etc. Mit GET-requests werden die Daten abgerufen: Listing 3.4: Fetching von FB-Daten der Uni Innsbruck - request GET graph . f a c e b o o k . com / uniinnsbruck ? f i e l d s =id , name , w e b s i t e , b i r t h d a y Ist eine Authentifizierung (siehe Kapitel 3.1.2) bzw. der Content für den Access-Token nicht freigegeben, erfolgt eine Facebook-interne Fehlermeldung. 6 18 developers.facebook.com/docs/graph-api Nikolaus Risslegger KAPITEL 3. UMSETZUNG Listing 3.5: Fetching von FB-Daten der Uni Innsbruck - error-response ” error ” : { ” message ” : ”An a c c e s s t o k e n i s r e q u i r e d t o r e q u e s t t h i s resource . ” , ” t y p e ” : ” OAuthException ” , ” code ” : 104 } Bei entsprechenden Access-Rechten werden die Daten im JSON-Format übermittelt. Listing 3.6: Fetching von FB-Daten der Uni Innsbruck - response { ” i d ” : ” 75851196267 ” , ”name” : ” U n i v e r s i t ä t I n n s b r u c k ” , ” w e b s i t e ” : ”www. u i b k . ac . a t / ” , ” b i r t h d a y ” : ” 10/15/1669 ” } OAuth Facebook verwendet eine Implementierung des OAuth 2.0 Protokolls7 um die Identität eines Web-Apps zu authentifizieren und limitiert über Access-Tokens die bereitgestellten Daten. OAuth stellt eine Verifizierung des Benutzers zur Verfügung, ohne dessen Account-Passwort zu verwenden. Das Service wurde 2006 initiiert, ausgehend von Blaine Cook (Twitter) und weiteren Entwicklern, die kritisierten, dass es keinen Authentifizierungsstandard gibt. Im April 2010 wurde Version 1.0 veröffentlicht. [HL10] OAuth 2.0 ist nicht abwärtskompatibel, aber vereinfacht die Kommunikation zwischen den Teilnehmern und wurde 2012 publiziert. [Har12] Folgende Aktionen bietet das OAuth-Protokoll an: • Posten von Informationen des Benutzers im Stream (Twitter/Facebook) • Zugriff zu Inhalten, Bearbeiten und Speichern von Dokumenten (Dropbox, Google Docs) • Lesezugriff auf Benutzerdaten, wie Facebook-Freunde, Google-Kontakte etc. Mittlerweile unterstützen mehr als 300 Webservices die Authentifizierung via OAuth 2.0. [Boy12]. Abbildung 3.4 zeigt die Interaktion zwischen den vier Rollen (Resource Server, Resource Owner, Client, Authorization Server ): 7 oauth.net/2 Nikolaus Risslegger 19 KAPITEL 3. UMSETZUNG (A) Der Client sendet eine Anfrage an den Resource Owner (facebookBenutzer) oder wird über einen Authorization Server (facebook Login) umgeleitet. (B) Nach erfolgreichem Login erhält der Client einen Authorization grant für die bereitgestellten Daten. (C) Anschließend wird ein acces token angefordert, welches den Zugriff auf die Daten vom Resource Server ermöglicht. (D) Der Authorization Server erkennt den Client durch den authorization grant und stellt nach der Validierung der Daten einen access token zur Verfügung. (E) Mittels access token kann der Client die Daten am Resource Server anfragen. (F) Ist der token gültig, werden die Daten geliefert. Die Kommunikation zwischen den authorization server und resource server werden nicht im Protokoll festgelegt. Facebook verschweißt in der Implementierung den Teil von Rescue Owner und Authorization Server. [Har12] Abbildung 3.4: Funktionsweise OAuth 2.0 [Har12] Facebook bietet neben den user tokens u.a. app tokens an, die ebenfalls auf die Graph-API zugreifen, aber keinen expliziten Login benötigen. Der Zugriff auf öffentliche Daten ist erlaubt, es ist nicht möglich, mit einem app-token persönliche Daten zu lesen bzw. schreiben. Die Authentifizierung unterscheidet sich zum klassischen OAuth-Prozess wie folgt: Als erster Schritt wird eine Facebook-App angelegt und die Zugriffsberechtigungen festgesetzt. Für das fetching der öffentlichen Events reichen die Standardeinstellungen aus: email, public profile, user friends. 20 Nikolaus Risslegger KAPITEL 3. UMSETZUNG Anstatt der Login-Daten des Benutzers (Resource Owner ) werden die App-Id und das App-Secret zur Anmeldung verwendet.8 Import Die Eventdaten direkt aus der Graph-API mittels Koordinaten abzufragen ist nicht möglich. Facebook grenzt die API-Calls stark ein und indiziert die Events nach ID, Veranstalter, Name, Veranstaltungsort. Folglich müssen die Veranstalter (Personen oder Seiten) bekannt sein, um deren Veranstaltungen indizieren zu können. Eine Suche nach Pages basierend auf Städten oder Geo-Koordinaten wird nicht unterstützt, somit müssen die Veranstalter-Seiten bekannt sein, um deren POIs auszulesen. Dies erschwert den Import essentiell, denn die Page-IDs müssen manuell eingetragen werden. Somit unterscheidet sich diese Variante wenig von der vermiedenen manuellen Aufnahme einzelner Seiten mit den Event-Meta-Tags. (Siehe Listing 3.1). Mit einem POST-request werden dem Server Name (der eindeutige Slug in der URL) oder die ID übergeben (siehe Listing 3.7) und die Seite wird als Event Provider in die Datenbank aufgenommen. Ab dem nächsten Event-Fetching werden die POIs der Seite importiert. Listing 3.7: Hinzufügen einer Seite als POI-Provider Remote Address : 8 2 . 1 5 0 . 2 0 9 . 1 8 3 : 8 0 Request URL: h t t p : / / aod . web−c r o s s i n g . com/ a p i / page Request Method : POST Request Payload : { u i d : ” u n i i n n s b r u c k ” } S t a t u s Code : 2 0 1 C r e a t e d 3.2 Server und verwendete Technologien Das Fetching der Daten über die Graph-API anhand Geo-Daten ist nicht möglich, das Projekt fordert eine eigene, passende Schnittstelle. Durch die Aufteilung in die Client-Server-Struktur ist eine Erweiterung der POI-Anbieter einfach und erfordert lediglich kleine Anpassungen am Server. Das System läuft auf einem Ubuntu 14.04.02 LTS9 , mysql 5.5.4310 , ruby 1.9.311 und rails 4.1.612 . Dieses Kapitel beschreibt die Wahl der Datenbank, Informationen über das Cachen von Daten von Drittanbietern und den Algorithmus für das Fetching der Daten. Die REST-API wird in Kapitel 3.3 behandelt. 8 developers.facebook.com/docs/facebook-login/access-tokens www.ubuntu.com/desktop 10 www.mysql.com 11 www.ruby-lang.org/en 12 rubyonrails.org 9 Nikolaus Risslegger 21 KAPITEL 3. UMSETZUNG 3.2.1 Datenbank und ORM Ruby on Rails (RoR) greift auf einem in C geschriebenen Adapter auf die Datenbanken zu und unterstüzt unter anderem MySQL, DB2, Microsoft SQL Server und Postgres. Mit dem Object Relational Mapping übernimmt RoR den kompletten Zugriff auf die Datenbank und das darunter liegende DBMS kann zu jederzeit ausgetauscht werden. Die Klassennamen werden direkt Datenbanktabellen zugeordnet, die Datensätze stellen die Objekte, Spalten die Attribute dar. Auf umständliche Konfiguration wie z.B. bei Hibernate wird verzichtet, Ruby arbeitet mit vorgegebenen Konventionen: Als Beispiel ist der Tabellenname immer der Name des Models in Plural. Die Konfigurationsdatei (Listing 3.8) enthält den Treiber, Verbindungsdaten und Parameter für unterschiedliche Deploy-Modi. [BK07] Listing 3.8: Datenbankkonfiguration development : a d a p t e r : mysql2 encoding : utf8 d a t a b a s e : <%= ENV[ ’DB ’ ] %> username : <%= ENV[ ’USER ’ ] %> password : <%= ENV[ ’PW’ ] %> host : l o c a l h o s t p o r t : 3306 p o o l : 10 MySQL Die Wahl für mysql als Datenbankverwaltungssystem begründet sich durch die einfache Administration. Es bestehen keine besonderen Anforderungen an die Datenbank. Das relationale Datenschema wird von der Graph-API teilweise übernommen. Tabelle 3.1: Feld id (P KEY) description endTime startTime name created at updated at venue id (F KEY) page id (F KEY) privacy location 22 Model Event Type bigint (20) unsigned text varchar(255) varchar(255) varchar(255) datetime datetime bigint(20) unsigned bigint(20) unsigned varchar(255) varchar(255) Nikolaus Risslegger KAPITEL 3. UMSETZUNG Tabelle 3.1 zeigt am Beispiel des Event-Models die Strukur einer Veranstaltung. Die rails-typischen Attribute created at und updated at werden für interne Zwecke verwendet. Auffällig sind die extrem großen Datentypen (bigint) für die Primary- und Foreign-Schlüssel, die von der Graph-API übernommen werden. Die Beibehaltung der ID’s erleichtert die Synchronisierung bei den Updates mit der Plattform. Durch die Verwendung eines Anbieters benötigt das System keine internen unique keys. Bei einer Integration weiterer Anbieter in das System folgt ein Umbau des Models und erfordert mindestens zwei ID’s pro Event (da die Event-ID des Anbieters nicht mehr als unique angenommen werden kann). Die importierten Start- und Endzeiten werden von der API nativ übernommen, welche diese auch als String-Objekt speichert, und nicht in ein Datetime-Objekt konvertiert. Alternativen Bei einer Erweiterung des Importsystems und einem enormen Anstieg der Daten wäre eine Verwendung eines nosql-Systems wie CouchDB13 zu überlegen. Im Gegensatz zu relationalen Modellen speichern diese Systeme die Daten dokumentenbasiert als JSON-Objekte. Die Struktur der einzelnen Datensätze könnte unterschiedliche Attribute beinhalten. Objekte von verschiedenen Providern müssen nicht extra verarbeitet werden. Dabei stellt sich die Frage, welche zusätzlichen Daten für das Projekt benötigt werden. Außerdem stellt sich bei der Verwendung eines ORMappers die Sinnhaftigkeit einer nosql-Datenbank dar. Rails unterstützt MongoDB, ein Mapper ist implementiert, doch die Vorteile in Bezug auf Geschwindigkeit und Flexibilität einer no-sql Datenbank werden durch das Mapping eingeschränkt. Bei stark steigenden Benutzeranfragen sollte das Datenbanksystem zu postgres-SQL getauscht werden, das nativ MVCC unterstützt. Multiversion Concurrency Control (MVCC) ist das umfassende Transaktionskonzept, welches gleichzeitigen Datenzugriff ohne Geschwindigkeitseinbußen ermöglicht. Bei Löschen, Hinzufügen oder Updates werden intern veschiedene Versionen der Objekte angelegt. Lese-Zugriffe benötigen keine Locks, sie greifen automatisch auf das zu jenem Zeitpunkt aktuelle Objekt zu. Nachteile dieser Variante sind die extremen Overhead-Kosten beim Ändern der Objekte und der zusätzliche Speicherbedarf durch die Kopien. Bis auf das Hinzufügen eines neuen Anbieters durch den Benutzer werden alle Inserts und Updates von einer zentralen Stelle seriell ausgeführt. 13 couchdb.apache.org Nikolaus Risslegger 23 KAPITEL 3. UMSETZUNG 3.2.2 Caching der Daten Provider stellen ihre Daten und Rechenleistung zur Verfügung, jedoch regulieren sie das Speichern der Informationen auf externen Servern. Drittanwendungen sollen die Daten direkt von der API auslesen und nicht auf ihren eigenen Server zwischenspeichern. Durch das Caching können die Anbieter die Aufrufe nicht tracken und verlieren so die Kontrolle der Zugriffe. Facebook verfolgt hier eine ähnliche Linie, die Daten sollten wenn möglich direkt über die API geladen werden, eine Zwischenspeicherung der Daten ist aber erlaubt: If you cache data you receive from us, use it to improve your app’s user experience and keep it up to date.14 Die Aktualisierung passiert bei dem System durch einen Cron-Job, der das Fetching der Daten alle drei Stunden aufruft. Vom Veranstalter gelöschte Events werden aus der Datenbank entfernt und alle anderen aktualisiert. Durch diese Vorgehensweise werden die Graph-Aufrufe via Facebook gering gehalten, aber trotzdem eine aktuelle Liste der Veranstaltungen garantiert. 3.2.3 Ruby on Rails Die Verwendung von Ruby on Rails als Web-Framework ermöglicht einfache Erweiterbarkeit, unterstützt moderne Programmierparadigmen und ist open-source. Die Frameworks wie Microsoft .NET oder die Technologien von Java 2 Enterprise Edition (J2EE) sind für das Projekt zu vielschichtig, benötigen relativ viel Overhead und stellen für diese Projektgröße einen zu großen Aufwand bei der Einrichtung und Konfiguration dar. Im Gegensatz wäre php eine Alternative: Dieses Framework wird von diversen Entwicklern in unterschiedliche Inkremente erweitert, somit vermischen sich die unterschiedlichen Ansätze. [BK07] Die Eigenheiten und Vorteile von Ruby on Rails werden in diesem Kapitel erläutert. Grundlagen Ruby on Rails ist ein serverseiteges Framework, basierend auf der Programmiersprache Ruby, einer objektorientierten Skript-Sprache. Vorgestellt wurde das Projekt im Juli 2004, die aktuelle Version 4.2.0 wurde am 19. Dezember 2014 veröffentlicht. Es beinhaltet seit dem Start die 14 24 developers.facebook.com/policy Nikolaus Risslegger KAPITEL 3. UMSETZUNG Unterstützung von Ajax, das zu dieser Zeit einige Vorteile in der dynamischen Webentwicklung brachte und bescherte dem Framework großen Erfolg. [VH10] Ruby on Rails zeichnet sich durch folgende Prinzipien aus: • Model-View-Controller: Als Grundgerüst des Frameworks liegt die typische Gliederung des Programmes in Daten (=Model), Controller (=Logik) und deren Darstellungen (=Views). Die elementare Gliederung schafft somit ein einfaches Zusammenspiel der Komponenten, wobei auf eine möglichst lose Kopplung zu achten ist. Ein Aufruf der API wird folgend abgearbeitet: 1. Der Aufruf /api/events wird durch den integrierten RoutingMechanismus zum entsprechenden Controller weitergeleitet. 2. Der Controller greift auf die Daten der Models zu, hier gilt das Paradigma: thin controller, thick models - um redundante Codezeilen im Controller zu vermeiden. 3. Die Ausgabe der Daten wird über den Controller in einem View in der gewünschten Repräsentation (json, html) dargestellt. Abbildung 3.5: Schematische Darstellung des MVC-Paradigmas • Convention over Configuration: Ruby verwendet das DesignParadigma exzessiv und verlangt vom Programmierer die Einhaltung der vorgegebenen Richtlinien, wie die einheitliche Namensgebung und Ordnerstruktur. Nikolaus Risslegger 25 KAPITEL 3. UMSETZUNG Für größere Projekte erleichtert sich der Aufwand enorm, da der gesamte Konfigurationsaufwand wegfällt. Ein Beispiel ist die Verbindung zwischen Model und Datenbank, bzw. die einfache Datenbankverbindung, siehe Kapitel 3.2.1. • Don’t repeat yourself: Dem Entwickler wird nahegelegt, dass jedes Stück Wissen eine einzige, eindeutige und maßgebliche Re” präsentation in einem System hat.“ [VH10] Dadurch wird redundante Information vermieden und es gibt keine Code-Duplikate, die Projekte sind einfacher und nur an einer Stelle zu modifizieren, falls es eine Änderung geben sollte. Mit Active Records legt Rails die Attribute der Models durch das Auslesen der Spalten der Datenbanktabellen fest. Die Informationen werden kein zweites Mal im Quellcode oder in einem config-Files definiert, somit werden Fehler durch inkonsistente Daten vermieden. Die getter- und setter-Methoden erstellt Rails automatisch. Aufbau Die Hauptaufgabe, der Import und das Selektieren für die Ausgabe der POI’s, wird im Event-Controller realisiert. Um den Zugriff auf die Graph-API von Facebook zu vereinfachen, wird das RubyGem Koala 1.1015 verwendet. RubyGems (kurz Gem) bezeichnet den offiziellen Paketmanager von Ruby und definiert dafür einen Standard. Es übernimmt die Administration und Versionsverwaltung der eingebundenen Pakete und erleichtert dem Programmierer die Arbeit mit externen Bibliotheken. Die Erweiterung wurde im November 2003 entwickelt und ist nun Teil der Standard Bibliothek von ruby. Wie das Listing 3.9 zeigt, erfolgt der Zugriff über das Gem Koala auf das graph-Objekt über die globale Variable graph. Dieses Objekt erhält über eine App-Permission mittels OAuth2 - siehe 3.1.2 alle benötigten Berechtigungen. Listing 3.9: Zugriff auf graph-API Page . a l l . map do | page | begin e v e n t s = graph . g e t o b j e c t ( page . i d . t o s + ’ / e v e n t s ’ ) ... Das Codestück 3.10 zeigt das grundlegende Prinzip der Selektion und Ausgabe. Es werden alle Events berücksichtigt, die im Umkreis der gegebenen Parameter liegen. Folgend dem Prinzip don’t repeat yourself erfolgen die Berechnungen und Überprüfungen im Model: thin controller - thick model. 15 26 github.com/arsduo/koala Nikolaus Risslegger KAPITEL 3. UMSETZUNG Listing 3.10: Eventselektion e v e n t s = Event . a l l e v e n t s = e v e n t s . s e l e c t { | ev | ev . i n r a n g e ( param [ : l a t ] , param [ : l o n ] , params [ : r a d i u s ] ) ev . h a s c o o r d i n a t e s } end respond with events if Als grundlegende Berechnung muss der Abstand der gegebenen Koordinaten und dem Event berechnet werden. Dafür wird das gem Geocoder16 verwendet. Das Plugin nutzt zur Berechnung der Entfernung die Haversine-Formel. Listing 3.11: Distanzberechnung def d i s t a n c e t o ( l a t , l o n ) s t a r t = [ lat , lon ] d e s t = [ s e l f . venue . l a t i t u d e , s e l f . venue . l o n g i t u d e ] s e l f . d i s t a n c e = ( Geocoder : : C a l c u l a t i o n s . d i s t a n c e b e t w e e n ( s t a r t , d e s t ) ∗ 1 0 0 ) . round / 1 0 0 . 0 return s e l f . d i s t a n c e end Im folgenden Codestück 3.12 wird die Filterung der Veranstaltungen gezeigt, wenn mehrere Koordinaten übergeben werden. Die Events werden selektiert, falls sie in mindestens einen Umkreis (der Radius wird global übergeben) eines Koordinatenpaares fallen. Die möglichen Aufrufsadressen werden in Kapitel 3.3.2 beschrieben. Listing 3.12: Filterung der Eventdaten bei mehreren Koordinaten i f event params [ : coords ] . present ? e v e n t s = Event . a l l e v e n t s . each do | ev | ev . s e t c o o r d i n a t e s i f ev . h a s c o o r d i n a t e s ev . d i s t a n c e t o ( e v e n t p a r a m s [ : l a t ] , e v e n t p a r a m s [ : l o n ] ) h a s c o o r d i n a t e s && p a r a m s c o o r d i n a t e s ? end i f ev . myevents | | = Array . new carray = event params [ : coords ] . s p l i t ( ” , ” ) c a r r a y . each do | cu | c = cu . s p l i t ( ” : ” ) n e a r e v e n t s = e v e n t s . s e l e c t { | ev | ev . i n r a n g e ( c [ 0 ] , c [ 1 ] , e v e n t p a r a m s [ : r a d i u s ] ) has coordinates } myevents . c o n c a t n e a r e v e n t s end r e s p o n d w i t h ( myevents ) 16 i f ev . www.rubygeocoder.com Nikolaus Risslegger 27 KAPITEL 3. UMSETZUNG 3.3 REST-API Web-Services beschreiben Schnittstellen zum Datenaustausch über das World Wide Web und bieten ein neues Programmier- bzw. Systemparadigma zum Datenaustausch von verteilten Systemen. Alle Rechner agieren autonom und kommunizieren über festgelegte Standards (APIs). Abbildung 3.6 visualisiert die einfache Grundstruktur: Clients senden Servern Anfragen, die nach einiger Zeit (asynchron) die gewünschten Informationen liefern. Abbildung 3.6: Grundstruktur eines Webservices Viele Web-Services arbeiten mit komplexen Protokollen wie SOAP (ursprünglich für Simple Object Access Protocol), um den Datenaustausch zu vereinfachen. Die erwarteten Parameter bzw. die Rückgabetypen werden festgelgt, eine gewisse Typsicherheit ist vorhanden. SOAP ist ein industrieller Standard des World Wide Web Consortiums (W3C). Representational State Transfer (REST) definiert ein weiteres Programmierparadigma für verteilte Systeme, das einen einfachen Ansatz verwendet, sodass dessen Aufrufe leichtgewichtiger aufgebaut sind. Die Grundlagen werden in Kapitel 3.3.1 erläutert. 3.3.1 Grundlagen Thomas Roy Fielding beschreibt im Jahr 2000 in seiner Dissertation einen Architekturstil den er REpresentational Stae Transfer Archtetkur oder kurz REST bezeichnet. Damit wird kein eigenes Protokoll oder Standard für das Web-Service verwendet, sondern diese Denkweise versucht die Spezifikationen des World Wide Web zu verwenden. Das Paradigma basiert auf dem Client-Server Modell, bei dem der Client auf Ressourcen, die der Server bereitstellt, über eine eindeutige URI (Uniform Resource Identifier) zuzugreifen. Auch bei mehreren Anfragen von verschiedenen Clients liefert eine URI immer denselben eindeutigen Inhalt. Typischerweise wird als Transportprotokoll HTTP (Hypertext Transport Protocol) verwendet und dessen Befehle genutzt: GET, POST, PUT, DELETE und andere. Die bereitgestellten Daten sind beispielsweise Textdaten (JSON, XML, CSV) oder auch visuelle Ressourcen wie 28 Nikolaus Risslegger KAPITEL 3. UMSETZUNG Bilder und HTML-Seiten, somit ist theoretisch jede Homepage, die statische Inhalte anbietet REST-konform. Die Zahlen der verwendeten Web-Service, welche auf REST basieren, steigen stetig. Folgende Vorteile bietet die Architektur: • Overhead: Ein Vorteil ist der geringe Overhead und die somit optimierte Ausnutzung der Bandbreite. SOAP stützt sich auf XML zur Repräsentation der Daten und verwendet HTTP als Transportprotkoll (HTTP-POST requests). Um den Datenaustausch durchzuführen, werden im XML-Payload neben den Nutzdaten auch noch Meta-Daten mitgesendet. Im Gegensatz werden bei REST-Services keine Metadaten übertragen, da eine Adresse immer dieselbe Ressource liefert. Als Format für die Nutzdaten kann auch das wesentlich schlankere JSONFormat verwendet werden. • Unabhängigkeit: Server und Client können auf unterschiedlichen Betriebssystemen arbeiten und in verschiedenen Programmiersprachen implementiert sein. Die Clients benötigen keine besondere Funktionalität, sondern müssen nur HTTP verstehen: damit vereinfacht sich der Zugriff von verschiedenen Plattformen (mobile App, Dektop-Version bzw. Website) enorm. Bei Updates oder Änderungen am Server muss der Client nicht sofort angepasst werden. • Durchsichtigkeit: Eine REST-Anfrage wird schon in den HTTPHeader definiert: GET requests greifen lesend auf die Ressourcen zu, während POST, PUT und DELETE den Datenbestand ändern. SOAP-Anfragen können Firewall-Administratoren vor Probleme stellen, da in der Anfrage nicht direkt ersichtlich ist, ob die Daten verändert werden. • Status: Der Server kennt seinen Status und interessiert sich nicht für die Sessions der Clients. Die Clients erledigen selbstständig ihre Anfragen und legen die Reihenfolge, Parallelität etc. fest. Damit arbeiten beide Seiten eigenständig und müssen sich um keine Synchronisation bemühen. Die Nachteile treten bei komplexeren Systemen auf: REST folgt keiner Standardisierung und jede URI auf einem Server kann unterschiedliche Formate und Daten liefern, die Typ-Sicherheit ist nicht gegeben. Daraus folgt eine geringe Effizienz, da der Informationsaustausch zwischen den Schnittstellen nicht auf mögliche, spezielle Anforderungen der Komponenten eingehen kann. Nikolaus Risslegger 29 KAPITEL 3. UMSETZUNG 3.3.2 Aufbau Der Webserver ist nur lesend aufrufbar und unterstützt keine POST, PUT oder DELETE-Requests. Die Daten werden automatisch mit einem Cronjob17 aktualisiert. Listenansichten Für Listenansichten bzw. die Mapansicht werden die Events mit relativ kleinen Datensatz übertragen, wie Listing 3.13 zeigt. Die Größe eines Elements beträgt ca. 400-1000 Bytes. Neben der Event-ID, dem Namen und des Zeitpunktes (Ende ist optional) werden die Koordinaten und auch die Luftlinie des Events zu den übergebenen Koordinaten-Parametern geliefert, das eine Sortierung nach Nähe ermöglicht. Weiter werden die Page-ID und Venue-ID mitgeliefert, um eventuell weitere Events des Anbieters abrufen zu können. Listing 3.13: Aufbau eines Event-Entries ” id ” : 938705509484838 , ” endTime ” : n u l l , ” s t a r t T i m e ” : ” 2 0 1 5−0 8−2 7 1 9 : 0 0 : 0 0 ” , ”name” : ”FERNWEH : : : HMBC” , ” venue id ” : 135128885185 , ” page id ” : 135128885185 , ” l o c a t i o n ” : ” Treibhaus Innsbruck ” , ” d i s t a n c e ” : 2 . 39 , ” coords ” : { ” l a t i t u d e ” : 47 . 2676 , ” l o n g i t u d e ” : 11 . 3965 } Folgende Abfragen können an die API gestellt werden: • Alle Events: Alle momentan vorhandenen Events werden über die Adresse / api / event abgerufen. Dabei werden auch die Daten mitgesandt, welche keine Koordinatendaten besitzen. Das Attribut distance ist null. • Radius: Um Veranstaltungen innerhalb eines bestimmten Gebietes zu erhalten, werden dem Service drei Parameter mitgeliefert: lat (Latitude), lon (Longitude) und der radius. Der Aufruf a p i / e v e n t ? l a t =47.2854551& l o n =11.3787899& r a d i u s =3 liefert alle Events in Innsbruck (laut Koordinaten) und dessen Umgebung von drei Kilometer. 17 In Unix-Systemen (wie das verwendete Server-Betriebssystem ubuntu) kann der Cron-Daemon-Dienst wiederkehrende Aufgaben (cronjobs) automatisch zu bestimmten Zeiten automatisiert ausführen. 30 Nikolaus Risslegger KAPITEL 3. UMSETZUNG • Radien: Es besteht die Möglichkeit, der API mehrere Koordinaten in einem Aufruf zu übergeben. Dabei werden die Koordinaten in folgender Form Lat:Lon,Lat,Lon,... geliefert. Der Radius ist für alle Parameter derselbe und nicht für jedes Paar separat konfigurierbar. Ein Beispielsaufruf lautet: / a p i / e v e n t ? c o o r d s = 4 7 . 3 4 3 4 : 1 7 . 4 3 3 4 , 2 3 . 4 3 3 : 1 2 . 5 4 4 & r a d i u s =10 • Seite: Die Events einer Seite werden mithilfe der Page-ID geholt. / a p i / e v e n t ? page =135128885185 Detailansicht In der erweiterten Ansicht werden zusätzlich noch die Beschreibung des Events und die Veranstalter-Daten mitgeliefert. Die URI für eine Detailabfrage lautet: / a p i / e v e n t ? u i d =938705509484838 Die Daten enthalten unter Anderem detaillierte Angaben zu den Veranstalter, wie Listing 3.14 zeigt. Listing 3.14: Detailansicht Event ” id ” : 938705509484838 , ” description ” : ” Info ” , ” endTime ” : n u l l , ” s t a r t T i m e ” : ” 2 0 1 5−0 8−2 7 1 9 : 0 0 : 0 0 ” , ”name” : ”FERNWEH : : : HMBC” , ” venue id ” : 135128885185 , ” page id ” : 135128885185 , ” l o c a t i o n ” : ” Treibhaus Innsbruck ” , ” coords ” : { ” l a t i t u d e ” : 47 . 2676 , ” l o n g i t u d e ” : 11 . 3965 }, ” venue ” : { ” id ” : 135128885185 , ” c i t y ” : ” Innsbruck ” , ” country ” : ” Austria ” , ” l a t i t u d e ” : 47 . 2676 , ” l o n g i t u d e ” : 11 . 3965 , ” s t r e e t ” : ” A n g e r z e l l g a s s e 8” , ” z i p ” : ”6020” , ” c r e a t e d a t ” : ” 2 0 1 5−0 4−2 8T1 7 : 3 3 : 0 9 . 0 0 0Z” , ” u p d a t e d a t ” : ” 2 0 1 5−0 4−2 8T1 7 : 3 3 : 0 9 . 0 0 0Z” }, ” page ” : { ” id ” : 135128885185 , ” category ” : ” Arts / entertainment / n i g h t l i f e ” , ”name” : ” T r e i b h a u s I n n s b r u c k ” , ” about ” : ” Kulturprogramm f u e r S t a d t b e n u t z e r . ” , ” l i n k ” : ” h t t p s : //www. f a c e b o o k . com/ t r e i b h a u s i b k ” , ” username ” : ” t r e i b h a u s i b k ” , ” c r e a t e d a t ” : ” 2 0 1 5−0 3−1 2T2 2 : 1 0 : 5 3 . 0 0 0Z” , ” u p d a t e d a t ” : ” 2 0 1 5−0 3−1 2T2 2 : 1 0 : 5 3 . 0 0 0Z” 1 } Nikolaus Risslegger 31 KAPITEL 3. UMSETZUNG 3.4 Event Visualisierung Die Visualisierung der Daten kann in jedem Projekt und in beliebiger Progammiersprache erfolgen, sofern diese die REST-Calls durchführen kann. In dieser Arbeit ist der clientseitige Teil in die Arbeit von Nikolaus Krismer eingebunden, welche den Titel isochrone-web18 trägt. Die Arbeit verwendet verschiedene Algorithmen, um Isochrone zu berechnen. Mit den Daten von öffentlichen Verkehrsmitteln werden ausgehend von einem Startpunkt mögliche Ziele berechnet, die in gegebener Zeit erreicht werden können. Diese Bereiche werden farblich hervorgehoben. Als praktische Anwendung dieser Berechnungen werden die Eventdaten in das Projekt importiert und mit dessen Werten die Isochrone berechnet. Somit werden Einzugsgebiete der Veranstaltungen dargestellt. Umgekehrt kann ein Benutzer der App die Veranstaltungen in seiner unmittelbaren Nähe bestimmen, die er mit den öffentlichen Verkehrsmitteln erreichen kann. Abbildung 3.7 zeigt das Ergebnis der Arbeit: In den grünen ClusterElementen sind gruppierte Veranstaltungen, um das Einzugsgebiet von maximal 10 Minuten berechnet worden sind, dieses Gebiet ist blau hinterlegt. Dabei werden die örtlichen Bus-Verbindungen (Haltestellen werden in der Grafik orange dargestellt) berücksichtigt, aber auch der eventuell mögliche Fußweg, der die verwinkelten Enden des Isochrones hervorruft. Details über die Funktionsweise der verwendeten Algorithmen zur Berechnung der Isochrone sind in der Arbeit [GBCI11] beschrieben. In den folgenden Unterkapitel werden ausgewählte, relevante Spezifikationen näher beschrieben. Kapitel 3.4.1 beschreibt die technische Umsetzung, Kapitel 3.4.2 erklärt die Benutzung des Plugins. 3.4.1 Technische Grundlagen Das System ist eine eigenständige Web-Anwendung und nutzt das Framework Node.js19 . Diese Technik basiert auf der JavaScript-Laufzeitumgebung V8, die eigentlich für den Browser Google Chrome (erste Version 2009) entwickelt wurde. Die aktuelle Version 4.0.0 wurde am 8. September 2015 veröffentlicht. In Vergleich zu herkömmlichen Serverarchitekturen wie PHP/Ruby auf einen Apache-Web-Server wird bei Node.js nicht für jede eintreffende Anfrage ein neuer Thread gestartet. Es wird die asynchrone Architektur von JavaScript genützt, die eine parallele Verarbeitung von ClientVerbindungen und Datenbankzugriffen ermöglicht. 18 19 32 https://dbis-git.uibk.ac.at/krismer/isochrone-web https://nodejs.org/ Nikolaus Risslegger KAPITEL 3. UMSETZUNG Abbildung 3.7: Visualisierung des Einzugsgebietes (max. zehn Minuten) von ausgewählten Veranstaltungen Diese Funktionsweise bringt große Performancevorteile bei mehreren Anfragen, ist ressourcenschonender und zeitgesteuerte Aktionen sind einfacher zu realisieren. Somit eignet sich Node.js für Web-Anwendungen, die oft lange Berechnungen ausführen bzw. auf externe Ressourcen zugreifen, bevor sie einem Request antworten. [Bet14] Mit der Verwendung von integrierten Modulen (vergleichbar mit Bibliotheken), welche grundlegende Funktionen für Netzwerkanwendungen bereitstellen, werden komplexe Anwedungen einfach realisiert: zum Beispiel ermöglicht das HTTP-Modul das Hosten eines Webservers. Listing 3.15 zeigt den gesamten Codes eines HTTP-Servers, der mit einer einfachen Response-Nachricht antwortet. Listing 3.15: Node.js Web-Service v a r h t t p = r e q u i r e ( ’ http ’ ) ; var s e r v e r = http . c r e a t e S e r v e r ( f u n c t i o n ( req , r e s ) { r e s . writeHead ( 2 0 0 , { ’ Content−Type ’ : ’ t e x t / p l a i n ’ } ) ; r e s . end ( ’ H a l l o ! ’ ) ; } ) . l i s t e n ( 8080 ) ; Als Web-Mapper wird leaflet20 verwendet, ein OpenSource Projekt, welches durch ein Node.Js Modul im Projekt verankert ist. Leaflet bietet ebenfalls zahlreiche Plugins an, die in der Arbeit verwendet werden. Für die übersichtliche Darstellung der zahlreichen Veranstaltungen wird das 20 leafletjs.com/ Nikolaus Risslegger 33 KAPITEL 3. UMSETZUNG Marker-Cluster Plugin benutzt, welches Marker in der Landkarte gruppiert und zu einem Cluster (siehe Abbildung 3.7) zusammenfasst, wenn zu viele Marker auf kleinen Raum vorhanden sind. Um den umfangreichen Build-Prozess und die Modulverwaltung zu vereinfachen, werden die Tools bower21 und gradle22 verwendet. Event-Plugin Das implementierte Plugin besteht aus zwei javascript-Dateien und einigen Stubs in diversen Files des isochrone-web Projektes. Die Datei Event.js beinhaltet die Klasse Event mit ihren Membervariablen und den dazugehörigen getter-Methoden. Der Konstruktor legt das Objekt an, setzt das standardmäßige Icon und generiert einen leaflet-Marker, der das Clustering ermöglicht, siehe Listing 3.16. Hier wird auch das Popup-Element angelegt, welches nach Klick auf den Marker erscheint. Um das Event als Start- oder Endpunkt bei der Isochronen-Berechnung zu verwenden, ist eine Setter-Methode implementiert, die dem EventObjekt zusätzlich ein farblich unterschiedliches Icon zuweist. Listing 3.16: Initialisierung Eventobjekt f u n c t i o n i n i t E v e n t ( data ) { name = data . name ; i d = data . i d ; s t a r t T i m e = data . s t a r t T i m e ; endTime = data . endTime ; c o o r d i n a t e s = L . l a t L n g ( [ data . c o o r d s . l a t i t u d e , data . c o o r d s . longitude ] ) ; icon = L . icon ({ i c o n U r l : ’ images / i c o n g r e e n . png ’ }) ; marker = L . marker ( c o o r d i n a t e s , { t i t l e : data . name , icon : icon }) ; c o n t a i n e r = $ ( ’<d i v /> ’ ) ; c o n t a i n e r . html ( ’<h3> ’+name+ ’</h3> ’ ) ; i f ( startTime ) { c o n t a i n e r . append ( ’<p> ’+ $ . t ( ’ e v e n t . s t a r t ’ ) + ’ : <b> ’ + s t a r t T i m e + ’</b></p> ’ ) ; } i f ( endTime ) { c o n t a i n e r . append ( ’<p> ’+ $ . t ( ’ e v e n t . s t o p ’ ) + ’ : <b> ’ + endTime + ’</b></p> ’ ) ; } v a r popup = L . popup ( ) . s e t C o n t e n t ( c o n t a i n e r [ 0 ] ) ; marker . bindPopup ( popup ) ; } 21 22 34 bower.io/ https://gradle.org/ Nikolaus Risslegger KAPITEL 3. UMSETZUNG Der Zugriff auf das Webservice und die Verwaltung der Veranstaltungen wird mit der Klasse eventService realisiert. Zur Vereinfachung der API-Calls wird das Node.js-Modul superagent23 eingebunden und dessen Funktionalitäten genutzt. Dieses Modul und dessen Aufrufe stellt die einzige Schnittstelle zwischen dem entwickelten Server und dem Client dar. Ein Zugriff auf die REST-API, um die Event-Daten zu laden und die Erstellung der Event-Objekte zeigt Listing 3.17. Vor dem Anlegen eines Event-Objektes werden am Client die Daten überprüft, da unsinnige Daten nicht ausgeschlossen werden dürfen. Bei Fehlschlagen des Aufrufes (Server überlastet oder nicht erreichbar) wird der Aufruf zu einem späteren Zeitpunkt erneut gestartet. Listing 3.17: Laden der Eventdaten request . g e t ( addr ) . end ( f u n c t i o n ( r e s ) { i f ( r e s . ok ) { r e s . body . f o r E a c h ( f u n c t i o n ( e ) { i f ( EventService . validCoords ( e ) ) { e v e n t s . push (new Event ( e ) ) ; } }) ; l o g g e r . debug ( ” f i n i s h e d g e t t i n g e v e t n s ” ) ; if ( callback ) { c a l l b a c k ( events , getEventMarkers ( ) ) ; } } else { l o g g e r . e r r o r ( ” an e r r o r o c c u r e d f e t c h i n g e v e n t d a t a ” ) ; setTimeout ( fetchEvents ( l a t l n g , radius , c a l l b a c k ) , reconnectInterval ) ; } }) ; Die Darstellung der Events auf der Map wird durch eine layer realisiert, eine Kernfunktion von leaflet. Somit ist das Hinzufügen und Löschen trivial (Listing 3.18). Listing 3.18: Interaktion Events/Map this . c l e a r = function ( ) { map . removeLayer ( ” e v e n t d a t a ” ) ; events . s p l i c e (0 , events . length ) ; }; t h i s . showEvents = f u n c t i o n ( ) { map . addLayer ( g e t E v e n t M a r k e r s ( ) , ” e v e n t d a t a ” , true ) ; }; Weitere Infomationen können aus dem Sourcecode im Anhang entnommen werden. 23 https://visionmedia.github.io/superagent Nikolaus Risslegger 35 KAPITEL 3. UMSETZUNG 3.4.2 Bedienung Die Bedienung des Plugins ist auf das Benutzen mit üblichen Eingabegeräten wie Maus oder Touchpad/Touchscreen ausgelegt, eine reine Tastaturbedienung ist nicht implementiert. Die Event-Erweiterung schränkt die Ansicht und Bedienung des gesamten Systems nicht ein, es existiert lediglich ein kleines Kalender-Symbol im rechten oberen Eck der Map, die auf die Erweiterung hinweist. Nach dessen Klick öffnet sich ein Dialogfenster und bietet dem Benutzer die Möglichkeit zur Vorselektierung der Events: • All: Es werden alle zur Verfügung stehenden Veranstaltungsdaten geladen und angezeigt. • Mapcenter: Alle Eventdaten im gegebenen Umkreis (zweites Eingabefeld) der aktuellen Map-Ansicht werden geladen. Dabei werden dem Server die Koordinaten der Karte übermittelt, der Radius kann in einem separaten Auswahlfeld definiert werden. • Dataset: Der Benutzer wählt mittels einer Select-Box (drittes Inputfeld) eine der geladenen Datensätze aus, von dem IsochronBerechnungen möglich sind. Nach der Auswahl werden die Daten on-the-fly in die Selectbox Available Events geladen. Das kann durch die gewählte Datengröße und der vorhandenen Internetverbindung einige Sekunden in Anspruch nehmen. Gewünschte Events werden ausgewählt und in die Selectbox Selected Events hinzugefügt, diese Veranstaltungen werden für die IsochronenBerechnungen berücksichtigt. In der Kartenansicht werden alle gefundenen Veranstaltungen angezeigt, wobei die Marker der ausgewählten orange sind, alle anderen grün. Abbildung 3.8 zeigt die Veranstaltungen im Raum Bozen an, dabei werden 4 Stück für die Isochronen-Berechnung herangezogen. Durch einen Doppelklick auf ein Event oder Klick auf den Button Details werden erweitertete Veranstaltungsinformationen angezeigt. Im Hintergrund wird ein weiterer REST-Call an den Server gesendet, um diese Details (Technische Infos siehe Kapitel 3.3.2) zu erhalten. Die Berechnung kann in der Hauptansicht durch den Klick auf den Button isochrone und anschließender Bestimmung der maximalen Entfernung gestartet werden, die Checkbox Event-Isochrone muss gewählt sein, um die selektierten Event-Punkte als Startpunkte verwenden zu können. Das System akzeptiert mehrere Koordinaten-Paare zur Bestimmung der Isochrone. Abbildung 3.9 zeigt die farblich unterschiedlichen Marker, wobei nur der gelbe für die Isochron-Berechnung herangezogen wird (in diesem Fall trivial, da alle Marker die selben Koordinaten haben). 36 Nikolaus Risslegger KAPITEL 3. UMSETZUNG Abbildung 3.8: Wahl von Dataset bz liefert 17 Events aus Bozen. Abbildung 3.7 zeigt das Ergebnis einer Berechnung, der blau hinterlegte Bereich ist im angegebenen Zeitrahmen erreichbar, dabei werden drei Eventstandpunkte (die Marker sind geclustert) verwendet. Erkennbar ist dies durch den separaten Bereich im Südosten, der das Gebiet für die 6 Events berechnet. Abbildung 3.9: Detailansicht Isochrone-Berechnung des ausgewählten Events Nikolaus Risslegger 37 Kapitel 4 Ausblick Ziel dieser Arbeit war es, eine einfache Anwendung zu entwickeln, die eine praktische Verwendung der Isochronen-Berechnung zeigt und dabei die Möglichkeiten verschiedener APIs ausnützt und diese zusammenführt. Hervorzuheben ist die einfache Verwendung und ausgereifte Dokumentation der Facebook-API (wobei andere APIs ähnlich simpel zu bedienen sind) und die relativ kurze Supportzeit selbiger (die verwendete API ist ab 2016 als veraltet eingestuft). Auch die Integrierung von bestehenden Plugins und Bibliotheken (ruby on rails oder leaflet) ist einfach zu vollziehen, da die Mächtigkeit dieser modernen Programmiersprache durch viele Benutzerplugins steigt. Es wird gezeigt, dass die web-mapping Technologien noch stark erweiterbar sind und weitere Informationen bereitgestellt werden können (Veranstaltungen und öffentliche Verkehrsmittel): Heute gibt es in Österreich noch keine Kartenansicht, die mit allen öffentlichen Verkehrsbetrieben interagiert. Das liegt aber vorwiegend daran, dass staatsnahe Betriebe (nicht nur in Österreich) auf die Bereitstellung ihrer Daten über eine offene und standardisierte Plattform verzichten. Somit erschweren sie die Erstellung von solchen interessanten Apps. Die Bereitstellung von Event-Daten ist ähnlich ernüchternd, bis dato gibt es keinen Anbieter einer großen Event-Plattform. Es versuchen sich kleine Anbieter am Markt zu positionieren und stellen ihre Veranstaltungen für den Benutzer zur Verfügung, auf eine Bereitstellung der Daten über eine standardisierte Form wird größtenteils verzichtet. Verständlicherweise, denn damit könnte man Besucherverluste verzeichnen, da die Benutzer eine größere Plattform für die Eventsuche nutzen könnten. Ein interessanter Ansatz ist die Darstellung der Veranstaltungen mit dem Meta-Event-Tag (siehe Listing 3.1). Ein Ausbau der Applikation ist relativ einfach möglich, da das Tool modular aufgebaut ist. Folgende Features können verbessert bzw. weiter 38 APPENDIX ausgebaut werden: • Erweiterung der Event-Quellen: Die Einbindung von Seiten, welche das Event-Meta-Tag verwenden. Dabei wird auf ein Crawlen des Netzes, wie Google es praktiziert, verzichtet, da die Serverleistung dafür keinesfalls ausreicht. Wie die IDs der Veranstalter-Pages aus Facebook werden die URIs manuell am Server registriert. • Zeitbasierte Suche: Ein API-Call mit Zeitangaben ermöglicht die Anzeige aktueller Events bzw. zu einem bestimmten Zeitpunkt. • Beliebteste Events: Anlegen einer Statistik, welche die Views der einzelnen Events protokolliert. Anschließend kann ein API-Call die beliebtesten Events liefern. • Clientseitige Listenansicht: Am Client könnte neben den Markern eine optionale, sortierbare Tabelle der Events direkt in der Map angezeigt werden. Generell zeigt das App nur einen Lösungsvorschlag für das gegebene Problem und ist als Prototyp dieser Art zu sehen. Nikolaus Risslegger 39 Abbildungsverzeichnis 2.1 2.2 2.3 2.4 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Klassifikation von Mashups, Mashups und weborientierte Architekturen als Technologie-Trends des Web 2.0, Nils Hommen, 2007, Seite 109 . . . . . . . . . . . . . . . . . . 5 Screenshot von www.programmableweb.com/api-research, aufgenommen am 2015-09-12 . . . . . . . . . . . . . . . . 6 Screenshot von https://goo.gl/maps/qt2sJHRfR2U2, aufgenommen am 2015-10-06 . . . . . . . . . . . . . . . . . . 9 Screenshot von https://goo.gl/maps/GsMSMv1Tdp52, aufgerufen am 2015-10-06 . . . . . . . . . . . . . . . . . . . . 10 Eigene Illustration . . . . . . . . . . . . . . . . . . . . . . Screenshot von https://goo.gl/MTQYiY, aufgerufen 201510-06 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Screenshot facebook.com, aufgerufen 2015-09-10 . . . . . . Funktionsweise OAuth, The OAuth 2.0 authorization framework, Dick Hardt, 2012, Seite 6 . . . . . . . . . . . . . Eigene Illustration . . . . . . . . . . . . . . . . . . . . . . Eigene Illustration . . . . . . . . . . . . . . . . . . . . . . Screenshot isochrone-web, aufgenommen am 2015-09-12 . Screenshot isochrone-web, aufgenommen am 2015-09-12 . Screenshot isochrone-web, aufgenommen am 2015-09-12 . 41 13 15 17 20 25 28 33 37 37 Literaturverzeichnis [Bai13] A. Baio: The Death of Upcoming.org, Website, 2013, URL http://waxy.org/2013/04/the_death_of_ upcomingorg/, vistited 2015-07-19. [Bal14] R. Baldwin: Andy Baio crowdfunds $30,000 in 90 minutes to relaunch community event site Upcoming, Website, 2014, URL http://goo.gl/70ifM4, vistited 2015-07-19. [Bet14] D. Betz: Generisches Mehrbenutzer-Framework auf Basis von Node. js und Webtechnologien am Beispiel eines Stundenplan-Gestalters, (2014), pages 40–44. [BK07] M. Bächle and P. Kirchberg: Ruby on Rails., IEEE Software, volume 24(6), (2007), pages 105–108. [Boy12] R. Boyd: Getting started with OAuth 2.0, O’Reilly Media, Inc., 2012. [GBCI11] J. Gamper, M. Böhlen, W. Cometti and M. Innerebner: Defining isochrones in multimodal spatial networks, Proceedings of the 20th ACM international conference on Information and knowledge management, ACM, pages 2381– 2384. [Har12] D. Hardt: The OAuth 2.0 authorization framework, Internet Engineering Task Force, 2012, URL http://tools.ietf. org/html/rfc6749.html. [HGM94] G. Hake, D. Grünreich and L. Meng: Kartographie: Visualisierung raum-zeitlicher Informationen, Walter de Gruyter, 1994. [HL10] E. Hammer-Lahav: The oauth 1.0 protocol, Internet Engineering Task Force, 2010, URL https://tools.ietf.org/ html/rfc5849. [Hom07] N. Hommen: Mashups und weborientierte Architekturen als Technologie-Trends des Web 2.0, volume 2, pages 103–120. 43 APPENDIX LITERATURVERZEICHNIS [HSP08] M. Haklay, A. Singleton and C. Parker: Web mapping 2.0: The neogeography of the GeoWeb, Geography Compass, volume 2(6), (2008), pages 2011–2039. [Ker06] M. Kerres: Potenziale von Web 2.0 nutzen, A. Hohenstein (ed.), Handbuch E-Learning, Deutscher Wirtschaftsdienst, München, 2006, pages 1–3. [KHW08] T. Kilian, B. H. Hass and G. Walsh: Grundlagen des Web 2.0, Web 2.0, Springer, 2008, pages 3–21. [MG09] P. Mell and T. Grance: Effectively and securely using the cloud computing paradigm, NIST, Information Technology Laboratory, pages 304–311. [MWDT07] E. M. Maximilien, H. Wilkinson, N. Desai and S. Tai: A domain-specific language for web apis and services mashups, Springer, 2007. [Put94] S. Putz: Interactive information services using World-Wide Web hypertext, Computer Networks and ISDN Systems, volume 27(2), (1994), pages 273–280. [RB10] B. Rubinger and T. Bultan: Contracting the facebook API, arXiv preprint arXiv:1009.3715. [RSHM08] J. Richardson, K. Schlegel, B. Hostmann and N. McMurchy: Magic quadrant for business intelligence platforms, Core research note G, volume 154227. [Ste08] D. Stenmark: Web 2.0 in the business environment: The new intranet or a passing hype?, ECIS, volume 2008, pages 2064–2075. [TMF10] R. Troncy, B. Malocha and A. T. Fialho: Linking events with media, Proceedings of the 6th International Conference on Semantic Systems, ACM, page 42. [VH10] G. Vossen and S. Hagemann: Unleashing Web 2.0: From concepts to creativity, Elsevier, 2010. [ZZ11] D. Zarrella and A. Zarrella: Das Facebook-Marketing-Buch, O’Reilly Germany, 2011. 44 Nikolaus Risslegger