Kurs Python richtig lernen/Webservices: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
K (Web-Service Kennenlernen mit cURL)
Zeile 5: Zeile 5:
 
Geschätzter Zeitaufwand für diese Übung: ca. '''1h'''.
 
Geschätzter Zeitaufwand für diese Übung: ca. '''1h'''.
  
=== Web-Service Kennenlernen mit cURL ===
+
=== Webservice kennenlernen mit cURL ===
  
cURL ist ein Werkzeug, mit dem Daten über eine Internetadresse herunter-/ und hochgeladen werden können. Es unterstützt zahlreiche Internetprotokolle wie HTTP, FTP, LDAP etc. Wir verwenden es hier um uns ohne Programmieraufwand mit der Funktionsweise des Web Services bekannt zu machen. Als Dokumentation dient die [http://curl.haxx.se/docs/manpage.html Manpage von cURL].  
+
In dieser Übung lernen wir Webservices kennen, d.h. der Aufruf einer entfernten Prozedur oder Funktion. Wir machen ein sog. "Reverse Geocoding", d.h. gegeben eine Koordinate wird die nächstgelegene Adresse oder der nächstgelegene Name gesucht.  
  
Da wir in dieser Übung den Web Service mit JSON als Datenformat verwenden (Nominatim unterstützt auch HTML und XML) und dieses auf der Konsole ansprechend formatiert haben möchten, verwenden wir als pretty printer das JSON Python Modul [http://docs.python.org/library/json.html json]. Hier ein Beispiel wie dieses verwendet werden kann:
+
cURL ('cörl') ist ein Kommandozeilen-Werkzeug, mit dem Daten über eine Internetadresse herunter- und hochgeladen werden können. Es unterstützt zahlreiche Internetprotokolle wie HTTP, FTP, LDAP etc. Es ist bei den meisten Linux dabei; für Windows muss es separat installiert werden. Wir verwenden es hier um uns ohne Programmieraufwand mit der Funktionsweise von Webservices bekannt zu machen. Als Dokumentation dient die [http://curl.haxx.se/docs/manpage.html Manualseite (manpage) von cURL].
 +
 
 +
Als Webservice verwenden wir 'Nominatim', der auch in der Suche auf der OpenStreetMap Homepage verwendet wird. Nominatim (lateinisch für "namentlich") ist ein Werkzeug, um in OpenStreetMap (OSM) über den Namen und Adresse nach OSM-Objekten zu suchen. Die freie Webapplikation kann mit dem Browser auch direkt verwendet werden: http://nominatim.openstreetmap.org .
 +
 
 +
Der Webservice Nominatim lässt sich über das verbreitete HTTP-Protokoll ansprechen ("HTTP GET Request"). Als Antwort-Datenformat (response) kennt Nominatim JSON, HTML und XML. Wir verwenden JSON und damit dieses auf der Konsole ansprechend formatiert wird, verwenden wir als pretty printer das JSON Python Modul [http://docs.python.org/library/json.html json]. Hier ein Beispiel wie dieses verwendet werden kann:
  
 
  curl [options] [URL...] | python -mjson.tool
 
  curl [options] [URL...] | python -mjson.tool
  
 +
''Tipp 1'': Verwenden Sie die Option ''-v'' (verbose), um genau zu sehen, wie der Request an den Webservice aussieht. Das hielft beim Debugging enorm.
  
''Tip 1'': Verwenden Sie die Option ''-v'' (verbose), um genau zu sehen, wie der Request an den Web Service aussieht. Das hielt beim Debugging enorm.
+
''Tipp 2'': Da das manuelle Erzeugen eines korrekten Weblinks (sog. "URL encoded query strings") an den Webservice etwas mühsam ist, können Sie cURL anweisen, mit Hilfe des Parameters ''--data-urlencode'' dies zu übernehmen. Beispiel (Verwendung von ''-G'' für einen HTTP GET Request):
  
''Tip 2'': Da das manuelle Erzeugen des URL encoded query strings an den Web Service URL etwas mühsam ist, können Sie cURL anweisen mit Hilfe des Parameters ''--data-urlencode'' dies zu übernehmen. Beispiel (Verwendung von ''-G'' für einen HTTP GET Request):
+
curl -G --data-urlencode "key=v a l u e" http://hsr.ch/pythonrichtiglernen
  
curl -G --data-urlencode "key=v a l u e" http://hsr.ch/pythonrichtiglernen
+
cURL macht daraus dann einen korrekten Aufruf ("GET Request") an http://hsr.ch/pythonrichtiglernen/?key=v%20a%20l%20u%20e.
  
cURL macht daraus dann einen GET Request an http://hsr.ch/pythonrichtiglernen/?key=v%20a%20l%20u%20e.
+
Die Dokumentation der Webservice API von Nominatim finden Sie [http://wiki.openstreetmap.org/wiki/Nominatim#Parameters hier].
  
Die Dokumentation der Web Service API von Nominatim finden Sie [http://wiki.openstreetmap.org/wiki/Nominatim#Parameters hier].
+
==== Aufgabe "Reverse Geocoding" ====
  
==== Aufgabe 1 ====
+
1. Finden Sie mit cURL und Nominatim den Längen- und Breitengrad der HSR (Oberseestrasse 10, 8640 Rapperswil).
Finden Sie mit cURL und Nominatim den Längen- und Breitengrad der HSR (Oberseestrasse 10, 8640 Rapperswil).
 
  
==== Aufgabe 2 ====
+
2. Nehmen Sie den gefundenen Längen- und Breitengrad und überprüfen Sie mit cURL, ob Nominatim Ihnen die richtige Adresse der HSR liefert.
Nehmen Sie den gefundenen Längen- und Breitengrad und überprüfen Sie mit cURL, ob Nominatim Ihnen die richtige Adresse der HSR liefert (reverse geocoding).
 
  
 
=== Web-Service Ansprechen mit Python  ===
 
=== Web-Service Ansprechen mit Python  ===

Version vom 13. September 2012, 01:11 Uhr

Übung "Web Services mit Python"

In dieser Übung lernen Sie die Verwendung von Web Services mit Python kennen. Wir verwenden dazu Nominatim, einen Web service zur Geokodierung von OSM-Daten (Open Streetmap).

Geschätzter Zeitaufwand für diese Übung: ca. 1h.

Webservice kennenlernen mit cURL

In dieser Übung lernen wir Webservices kennen, d.h. der Aufruf einer entfernten Prozedur oder Funktion. Wir machen ein sog. "Reverse Geocoding", d.h. gegeben eine Koordinate wird die nächstgelegene Adresse oder der nächstgelegene Name gesucht.

cURL ('cörl') ist ein Kommandozeilen-Werkzeug, mit dem Daten über eine Internetadresse herunter- und hochgeladen werden können. Es unterstützt zahlreiche Internetprotokolle wie HTTP, FTP, LDAP etc. Es ist bei den meisten Linux dabei; für Windows muss es separat installiert werden. Wir verwenden es hier um uns ohne Programmieraufwand mit der Funktionsweise von Webservices bekannt zu machen. Als Dokumentation dient die Manualseite (manpage) von cURL.

Als Webservice verwenden wir 'Nominatim', der auch in der Suche auf der OpenStreetMap Homepage verwendet wird. Nominatim (lateinisch für "namentlich") ist ein Werkzeug, um in OpenStreetMap (OSM) über den Namen und Adresse nach OSM-Objekten zu suchen. Die freie Webapplikation kann mit dem Browser auch direkt verwendet werden: http://nominatim.openstreetmap.org .

Der Webservice Nominatim lässt sich über das verbreitete HTTP-Protokoll ansprechen ("HTTP GET Request"). Als Antwort-Datenformat (response) kennt Nominatim JSON, HTML und XML. Wir verwenden JSON und damit dieses auf der Konsole ansprechend formatiert wird, verwenden wir als pretty printer das JSON Python Modul json. Hier ein Beispiel wie dieses verwendet werden kann:

curl [options] [URL...] | python -mjson.tool

Tipp 1: Verwenden Sie die Option -v (verbose), um genau zu sehen, wie der Request an den Webservice aussieht. Das hielft beim Debugging enorm.

Tipp 2: Da das manuelle Erzeugen eines korrekten Weblinks (sog. "URL encoded query strings") an den Webservice etwas mühsam ist, können Sie cURL anweisen, mit Hilfe des Parameters --data-urlencode dies zu übernehmen. Beispiel (Verwendung von -G für einen HTTP GET Request):

curl -G --data-urlencode "key=v a l u e" http://hsr.ch/pythonrichtiglernen

cURL macht daraus dann einen korrekten Aufruf ("GET Request") an http://hsr.ch/pythonrichtiglernen/?key=v%20a%20l%20u%20e.

Die Dokumentation der Webservice API von Nominatim finden Sie hier.

Aufgabe "Reverse Geocoding"

1. Finden Sie mit cURL und Nominatim den Längen- und Breitengrad der HSR (Oberseestrasse 10, 8640 Rapperswil).

2. Nehmen Sie den gefundenen Längen- und Breitengrad und überprüfen Sie mit cURL, ob Nominatim Ihnen die richtige Adresse der HSR liefert.

Web-Service Ansprechen mit Python

Aufgabe 3

Führen Sie die gleichen beiden Anfragen (Geocoding und Reverse Geocoding) wie in der vorherigen Aufgabe durch, nun aber mit Python. Verwenden Sie das Python Modul urllib um einen Request an den Web Service zu machen und json für das JSON Parsing.