2016-11-21 4 views
3

Yelp docsによると:「アクセストークンでAPI呼び出しを認証するには、認証HTTPヘッダー値をBearer access_tokenとして設定してください。 https://www.yelp.com/developers/documentation/v3/get_startedPythonリクエストによる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

あなたが唯一のアクセストークンではなく、応答全体を渡す必要があります。下記のコードをご覧ください。基本的には、すでにアクセストークンを持っているので、中から開始することができますが、コード全体を読みやすくするために書き直すことをおすすめします。

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']) 
関連する問題