Die Reise zum Mittelpunkt der Daten – Vortrag am Webmontag in Frankfurt

Monday, August 10th, 2009 at 5:33 pm


Vor ein paar Wochen hat mich Darren Cooper gefragt am heutigen Web Montag in Frankfurt einen kurzen Vortrag ueber APIs zu halten. Hier sind die Slides und die Notizen zum Vortrag.

Notizen

Die Reise zum Mittelpunkt der Daten

In den letzten Jahren hat sich Webentwicklung drastisch veraendert. Leider haben die Moeglichkeiten die wir heute haben sich noch nicht wirklich rumgesprochen.

Villabajo und Villariba Webdesign.

Wer sich noch erinnert, Villabajo und Villariba waren die fiktiven Doerfer in einer Fairy Werbung. Nach einer Paella-Party musste Villabajo nachher ihre Zeit mit Pfannenschrubben verbringen waehrend Villariba durch die Verwendung von Fairy schon feiern konnte.

Das gleiche findet im Webentwicklungsbereich statt. Waehrend viele noch (mental) an ihren CSS Loesungen rumschrubben und sich stundenlang darueber ereifern koennen ob denn XHTML jetzt tot ist oder nicht kann man schnell und einfach Webloesungen erstellen die einfach abzuaendern und staendig aktuell sind.

Dezentralisierung der Daten

Das groesste Missverstaendnis im Webdesign ist es das wir immer noch glauben das wir etwas basteln und dann die Kunden kommen. Die Webseite ist das wichtigste und wir verbringen die meiste Zeit damit sie zu erstellen, zu re-designen und dann einen SEO Spezialisten dafuer bezahlen uns doch bitte Endnutzer zu finden.

Dabei geht es auch anders. Vor ein paar Jahren habe ich dieses Buch rausgebracht. Darin wird beschrieben wie man das Netz und seine Angebote nutzen kann um ganz einfach Webseiten zu gestalten. Leider blieb der grosse Erfolg warscheinlich wegen des Titels aus. “Web Development Solutions: Ajax, APIs, Libraries, and Hosted Services Made Easy” ist dann doch etwas laenger als “No Bullshit Web Design”.

Der Trick, den ich im Buch erklaerte und auch hier nochmal anbringen will ist der folgende: anstatt das Web zur Seite zu bringen kann man auch die Seite ins web bringen.

Zentral ist ein CMS, was ein einfaches blog system sein kann (WordPress, Expression engine, was immer…).
Dann kann man die Daten die man fuer die Seite benoetigt im Web verteilen:

Die Vorteile von dieser Vorgangsweise sind die folgenden:

  • Die Daten sind auf Servern verteilt, was bedeutet das die eigene Seite auch mal offline sein kann.
  • Man erreicht Nutzer dieser Seiten die niemals auf die eigene Seite gekommen waeren.
  • Man bekommt Kommentare und Tags von diesen Seite was bedeutet das man eine Kommunikation beginnt und man sinnvolle Schluesselworte fuer SEO bekommt.
  • Man muss Inhalte nicht selbst in Webinhalte umwandeln (Bilder, Videos).
  • Man erlaubt Besuchern und Lesern die Daten auch in ihre eigenen Seiten einzubinden

Wer nachlesen will warum es Sinn macht diesen Weg einzuschlagen, kann auch in meinem Developer Evangelism Handbuch nachschlagen wo das nochmal im Detail erklaert wird.

APIs sind der Schluessel

Der Schluessel zu alle diesen Daten sind Application Development Interfaces oder kurz APIs. Das sind Programme die Firmen anbieten die einen Datenzugriff auf die Inhalte ihrer Webseiten erlauben.

Das kann so einfach sein wie die Adresse http://search.twitter.com/trends/current.json in einem Browser aufzurufen und dann die neuesten Twittertrends als JSON Datei zu bekommen.

Probleme mit APIs

Das Hauptproblem von APIs ist allerdings das jede Firma ihre API anders gestaltet. Unterschiedliche Zugangsmethoden, Eingabeparamater, Ausgabeformate und fehlende Dokumentation machen es nicht einfach, mehrere APIs in einem Produkt zu verwenden. Ein weiteres Problem ist, das die API nicht erreichbar sein kann, da nicht jede Firma die Resourcen und das Kapital hat einen dedizierten Server aufrecht zu erhalten.

Man braucht keine Rockstars

Waehrend die Verwendung von APIs noch vor ein paar Jahren ein Fachgebiet von Spezialisten war braucht man heutzutage kein “Rockstar” zu sein um ganz einfach Daten aus dem Netz zu mischen.

Einfacher mit YQL

YQL ist eine Meta-API mit der man andere APIs in einem einfachen Format verwenden kann.

select {was} from {wo} where {konditionen}

In der YQL Konsole kann man diese Anfrage in das Eingabefeld eingeben und bestimmen ob man XML oder JSON als Rueckgabeformat bekommt. Am Ende steht dann eine Webadresse die man sofort in einem Browser oder Programm verwenden kann. Die resultierenden Daten kann man entweder als formatierte Daten oder als Baum angezeigt bekommen. Die letzten paar Anfragen sowie Beispielsanfragen werden angezeigt. Die Auflistung der Datentabellen zeigt alle APIs auf, die durch YQL erreicht werden koennen. Jede einzelne dieser Tabellen kommt mit einer Beschreibung.

