XML-Ecke

Struktur in den Content!

Google API für RSS-Feeds

XML und JSON sind die Grundlagen der Google Ajax Feed API, mit der sich RSS-Feeds in beliebige Webseiten einbauen lassen. Dabei werden die Attribute von Atom- and RSS-Feeds ausgelesen und in ein XML- oder JSON-Format gebracht. Die Feeds lassen sich mit verschiedenen Optionen animiert anzeigen:

Um auch ohne JavaScript-Kenngnisse den Code dafür zu erstellen, hat Google eine kleine Web-Anwendung entwickelt, die zu bestimmten Suchbegriffen geeignete RSS-Feeds auswählt und das entsprechende Code-Schnipsel erstellt. Dieser Dynamic Feed Control Wizard ist auch eine gute Grundlage, um den Code erst einmal zu erstellen und dann an die eigenen Bedürfnisse anzupassen.

Entscheidend für den Content ist die Variable feeds, die ein Array von mehreren RSS-URLs definiert:

?View Code JAVASCRIPT
var feeds = [
	{title: 'XML-Ecke',
	 url: 'http://feeds.feedburner.com/Xml-ecke'
	},
	{title: 'Google Code',
	url: 'http://googlecode.blogspot.com/atom.xml'
	}
	];

In der folgenden Variablen options können unterschiedliche Optionen zur Darstellung der Feeds angegeben werden, etwa die Anzahl der Postings oder die Dauer der Anzeige eines Postings und des Übergangs zum nächsten Beitrag (in Millisekunden):

?View Code JAVASCRIPT
var options = {
	numResults : 5,
        stacked : true,
        horizontal : false,
        title : "",
	displayTime : 3000,
        fadeOutTime : 500
      }

Voraussetzung für die Nutzung ist ein API Key von Google, der für jeweils eine Web-Domain gültig ist. Die Google Ajax Feed API nutzt auch das WordPress-Plugin WP Social Blogroll, mit dem die “Blogroll” nach den jeweils aktuellsten Postings sortiert werden kann.

Posted in Im Lauf der Zeit | Tagged , , , | Leave a comment

Google vereinfacht Geocoding-Service

Rund zehn Monate nach der Einführung von Version 3 (V3) der Google Maps API hat Google auch seinen Geocoding-Service vereinfacht, der Postadressen oder Ortsangaben in Geodaten umwandelt. Auch hier ist jetzt kein besonderer Key für die Nutzung des Dienstes mehr erforderlich. Es genügt die Anforderung beim Webservice nach dem Schema:

http://maps.google.com/maps/api/geocode/output?parameters

Der Platzhalter “output” wird ersetzt durch Angaben zum gewünschten Ausgabeformat, wobei XML oder das schlanke JSON zur Verfügung stehen. Statt “parameters” wird die gewünschte Adresse angegeben, also zum Beispiel:

http://maps.google.com/maps/api/geocode/xml?address=Weifert-Janz-Straße+1+Mainz&sensor=false

Der erforderliche Parameter “sensor” gibt an, ob die Anfrage von einem Gerät mit der Erfassung von Geodaten kommt oder nicht. Optional kann mit dem Parameter “region” die geografische Region eingegrenzt werden, was etwa bei Orten sinnvoll ist, die es in mehreren Ländern gibt. Ohne diese Differenzierung zeigt der Geocoder zum Beispiel bei der Abfrage von Toledo den im US-Staat Ohio gelegenen Ort an. Erst die Präzisierung mit “region=es” sucht nach der spanischen Stadt. Für die Bezeichnung der Region werden die Länder-Codes der Top-Level-Domains (ccTLD) verwendet, also etwa “de” für Deutschland. Das Ergebnis der Abfrage im JSON-Format führt alle bekannten Informationen auf, darunter auch die Geodaten der geografischen Länge und Breite:

