Closed rgraulus closed 4 years ago
Yes, just pass it as the 'key' kwarg. And it applies to all Google's methods in this geocoder. In the example below, I put my key in an environment variable and retrieve via os module:
import os
key_google = os.environ['GOOGLE_API_KEY']
geocoder.google({'lng': -76.33318, 'lat': 42.50656}, method='reverse', key=key_google)
For some reason I can't get geocoder to work. Here's what I tried:
import os
import geocoder
g = geocoder.google('Mountain View, CA')
print(g.latlng)
None
key_google = os.environ['MY_GOOGLE_KEY'] geocoder.google({'lng': -76.33318, 'lat': 42.50656}, method='reverse', key=key_google)
KeyError Traceback (most recent call last) ipython-input-20-d2b1c1f1a489> in module> ----> 1 key_google = os.environ['MY_GOOGLE_KEY'] 2 geocoder.google({'lng': -76.33318, 'lat': 42.50656}, method='reverse', key=key_google) ~/miniconda3/envs/sandbox/lib/python3.8/os.py in getitem(self, key) 673 except KeyError: 674 # raise KeyError with the original key value --> 675 raise KeyError(key) from None 676 return self.decodevalue(value) 677
KeyError: 'MY_GOOGLE_KEY'
@rgraulus It looks like you don't have the MY_GOOGLE_KEY
environ set. What do you see if you type echo $MY_GOOGLE_KEY
in bash? If you see nothing, you need to set the variable (i.e. export MY_GOGLE_KEY="yourkeyvalue"
)
When I type echo $MY_GOOGLE_KEY in the command line it prints out my Google Maps API key. So, the variable is set. However, this did not resolve the issue. Also, I checked my Google credentials and I do have a Google Maps Geocoding API key.
I also tried a few other commands e.g.: g = geocoder.google('Mountain View, CA') print(g.latlng)
None
g = geocoder.google([45.15, -75.14], method='reverse')
print(g.city)
print(g.state)
print(g.state_long)
print(g.country)
print(g.country_long)
>>>None
>>>None
>>>None
>>>None
I always get the output None.
Also, I tested my API key by adding it to the following request and it works:
Based on the trace back you shared (below), it looks like the python process that ran your code does not have access to the MY_GOOGLE_KEY
environment variable. You can see this on line 3: ----> 1 key_google = os.environ['MY_GOOGLE_KEY']
.
KeyError Traceback (most recent call last)
ipython-input-20-d2b1c1f1a489> in module>
----> 1 key_google = os.environ['MY_GOOGLE_KEY']
2 geocoder.google({'lng': -76.33318, 'lat': 42.50656}, method='reverse', key=key_google)
~/miniconda3/envs/sandbox/lib/python3.8/os.py in getitem(self, key)
673 except KeyError:
674 # raise KeyError with the original key value
--> 675 raise KeyError(key) from None
676 return self.decodevalue(value)
677
Can you try running your code again from the same shell where you confirmed that the environment variable is set?
Regarding the None
output, I'm pretty sure that Google requires an API key now for all requests. If the key isn't set up properly, you probably will not get a useful response from Google's API.
Great, it now works!
Two more questions:
Thanks!
I haven't used this project for a while, so I can't comment on your first point. My guess is that you can't, but you can review the documentation and or source code for the Google api portion of the project to confirm. Regarding your second question, you can definitely write the output (and whatever else you want) to a CSV. Checkout Python's built in csv module: https://docs.python.org/3/library/csv.html
Thanks!
Hi,
I have the same issue pop up again!
Since I get the same None
output as before as well as KeyError: 'MY_GOOGLE_KEY' I assume this has to do with the PATH again...Not sure why??
I added the directory of the conda env where geocoder is installed to the .bashrc file: export PATH=$PATH:/home/rik/miniconda3/envs/sandbox
But this does not solve the problem.
What am I doing wrong?
Regards
Rik
Does your code supports Google's reverse geocoding since they require the use of an API key? I quickly browsed through your documentation but couldn't find anything on how to use Google API key. Please advise.