2016-11-21 164 views
3

根據Yelp文檔:「要使用訪問令牌驗證API調用,請將授權HTTP標頭值設置爲承載者access_token。」 https://www.yelp.com/developers/documentation/v3/get_started使用Python請求驗證Yelp Fusion API

我已經得到令牌使用requests一個Yelp的API訪問,但無法驗證:

>>> data = {"grant_type": "client_credentials", "client_id": "foo", "client_secret": "bar"} 
>>> r = requests.post("https://api.yelp.com/oauth2/token", data=data) 
>>> r 
<Response [200]> 
>>> r.text 
'{"expires_in": 15550795, "token_type": "Bearer", "access_token": "foobar"}' 
>>> params = json.loads(r.text) 
>>> url = "https://api.yelp.com/v3/autocomplete?text=del&latitude=37.786882&longitude=-122.399972&" 
>>> test = requests.get(url, params=params) 
>>> test.text 
'{"error": {"description": "An access token must be supplied in order to use this endpoint.", "code": "TOKEN_MISSING"}}' 

回答

4

你應該只傳遞訪問令牌,而不是整個響應。請參閱下面的代碼。 Basicaly你可以從中間開始,因爲你已經有訪問令牌,但我會推薦重寫你的整個代碼以提高可讀性。

import requests 

app_id = 'client_id' 
app_secret = 'client_secret' 
data = {'grant_type': 'client_credentials', 
     'client_id': app_id, 
     'client_secret': app_secret} 
token = requests.post('https://api.yelp.com/oauth2/token', data=data) 
access_token = token.json()['access_token'] 
url = 'https://api.yelp.com/v3/businesses/search' 
headers = {'Authorization': 'bearer %s' % access_token} 
params = {'location': 'San Bruno', 
      'term': 'Japanese Restaurant', 
      'pricing_filter': '1, 2', 
      'sort_by': 'rating' 
     } 

resp = requests.get(url=url, params=params, headers=headers) 

import pprint 
pprint.pprint(resp.json()['businesses'])