2017-10-11 63 views
0

我所做的尤伯杯應用的一個分支對Heroku的尤伯杯API報告JSON是/請求無效/估計端點

我的叉子:https://github.com/CuriosityGym/Python-Sample-Application

我已經修改了原代碼和/價格網址使用此處記錄的/ requests/estimate端點https://developer.uber.com/docs/riders/references/api/v1.2/requests-estimate-post,獲得特定產品ID的價格估算值。

@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, 
) 

這是我的代碼片段,它使用Uber Api的1.2版本。其他終點工作正常,其中這一個不起作用。

的打印語句打印到Heroku的日誌,這是輸出

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

由API報告的錯誤是

{「消息」:「無法在請求體解析JSON」 ,「code」:「invalid_json」}

+0

JSON不允許單引號。 –

+0

...順便說一下,你真的在​​這裏發佈你的訪問令牌嗎? –

+0

不,那個訪問令牌已被修改。 –

回答

0

您需要將您的json編碼爲字符串。幸運的是,請求可以爲您執行此操作,或者您可以使用json.dumps()將對象轉儲爲字符串。

這裏有兩個例子:

做這一點:

import json 

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

或者把它作爲一個kwarg JSON:

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

我試了兩種,第一種解決方案出色。除了提到的更改外,我將參數json中的所有雙引號更改爲單引號。 –