2016-11-21 4 views
3

Gemäß Yelp-Dokumentation: "Um API-Aufrufe mit dem Zugriffstoken zu authentifizieren, legen Sie den HTTP-Header-Wert für die Autorisierung als Bearer access_token fest." https://www.yelp.com/developers/documentation/v3/get_startedAuthentifizierung von Fusion API mit Python-Anfragen

Ich habe eine Karte API-Zugriffstoken mit requests bekommen, aber nicht authentifizieren kann:

>>> 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"}}' 

Antwort

4

Sie nur Zugriffstoken passieren sollte, nicht die gesamte Antwort. Bitte sehen Sie unter dem Code. Grundsätzlich können Sie von der Mitte aus starten, da Sie bereits Zugriffstoken haben, aber ich würde empfehlen, Ihren gesamten Code für bessere Lesbarkeit neu zu schreiben.

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'])