-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Open
Labels
triage meI really want to be triaged.I really want to be triaged.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.Error or flaw in code with unintended results or allowing sub-optimal usage patterns.
Description
Environment Details
API Used: Places
OS: Mac OS 10.15.4 (Catalina)
Python Version: 3.8
Library Version: 4.4.1
Other Info: Executed in PyCharm
Steps to Reproduce
- Retrieve a list of places with a radius
- submit a next page request with next_page_token
Code that Produces Exception
import googlemaps
import json
from pprint import pprint
import time
## Import API Key
with open('config.json') as config_file:
config_data = json.load(config_file)
## Establish API Connection
gmaps = googlemaps.Client(key=config_data['maps_api_key'])
## Find places
barber_shops = gmaps.places('barber shop', radius=3218)
#Extract Next Page Token
npt = barber_shops["next_page_token"]
#For Usability
print(f'The first business returned is {barber_shops["results"][0]["name"]}')
print(f'\t The placed id is {barber_shops["results"][0]["id"]}')
print(f'\n\t\tThe next_page_token is {npt}')
#Request the next page || Raises googlemaps.exceptions.ApiError: INVALID_REQUEST
next_page_barber_shops = gmaps.places('barber shop', radius=3218, page_token=npt)
pprint(next_page_barber_shops)
Stack Trace
Traceback (most recent call last):
File "/Users/bjg/CDA/GMaps_LeadGen/rate_limit_bug", line 26, in <module>
next_page_barber_shops = gmaps.places('barber shop', radius=3218, page_token=npt)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/googlemaps/client.py", line 418, in wrapper
result = func(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/googlemaps/places.py", line 243, in places
return _places(
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/googlemaps/places.py", line 409, in _places
return client._request(url, params)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/googlemaps/client.py", line 313, in _request
result = self._get_body(response)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/googlemaps/client.py", line 342, in _get_body
raise googlemaps.exceptions.ApiError(api_status,
googlemaps.exceptions.ApiError: INVALID_REQUEST
Extra
Adding time.sleep(2) resolves this error and the code executes
Working Code
import googlemaps
import json
from pprint import pprint
import time
## Import API Key
with open('config.json') as config_file:
config_data = json.load(config_file)
## Establish API Connection
gmaps = googlemaps.Client(key=config_data['maps_api_key'])
## Find places
barber_shops = gmaps.places('barber shop', radius=3218)
#Extract Next Page Token
npt = barber_shops["next_page_token"]
#For Usability
print(f'The first business returned is {barber_shops["results"][0]["name"]}')
print(f'\t The placed id is {barber_shops["results"][0]["id"]}')
print(f'\n\t\tThe next_page_token is {npt}')
#Request the next page || Raises googlemaps.exceptions.ApiError: INVALID_REQUEST
#next_page_barber_shops = gmaps.places('barber shop', radius=3218, page_token=npt)
#pprint(next_page_barber_shops)
#However if time.sleep(2) is utilized, there is no error:
time.sleep(2)
next_page_barber_shops = gmaps.places('barber shop', radius=3218, page_token=npt)
pprint(next_page_barber_shops)
Giuzzilla, ivan-jgr, skumarlabs, tomeyro and eboth
Metadata
Metadata
Assignees
Labels
triage meI really want to be triaged.I really want to be triaged.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.Error or flaw in code with unintended results or allowing sub-optimal usage patterns.
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
jpoehnelt commentedon Jun 12, 2020
I haven't had a chance to look into this. Did you find anything else on this?
Giuzzilla commentedon Jul 13, 2020
Having the same issue, and can confirm that
time.sleep(2)
solves it, so it seems to be a rate-limiting issue.If I call the API twice with no page_token the request works correctly.
If I query multiple different "type" with no sleep I don't get any rate-limiting/error either.
The problem is there even if you don't use a radius.
skumarlabs commentedon Aug 30, 2020
Had the same problem, fixed it using
time.sleep(2)
The reason for this behavior is also mentioned in the documentation
therahulmehta commentedon Apr 28, 2022
@skumarlabs could you point me to where you found that? I just can't seem to find that in the docs now.
koosha-t commentedon Oct 2, 2023
Any updates on this?
Tylerlhess commentedon Nov 29, 2023
This should either be closed as working as designed (as it is according to the docs) or add in an automatic sleep timer with override option when using a next_page_token.
Or better yet update the library to use the Nearby Search (New) api endpoint which only returns 20 results.