Seite 1 von 2

Python Google Places API

Verfasst: Montag 21. Oktober 2019, 20:40
von illy1
Hallo,

ich bin ein kompletter Neuling in Programmieren und Python. Nun folgendes, ich probiere mich ein wenig mit der Places API von Google aus. ich habe folgendes geschrieben:

Code: Alles auswählen

from CredentialsGoogle import APIKey
import googlemaps
import urllib
import json


gmaps = googlemaps.Client(key = APIKey)

search = "Handwerker Berlin"
input = "input="+search           
inputtype = "inputtype=textquerry"
fields = "fields=formatted_address,name,rating"

json1 = "json?"+input+"&"+inputtype+"&"+fields

find_places = "https://maps.googleapis.com/maps/api/place/findplacefromtext/"+json1+"&key="+APIKey

request = urllib.request.urlopen(find_places)

print(json.load(request))
Nun gibt er mir folgendes aus:

{'candidates': [], 'status': 'INVALID_REQUEST'}

Frage ist WARUM?

Und könnt ihr mir eine gute PDF schicken wo der Umgang mit googlemaps mod und allgemein APIs erklärt wird? (Befehle, usw.)

Ich danke vielmals,

Illy

Re: Python Google Places API

Verfasst: Montag 21. Oktober 2019, 21:12
von __deets__
Ich sehe einen Rechtschreibfehler in deinem Code. Der könnte dafür verantwortlich sein. Ansonsten ist etwas befremdlich, dass du zwar einen Google Maps Client erzeugst, den aber dann gar nicht benutzt. Warum nicht? Und die Dokumentation des googlemaps-Moduls solltest du mal lesen. Ob das ein PDF ist kann ich dir nicht sagen.

Re: Python Google Places API

Verfasst: Montag 21. Oktober 2019, 21:21
von illy1
Ja weil ich das Prinzip des Clients nicht vertanden habe, woher weiß man welche commands da gültig sind und nicht? Und wie heißen denn die ganzen Codes?

Und ich habe keine Dokumentation des Googlemap-Moduls gefunden.

Re: Python Google Places API

Verfasst: Montag 21. Oktober 2019, 21:36
von Sirius3
Google will das Zeug ja verkaufen. Dementsprechend ist die Dokumentation sehr gut. Einfach mal lesen: https://developers.google.com/places/web-service/search

Re: Python Google Places API

Verfasst: Montag 21. Oktober 2019, 21:48
von illy1
Übrigens lag es auch an dem Rechtschreibfehler.

@Sirius: Ja schon, aber ich weiß nicht wo ich die googlemaps-modul befehle da entnehmen soll, wie gesagt, ich bin ein kompletter newby

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 11:54
von illy1
Meine Frage ist: wie funktioniert das gmaps.Client? Was macht das? Woher weiß ich, dass zum Beispiel ein command gmaps.places_nearby heißt?(habs in einem video gesehn)

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 12:06
von Jankie
Schau dir das mal an, vielleicht wirst du dort fündig.

https://github.com/googlemaps/google-ma ... ces-python

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 12:07
von __blackjack__
@illy1: Auf die schnelle habe ich keine fertig generierte Dokumentation gefunden, aber die Module scheinen dokumentiert zu sein. Also entweder in den Quelltext schauen und in einer interaktiven Shell untersuchen und/oder für sich selbst die Dokumentation generieren.

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 12:09
von __deets__
Indem man in dessen Repository https://github.com/googlemaps/google-ma ... ces-python mal in die Beispiele schaut. Ich nehme desweiteren mal an, dass die "einfach" bestehende API-Calls wie sie in der offiziellen Dokumentation auftauchen abbilden. Also systematisch Namen und Parameter zu aufrufen machen. Das ist aber nur eine Vermutung.

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 17:12
von illy1
Die Beispiele habe ich mir schon angeschaut, aber nun mache ich die API suche mit den Json Links. Nun folgendes Problem:

Code: Alles auswählen

from CredentialsGoogle import APIKey
import googlemaps
import urllib
import json



search = input("Bitte Stichwort für Ortssuche eingeben: ")
query= "query="+search
find_places = "https://maps.googleapis.com/maps/api/place/textsearch/json?"+query+"&key="+APIKey
url_json = urllib.request.urlopen(find_places)
jsonf = json.load(url_json)
for places in jsonf['results']:
    place_id = places['place_id']
    details = "https://maps.googleapis.com/maps/api/place/details/json?place_id="+place_id+"&fields=name,formatted_address,rating,formatted_phone_number&key="+APIKey
    url_json2 = urllib.request.urlopen(details)
    jsondetails = json.load(url_json2)
    for field in jsondetails['result']:
        place_name = field['name']
        place_address = field['formatted_address']
        place_phone = field['formatted_phone_number']
        print(place_name+" "+place_address+" "+place_phone)
        
        
Nur macht das Program nicht das was es machen soll und gibt mir einen Fehler aus, nämlich dass "field" nicht definiert sei(zumindest keine liste enthalte).
Da habe ich beim Debugger geschaut und tatsächlich, field ist nur mit einem String aus der Liste "result" des Json-Files definiet. Kann mir jemanden bitte erklären warum?

Bild

Wäre sehr cool, ich danke euch :)

MfG,

Illy

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 17:22
von __blackjack__
@illy1: Auf dem Bild ist ein Syntaxfehler in der IDE zu sehen. Oder zumindest war da mal einer? Warum zeigst Du dieses Bild?

Die `field` ist halt nicht das was Du denkst was es ist. Was ist ``jsondetails["result"]`` für ein Datentyp? Und was bedeutet es da mit einer ``for``-Schleife drüber zu laufen — an was wird `field` da gebunden? Offensichtlich an etwas anderes als Du denkst. Das sind Grundlagen.

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 17:31
von illy1
jsondetails['results'] soll von der json datei, die bei "details" erstellt wird, die Werte unter "result" herausnehmen. Die for Schleife ist dazu da, dass diese Werte in einen directory an field übermittelt werden, im Prinzip also nur eine Wiederholung von Zeile 18.

Er soll mir die Werte von field herausgeben, die ich in den darauffolgenden Zeilen beschrieben habe.(Phonenumber usw)

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 17:49
von __deets__
Das war nicht die Frage. Die Frage ist, welchen TYP jsondetails["result"] hat. Kleiner Tipp: es ist keine Liste, und kein String. Und keine Nummer. Bleibt nicht mehr so viel uebrig. Und wenn man ueber ein Objekt dieses mysterioesen Typens iteriert, wie du es tust, dann bekommt man dessen Schluessel. Wenn man die Werte haben will, muss man noch was anderes machen.

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 17:55
von illy1
Nun es ist ein Dict? Und könntest du mir erklären was genau ich da machen soll? :D Thx

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 17:56
von __blackjack__
@illy1: Das ist aber keine Wiederholung von Zeile 18 weil ``jsonf["result"]`` und ``jsondetails["result"]`` nicht den gleichen Typ haben und deshalb auch nicht gleich behandelt werden können. ``for item in container:`` kann je nach Typ eine andere Bedeutung haben.

In Zeile 18 das `places` sollte vielleicht besser `place` heissen, denn das repräsentiert ja nur *einen* Ort in jedem Schleifendurchlauf.

Und bei `field` wäre interessant wie Du auf *den* Namen gekommen bist und was Du denkst wie der denn auszusehen hat. Das macht doch überhaupt gar keinen Sinn anzunehmen dass das so funktionieren könnte.

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 18:01
von illy1
@_blackjack_

Ahsooo ok, naja wie gesagt, ich habe einfach absolut keine Ahnung, bin einfach der größter Quereinsteiger überhaupt :D

und ja mit place hast du recht :D

Bei field dachte ich dass er mir die Werte der "Fields" innerhalb des Result Directorys wiedergibt, deshalb habe ichd as field genannt :D

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 18:06
von __blackjack__
@illy1: Aber was sind denn dann ”Fields”? Du behandelst es ja dann als wäre es wieder das komplette Wörterbuch, und das in einer Schleife, das macht alles gar keinen Sinn.

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 18:32
von illy1
Fields sind die Keys in den Directorys, ich habe das einfach fields gannt, weil es in meinem Kopf einfach ist ein Feld zu merken als ein Key xD

Aber das Hauptproblem ist noch, warum erkennt er das jsondetails, was die Google Place Details API sein soll, nicht als ein Directory?

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 18:34
von illy1
Zumal auch in der API-URL selbst, sind diese Keys als Fields gekennzeichnet:

Code: Alles auswählen

"https://maps.googleapis.com/maps/api/place/details/json?place_id="+place_id+"&fields=name,formatted_address,rating,formatted_phone_number&key="+APIKey"

Re: Python Google Places API

Verfasst: Dienstag 22. Oktober 2019, 18:37
von illy1
__blackjack__ hat geschrieben: Dienstag 22. Oktober 2019, 18:06 @illy1: Aber was sind denn dann ”Fields”? Du behandelst es ja dann als wäre es wieder das komplette Wörterbuch, und das in einer Schleife, das macht alles gar keinen Sinn.
Aber wieso nicht?

Ich möchte ja nur, dass er so wie in Zeile 18 das selbe Prinzip mit einer anderen URL wiederholt.