{
  "status": "OK",
  "results": [ {
    "types": [ "street_address" ],
    "formatted_address": "Weifert-Janz-Straße 1, 55122 Mainz, Deutschland",
    "address_components": [ {
      "long_name": "1",
      "short_name": "1",
      "types": [ "street_number" ]
    }, {
      "long_name": "Weifert-Janz-Straße",
      "short_name": "Weifert-Janz-Straße",
      "types": [ "route" ]
    }, {
      "long_name": "Mainz",
      "short_name": "Mainz",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "Mainz",
      "short_name": "MZ",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "Rheinland-Pfalz",
      "short_name": "RP",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "Deutschland",
      "short_name": "DE",
      "types": [ "country", "political" ]
    }, {
      "long_name": "55122",
      "short_name": "55122",
      "types": [ "postal_code" ]
    } ],
    "geometry": {
      "location": {
        "lat": 50.0042904,
        "lng": 8.2410587
      },
      "location_type": "RANGE_INTERPOLATED",
      "viewport": {
        "southwest": {
          "lat": 50.0011490,
          "lng": 8.2379114
        },
        "northeast": {
          "lat": 50.0074443,
          "lng": 8.2442067
        }
      },
      "bounds": {
        "southwest": {
          "lat": 50.0042904,
          "lng": 8.2410587
        },
        "northeast": {
          "lat": 50.0043029,
          "lng": 8.2410594
        }
      }
    }
  } ]
}

Die JSON-Elemente lassen sich nun mit wenigen Codezeilen als Javascript-Variablen definieren und für Kartendarstellungen verwenden – zum Beispiel:

?View Code JAVASCRIPT
var latitude = myJSONResult.results.location.lat;
var longitude = myJSONResults.location.lng;

Dabei verlangt Google in seinen Nutzungsbestimmungen, dass nur Karten auf der Grundlage seiner eigenen APIs für Google Maps oder Google Earth verwendet werden dürfen. Neben der Auflösung von Adressen wird auch das Reverse Geocoding unterstützt, also die Umwandlung von Geodaten mit den Angaben der geografischen Breiten- und Längengrade in Adressen. Für das oben gezeigte Beispiel funktioniert dies etwa auf diese Weise:

http://maps.google.com/maps/api/geocode/json?latlng=50.0042904,8.2410587&sensor=false
Posted in Im Lauf der Zeit | Tagged , , | Leave a comment

XFN vernetzt Google Buzz in alle Richtungen

XFN rel="me"Vor sechs Jahren war XFN, das XHTML Friends Network, das erste Mikroformat, das die schlichte Struktur von HTML um ein bisschen Semantik bereichert hat: Mit dem Attribut “rel” (relationship) sollte die persönliche Beziehung eines Web-Anbieters zu einer verlinkten Site deutlich gemacht werden. Blogger organisieren so ihre Blogroll – in WordPress wird XFN von vornherein unterstützt. Auch Friendster, LinkedIn und das Google-Netzwerk Orkut verwenden XFN.

Mit Google Buzz erhält XFN jetzt neue Schubkraft. Dem neuen Angebot geht es offenbar weniger darum, sich als Alternative zu Twitter und Facebook in Stellung zu bringen. Vielmehr will Buzz die bestehenden Profile im sozialen Web zusammenführen, auf einer neuen Plattform aggregieren. XFN ist der Klebstoff fürs soziale Web:

  • Das Attribut rel=”friend” definiert eine freundschaftliche Beziehung zu der verlinkten Website.

  • Das Attribut rel=”me” definiert eine Identitätsbeziehung zu der verlinkten Website: Die gerade angezeigte Webseite und die verlinkte Webseite sind derselben Person zugehörig.
    Um dem Browser mitzuteilen, was das Attribut bedeutet, wird im Header der Webseite eine Referenz zum XFN-Standard angegeben:

<head profile="http://gmpg.org/xfn/11">

Beim kommenden Standard HTML 5 wird das nicht mehr erforderlich sein – da sind die XFN-Attribute “friend” und “me” bereits integriert.

Mit rel=”me” können Twitter und Blogs im sozialen Netz an Google Buzz angekoppelt werden:

<a rel="me" href="http://twitter.com/pedromiramis/">meine Tweets</a>

Dazu hat Google auf der Profilseite des einzelnen Nutzers die Möglichkeit vorgesehen, Internet-Adressen hinzuzufügen und als “eigene Seite” festzulegen. Standardmäßig sind bereits die persönlichen Accounts in anderen Google-Angeboten wie Picasa oder YouTube ausgewählt.

In der Gegenrichtung kann der Buzz-Stream als Atom-Feed in beliebige Webseiten eingebunden werden, die Adresse lautet

http://buzz.googleapis.com/feeds/_user_/public/posted

(statt user ist der jeweilige Nutzername einzugeben)

Google hat bereits vor geraumer Zeit eine Software-Schnittstelle entwickelt, um Web-Anwendungen gezielt nach Freundschafts- und Identitätsbeziehungen suchen zu lassen, die Google Social Graph API. Der Google-Crawler erfasst die XFN-Angaben zu diesen Beziehungen und erstellt daraus einen “Sozialen Graphen”, einen Index von Beziehungen zwischen Personen. Neben XFN kommt auch FOAF (Friend of a Friend) zum Einsatz, das eine weitergehende Beschreibung von persönlichen Beziehungen zulässt. Genutzt wird die Social Graph API etwa von der Google-Plattform OpenSocial für die Entwicklung von Anwendungen für Soziale Netzwerke. Und bei Google Buzz werden die Ergebnisse, die der “soziale Crawler” aufgrund des Link-Attributs rel=”me” aufspürt, dazu verwendet, Postings aus anderen Quellen wie etwa Twitter in Buzz einzubinden.

Google hat angekündigt, die Buzz-API nach und nach zu erweitern und weitere Standards oder Protokolle anzubinden. Wie beim Wave-Projekt – um das es inzwischen ziemlich still geworden ist – soll Buzz von allen frei genutzt und den eigenen Bedürfnissen angepasst werden. Zum Start von Buzz ist die Verwaltung der persönlichen Kontakte noch nicht besonders gut gelöst – hier greift Buzz einfach auf die Kontaktdaten der Google Mail zu. In ersten Tagen wurden diese auch als “Follower” öffentlich gemacht – inzwischen aber ist Google nach einiger Kritik dabei, die Kontaktverwaltung nachzubessern und die Sichtbarkeit der persönlichen Kontakte einzuschränken.

Posted in Im Lauf der Zeit | Tagged , | 1 Comment

XML verpackt Gadgets für Google Wave

Google Wave Wenn es um Datenaustausch im Netz geht, kommt XML ins Spiel – auch bei Kommunikation und Kooperation mit Google Wave. Tatsächlich handelt es sich bei den Waves um nichts anderes als XML-Dokumente, die auf einem Server abgelegt und aktualisiert werden. Der Nutzer bekommt davon nicht viel mit – die Verwaltung der Dokumente findet in der “Cloud” statt. Ein bisschen unheimlich: Die Waves lassen sich noch nicht mal dauerhaft löschen, sie bleiben im Trash-Ordner erhalten.

Daneben dient XML auch als Verpackungsmittel für Wave-Gadgets: Mit diesen kleinen Web-Anwendungen lassen sich Waves um neue Funktionen erweitern. So gibt es etwa Gadgets für das Einbinden von Twitter-Feeds oder RSS-Feeds. Die von Google offen gelegte “Wave Gadgets API” ist überaus einfach gehalten. Sie gibt lediglich ein XML-Gerüst vor, das jede Art von Web-Content aufnimmt: HTML, CSS, JavaScript u.a.

Das XML-Dokument für ein Wave-Gadget definiert ein “Module” mit bestimmten Eigenschaften. Einziges Tochterelement ist “Content”, und hier wird der Code für die Anwendung in einem CDATA-Container abgelegt:

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title="Hello Wave" height="600" author="test">
    <Require feature="wave" /> 
	<Require feature="locked-domain" /> 
	<Require feature="dynamic-height" />
  </ModulePrefs>
  <Content type="html">
    <![CDATA[     
<script type="text/javascript">
     function Start() {
          if (document.Form.Eingabe.value == "") {  
               alert( "Bitte einen Namen eingeben!" );
     }
     else {
          alert( "Herzlich Willkommen bei Google Wave, " + document.Form.Eingabe.value  );
          } 
      }
 }
</script>
<h1>Gadgets für Google Wave werden in XML verpackt</h1>
<div>
<form name="Form3">
 Name: <input type="text" name="Eingabe"> 
 <input type="button" value="Klick mich!" onClick="Start();">
</form>
</div>
    ]]>
  </Content>
</Module>

In diesem Beispiel wurden mit JavaScript einfach ein Texteingabefeld und ein Button eingerichtet, der ein “Alert”-Fenster ausgibt. Die Struktur folgt dem OpenSocial-Standard von Google. Damit können alle Gadgets, die für iGoogle oder OpenSocial-Plattformen entwickelt wurden, auch von Google Wave verwendet werden.

Posted in Im Lauf der Zeit | Tagged | Leave a comment