Beispiel: Frankfurt

Nehmen wir als Beispiel eine Seite die Informationen ueber Frankfurt anzeigen soll.

Der Haupttrick ist es, cURL dazu zu verwenden um Daten von YQL zu holen und weiterzuverarbeiten:

function getstuff($url){
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
if (empty($buffer)){
return 'Error retrieving data, please try later.';
} else {
return $buffer;
}
}

Dann kann man beispielsweise die Beschreibung von Frankfurt von Wikipedia ziehen:

$root = 'http://query.yahooapis.com/v1/public/yql?q=';
$city = 'Frankfurt';
$loc = 'Frankfurt';

$yql = 'select * from html where url = 'http://en.wikipedia.org/wiki/'.$city.'' and xpath="//div[@id='bodyContent']/p" limit 3';
$url = $root . urlencode($yql) . '&format=xml';
$info = getstuff($url);
$info = preg_replace("/.*<results>|</results>.*/",'',$info);
$info = preg_replace("/<?xml version="1.0"".
" encoding="UTF-8"?>/",'',$info);
$info = preg_replace("//",'',$info);
$info = preg_replace("/"/wiki/",'"http://en.wikipedia.org/wiki',$info);

Neueste Veranstaltungen aus Upcoming:

$yql = 'select * from upcoming.events.bestinplace(4) where woeid in (select woeid from geo.places where text="'.$loc.'") | unique(field="description")';
$url = $root . urlencode($yql) . '&format=json';
$events = getstuff($url);
$events = json_decode($events);
foreach($events->query->results->event as $e){
$evHTML.='<li><h3><a href="'.$e->ticket_url.'">'.$e->name.'</a></h3><p>'.substr($e->description,0,100).'…</p></li>';
}

Neueste Photos von Flickr:

$yql = 'select * from flickr.photos.info where photo_id in (select id from flickr.photos.search where woe_id in (select woeid from geo.places where text="'.$loc.'") and license=6) limit 16';
$url = $root . urlencode($yql) . '&format=json';
$photos = getstuff($url);
$photos = json_decode($photos);
foreach($photos->query->results->photo as $s){
$src = "http://farm{$s->farm}.static.flickr.com/{$s->server}/{$s->id}_{$s->secret}_s.jpg";
$phHTML.='<li><a href="'.$s->urls->url->content.'"><img alt="'.$s->title.'" src="'.$src.'"></a></li>';
}

Und das Wetter von Yahoo:

$yql='select description from rss where url="http://weather.yahooapis.com/forecastrss?p=GMXX0040&u=c"';
$url = $root . urlencode($yql) . '&format=json';
$weather = getstuff($url);
$weather = json_decode($weather);
$weHTML = $weather->query->results->item->description;

Kobayashi Maru

Kobayashi Maru ist ein fiktiver Test in Star Trek der unmoeglich zu loesen ist. Captain Kirk allerdings schaffte es ihn zu loesen indem er den Testcomputer manipulierte. Genauso kann man YQL dazu verwenden APIs zu erstellen, wo keine vorhanden sind. Zum Beispiel indem man HTML Daten von einer Seite liest:

select * from html where url="http://faz.de" and xpath="//h2"

Hier ausprobieren oder in der Konsole anzeigen.

Und diese dann auf englisch uebersetzt.

select * from google.translate where q in (select a from html where url="http://faz.de" and xpath="//h2") and target="en";

Hier ausprobieren oder in der Konsole anzeigen.

Man kann auch mehrere Datenquellen mischen um Probleme zu loesen fuer die es bisher keine Loesungen gab:

select title from twitter.user.timeline where title like "%@%" and id="codepo8" or id="ydn"

Gib mir twitter updates bei denen entweder der nutzer “codepo8” oder “ydn” einen link getweetet hat.

Hier ausprobieren oder in der Konsole anzeigen.

Vorteile von YQL

YQL ermoeglicht es einem ganz einfach APIs zu verwenden um eigene Loesungen zu erstellen:

  • APIs einfach mischen
  • Resultate ausfiltern
  • Einfache API Anmeldung
  • Als Konsole oder Kode
  • Dokumentation inklusive
  • Yahoos server als proxy und Zugang.

Ab ins Netz der Daten

YQL ermoeglicht es nicht nur Daten auszulesen sondern auch eigene Daten anzubieten. Mittels Open Tables kann man seine eigenen Daten als Tabelle in YQL anbieten. YQL erlaubt es damit Endnutzern die Daten einfach zu erreichen und fungiert als Firewall da nur 100000 Anfragen pro Tag und 1000 Anfragen pro Stunde erlaubt sind.

Danke

Ich hoffe das Interesse fuer YQL erweckt zu haben und kann nur noch empfehlen einfach mal damit loszulegen.

Das ist alles wofuer uns Zeit bleibt. Ich bin heute abend hier um auch weiterhin Frage und Antwort zu stehen.

Share on Twitter