Kurs Python richtig lernen/Webservices: Unterschied zwischen den Versionen
Stefan (Diskussion | Beiträge) K |
Stefan (Diskussion | Beiträge) K |
||
Zeile 1: | Zeile 1: | ||
== Übung "Web Services mit Python" == | == Übung "Web Services mit Python" == | ||
− | In dieser Übung lernen Sie die Verwendung von Webservices (Web Services) mit Python kennen. Wir konzentrieren uns hier auf Clients und verwenden dazu den | + | In dieser Übung lernen Sie die Verwendung von Webservices (Web Services) mit Python kennen. Webservices bestehen immer aus Client und Server. Wir konzentrieren uns hier auf (konsumierende) Clients und verwenden dazu den Webserver 'Nominatim' zur Geokodierung (bzw. "Reverse Geocodierung") von OpenStreetmap-Daten (OSM = Abk. für OpenStreetmap). Ein Webservices ist wie ein Aufruf einer entfernten Prozedur oder Funktion, die übers Internet etwas zurückgibt. |
Geschätzter Zeitaufwand für diese Übung: ca. '''1h'''. | Geschätzter Zeitaufwand für diese Übung: ca. '''1h'''. | ||
Zeile 7: | Zeile 7: | ||
=== Webservice kennenlernen mit cURL === | === Webservice kennenlernen mit cURL === | ||
− | In dieser Übung | + | In dieser Übung machen ein sog. "Reverse Geocoding", d.h. gegeben eine Koordinate wird die räumlich 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 | + | Zunächst probieren wir ein Software-Client aus namens cURL ('cörl'), das ganz ohne Python auskommt. cURL ist ein Kommandozeilen-Werkzeug, mit dem Daten über eine Internetadresse herunter- und hochgeladen werden können. Es unterstützt zahlreiche Internetprotokolle u.a. auch das HTTP-Protokoll ("HTTP GET Request"). 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 . | 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 | + | Der Webservice Nominatim lässt sich über HTTP ansprechen. 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 | ||
Zeile 37: | Zeile 37: | ||
Tipps: | Tipps: | ||
− | * Verwenden Sie das Python-Modul [[urllib]] um einen Request an den Webservice zu machen. | + | * Verwenden Sie das Python-Modul [[urllib]] (vgl. Kap. 20.5 in der Python Doku.) um einen Request an den Webservice zu machen. |
− | * Nehmen Sie die Python-Bibliothek [http://docs.python.org/library/json.html | + | * Nehmen Sie die Python-Bibliothek [http://docs.python.org/library/json.html JSON] für das Interpretieren des JSON-Formats ("JSON Parsing"). |
Version vom 14. September 2012, 14:45 Uhr
Inhaltsverzeichnis
Übung "Web Services mit Python"
In dieser Übung lernen Sie die Verwendung von Webservices (Web Services) mit Python kennen. Webservices bestehen immer aus Client und Server. Wir konzentrieren uns hier auf (konsumierende) Clients und verwenden dazu den Webserver 'Nominatim' zur Geokodierung (bzw. "Reverse Geocodierung") von OpenStreetmap-Daten (OSM = Abk. für OpenStreetmap). Ein Webservices ist wie ein Aufruf einer entfernten Prozedur oder Funktion, die übers Internet etwas zurückgibt.
Geschätzter Zeitaufwand für diese Übung: ca. 1h.
Webservice kennenlernen mit cURL
In dieser Übung machen ein sog. "Reverse Geocoding", d.h. gegeben eine Koordinate wird die räumlich nächstgelegene Adresse oder der nächstgelegene Name gesucht.
Zunächst probieren wir ein Software-Client aus namens cURL ('cörl'), das ganz ohne Python auskommt. cURL ist ein Kommandozeilen-Werkzeug, mit dem Daten über eine Internetadresse herunter- und hochgeladen werden können. Es unterstützt zahlreiche Internetprotokolle u.a. auch das HTTP-Protokoll ("HTTP GET Request"). 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 HTTP ansprechen. 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 1 "Reverse Geocoding"
1a. Finden Sie mit cURL und Nominatim den Längen- und Breitengrad der HSR (Oberseestrasse 10, 8640 Rapperswil).
1b. Nehmen Sie den gefundenen Längen- und Breitengrad und überprüfen Sie mit cURL, ob Nominatim Ihnen die richtige Adresse der HSR liefert.
Aufgabe 2 Webservice ansprechen mit Python
Führen Sie die gleichen beiden Anfragen (Geocoding und Reverse Geocoding) wie in der vorherigen Aufgabe durch, nun aber mit Python.
Tipps: