2017-10-11 10 views
0

J'ai fait une fourchette de l'application Uber pour Herokurapports API Uber JSON est valide pour/demandes/estimations endpoint

Ma fourche: https://github.com/CuriosityGym/Python-Sample-Application

J'ai modifié le code d'origine et l'URL/prix à obtenir des estimations de prix pour un ID de produit spécifique, en utilisant le point de terminaison/requests/estimate documenté ici https://developer.uber.com/docs/riders/references/api/v1.2/requests-estimate-post.

@app.route('/price', methods=['GET']) 
def price(): 
"""Example call to the price estimates endpoint. 

    Returns the time estimates from the given lat/lng given below. 
    """ 
url = config.get('base_uber_url') + 'requests/estimate' 
params = { 
    "product_id": "83941b0d-4be1-4979-a9c0-f0af5ee2b89b", 
    "start_latitude": config.get('start_latitude'), 
    "start_longitude": config.get('start_longitude'), 
    "end_latitude": config.get('end_latitude'), 
    "end_longitude": config.get('end_longitude') 
} 
print params 
print generate_ride_headers(session.get('access_token')) 
response = app.requests_session.post(
    url, 
    headers=generate_ride_headers(session.get('access_token')), 
    data=params 
) 


return render_template(
    'results.html', 
    endpoint='price', 
    data=response.text, 
) 

Voici l'extrait de mon code qui utilise la version 1.2 de l'Uber Api. D'autres points finaux fonctionnent bien, c'est celui-ci qui ne fonctionne pas.

Les états d'impression imprimer les journaux Heroku et c'est la sortie

{'product_id': '83941b0d-4be1-4979-a9c0-f0af5ee2b89b', 'end_longitude': '72.8811862', 'start_latitude': '18.936404', 'end_latitude': '19.0822507', 'start_longitude': '72.832546'} 

{'Content-Type': 'application/json', 'Authorization': 'Bearer KA.eyJ2ZXJzaW9uIjkgsdshdJpZCI6IkNmcjAvRzhrUUNPaDNhSnRsUVZ6QlE9PSIsImV4cGlyZXNfYXQiOjE1MTAzMjA3NzgsInBpcGVsaW5lX2tleV9pZCI6Ik1RPT0iLCJwaXBlbGluZV9pZCI6MX0.JDoDTgaYJitK8Rtr35C6gTh5IQc7-P4T7mGg_wOYXu0'} 

L'erreur signalée par l'api est

{ « message »: «Impossible d'analyser JSON dans le corps de la demande » , "code": "invalid_json"}

+0

JSON ne permet pas de guillemets simples . –

+0

... et BTW avez-vous vraiment posté votre jeton d'accès ici? –

+0

Non, ce jeton d'accès a été modifié. –

Répondre

0

Vous devez encoder votre json sous forme de chaîne. Heureusement, les demandes peuvent le faire pour vous ou vous pouvez utiliser json.dumps() pour vider l'objet en tant que chaîne.

Voici deux exemples:

Soit faire:

import json 

response = app.requests_session.post(
url, 
headers=generate_ride_headers(session.get('access_token')), 
data=json.dumps(params) 

)

Ou passer comme json kwarg:

response = app.requests_session.post(
    url, 
    headers=generate_ride_headers(session.get('access_token')), 
    json=params 
) 
+0

J'ai essayé les deux, et la première solution fonctionne avec brio. En plus des changements mentionnés, j'ai changé toutes les guillemets dans mes paramètres json en guillemets simples. –