HTTP Request: Abfrage der 'google weather api'

From bab-tec.de wiki

Jump to: navigation, search

Mittels einer Anfrage an den Google Wetterdaten Server („Google Weather API“) erhält der eibPort eine XML-Datei als Antwort. Die Antwort wird dann durch den Ausdruck gefiltert und die Werte über die Ausgänge an die Visualisierung weitergeleitet. Für den Request werden folgenden Einstellungen gemacht:

Protokoll: http:// Basis-URL: www.google.de Request Type: GET GET-URL / Post Data: /ig/api?weather=Dortmund

Hinweis: Es ist wichtig sicher zu stellen, dass die Antwort des Requests in der richtigen Sprache erfolgt. Nutzt man z.B. „google.com“ anstatt „google.de“ erfolgt die Antwort in englischer Sprache.

Mit dem Stadtnamen hinter ‚weather=‘ wird bestimmt von welchem Ort die Wetterdaten übermittelt werden. Theoretisch wäre es möglich, diese Einstellung mittels der Wertobjekte zu ändern.

Kopiert man die URL dieses Requests in eine Browserzeile und ruft sie ab, wird die Antwort als XML-Datei im Browser angezeigt. In unserem Beispiel möchten wir die aktuellen Wetterbedingungen, die aktuelle Temperatur in Celsius, die aktuelle Luftfeuchtigkeit und die Höchsttemperatur für den nächsten Tag ausgeben. Zunächst erstellen wir die Ausdrücke für jeder dieser Ausgaben einzeln, danach fügen wir sie zusammen.

Hinweis: Die erstellten Ausdrücke lassen sich am besten mit einem Tool kontrollieren. Es gibt die verschiedensten Tools online sowie Beispiel: http://dev.radsoftware.com.au/downloads/Rad.RegexDesigner.Setup.1.4.exe. Dabei ist zu beachten, dass die Flags manchmal eine andere Bedeutung haben (z.B. Dot All = Singleline).


Wichtig: Mit Mozilla Firefox kann es vorkommen, dass sich am Ende des Regulären Ausdrucks ein Leerzeichen befindet wenn er direkt von hier in das entsprechende Feld im Mathejob kopiert wird. Ist das der Fall funktioniert der Ausdruck nicht. Bitte überprüfen Sie den Eintrag im Mathejob gründlich.


Aktuellen Wetterbedingungen:
Die aktuellen Wetterdaten stehen im Abschnitt „<current_conditions>“. Danach folgt die Angabe „<condition data=“. Diese wiederholt sich jedoch in den Angaben „<forecast conditions>“ je dreimal. Um zu verhindern dass der Ausdruck auf alle „condition data=“ zutrifft muss dem Ausdruck der String „<current_conditions>“ vorangestellt werden.

<current_conditions>.*?<condition data="([a-zA-ZäÄöÖüÜ\s]+)"

Damit dieser Ausdruck zum Erfolg führt muss zwischen „<current_conditions>“ und dem eigentlichen Ausdruck ein „.*?“ (Punkt - Sternchen - Fragezeichen) platziert werden und das Flag „DotAll“ aktiviert werden. Hintergrund ist der, dass die beiden Strings in verschiedenen Zeilen stehen. Durch das Flag „DotAll“ berücksichtigt der Ausdruck auch die Zeilenenden (er würde sonst Zeile für Zeile versuchen zu greifen) und durch das „.*?“ verhält sich der Ausdruck „ungreedy“.

Es handelt sich dabei um die erste Gruppe, weshalb der Ausgang 1 als EIS 15 Text definiert wird.

Aktuelle Temperatur in Celsius
Die Ausgabe der aktuellen Temperatur steht hinter dem String „<temp_c data=“. Dieser kommt nur einmal im gesamten Text vor. Der Ausdruck lautet demnach:

temp_c data="([\-\+]?[0-9]+)

Es muss kein Flag aktiviert sein. Da es sich dabei um einen Temperatur Wert handelt wird der Ausgang EIS 5 formatiert. Die Datenkonfiguration ist „ASCII – Unsigned long deicmal“.

Aktuelle Luftfeuchtigkeit
Die Ausgabe der aktuellen Luftfeuchtigkeit erfolgt hinter dem String „Feuchtigkeit:“. Sollte die Antwort in Englisch gegeben worden sein, steht an dieser Stelle „Humidity“ und der Ausdruck trifft nicht zu.

Feuchtigkeit: ([0-9]+)

Kein Flag ist dazu aktiviert. Es handelt sich um einen Prozentwert, also wird der Ausgang als EIS 6 formatiert. Die Datenkonfiguration ist „ASCII – Unsigned long deicmal“.

Höchsttemperatur für den nächsten Tag
Die Vorhersagen für die kommenden Tage finden sich im Abschnitt „<forecast_conditions>“. Dort gibt es eine Angabe „high data=“ in der die Höchsttemperatur am jeweiligen Tag in Celsius angeben wird. Allerdings existiert dieser Abschnitt insgesamt viermal, jeweils für die vier darauf folgenden Tage. Im aktuellen Fall interessiert uns aber nur die Temperatur von morgen, also der insgesamt erste Eintrag zu „high data=“.

high data="([\-\+]?[0-9]+)

Alle Flags sind deaktiviert. Dieser Ausdruck liefert den ersten Eintrag von insgesamt 4 Treffern. Da es sich um einen Temperatur Wert handelt wird der Ausgang dazu wieder EIS 5 formatiert. Die Datenkonfiguration ist „ASCII – Unsigned long deicmal“.

Alle Ausgaben in einem regulären Ausdruck
Da im Job 4 Ausgänge genutzt werden können, ist es möglich alle oben genannten Informationen mittels eines einzigen regulären Ausdrucks herauszufiltern und durch die Konfiguration von Gruppen auf die vier Ausgänge zu legen. Dabei ist zu beachten, dass das Flag „DotAll“ aktiviert ist, da der Ausdruck auch Zeilenenden erkennen muss. Zwischen den Ausdrücken wird jeweils ein „.*“ platziert.

<current_conditions>.*?<condition data="([a-zA-ZäÄöÖüÜ\s]+)".*temp_c data="([\-\+]?[0-9]+).*Feuchtigkeit: ([0-9]+).*?high data="([\-\+]?[0-9]+)

Hinweis: Zwischen dem Ausdruck für die Feuchtigkeit und der Höchsttemperatur für den nächsten Tag muss neben dem „.*“ das Fragezeichen gesetzt werden, um den Ausdruck „ungreedy“ werden zu lassen.

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox