Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bad Request from Yelp API

Inspired by this Yelp tutorial, I created a script to search for all gyms in a given city. I tweaked the script with these updates in order to return ALL gyms, not just the first 20. You can find the gist here. The SEARCH_LIMIT is 20.

I'm encountering a Bad Request error. I followed the Yelp Tutorial pretty closely, and am unsure of what it can be coming from -- I'm pretty sure the request is properly encoded, and all my API keys are right.

The print out is below:

Traceback (most recent call last):
  File "YelpSearch.py", line 97, in <module>
    query_api()
  File "YelpSearch.py", line 74, in query_api
    response = search_yelp(offset) 
  File "YelpSearch.py", line 67, in search_yelp
    return request(API_HOST, SEARCH_PATH, url_params=url_params)
  File "YelpSearch.py", line 53, in request
    conn = urllib2.urlopen(signed_url, None)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 410, in open
    response = meth(req, response)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request
like image 562
NumenorForLife Avatar asked Nov 14 '15 21:11

NumenorForLife


2 Answers

In example search params they replace spaces with + sign:

'term': term.replace(' ', '+'),
'location': location.replace(' ', '+'),

In your gist you have hardcoded location as: 'New York, NY', changing spaces to + should help.

like image 145
vittt Avatar answered Oct 10 '22 12:10

vittt


Yelp API has limitations. You can get maximum 20 items for each request. Also, quantity of accessible items is 1000. I can't find information about limitations on the documentation. But, I found info about these limitations on the support group. Based on this you can get maximum 1000 items for 50 requests([1,..., 20], [21,..., 40], ... [981,..., 1000] )

Regarding your snippet you are trying get more than 1000 items. I found out that your limit and offset parameters. limit = 3, offset = 1000. It means you want to get items from 1001 to 1003. And it contradicts the documentation.

HTTP Error 400: Bad Request means you get response

{
  error: {
    field: "offset",
    description: "The maximum number of accessible results is 1000",
    id: "INVALID_PARAMETER",
    text: "One or more parameters are invalid in request"
  }
}

If you open your last signed_url on the browser you will see response like above. Also, you will see Response Status Code is 400 Bad Request.

like image 35
Isabek Tashiev Avatar answered Oct 10 '22 13:10

Isabek Tashiev