如何使用HERE的异步矩阵路由API v8来获取旅行时间响应包括交通流量

问题描述

我在一组节点(双向)之间的旅行时间之后,包括交通。在旧版本的API(7.2)中,我将在Python中使用以下代码来请求此代码

    payload = {
        "apiKey": "API_KEY_HERE","start0": "-33.795602,151.185366","start1": "-33.865103,151.205627","destination0": "-33.795602,"destination1": "-33.865103,"mode": "fastest;car;traffic:enabled","departure": "2020-10-27T08:00:00+11","summaryattributes": "all"
    }
    base_url = "https://matrix.route.ls.hereapi.com/routing/7.2/calculatematrix.json?"
    r = requests.get(base_url,params=payload)
    print(r.json())

新版本的示例更少,说实话,我对POST和异步响应不太熟悉。

为什么要更改为新版本?好吧,看来您只能提供一组原始节点/位置,然后将计算一个矩阵(在后台),一旦准备好,就可以使用GET请求将其提取。没有指定start0,start1,.. etc

尝试使用版本8:

步骤:

  1. 请求矩阵(POST)
  2. 状态查询(GET)
  3. 准备好后下载结果(GET)
# 1. Request matrix (POST)
    base_url = "https://matrix.router.hereapi.com/v8/matrix?"
    params = {"apiKey": "MY_API_KEY_HERE","async": "true","departureTime": "2020-10-27T08:00:00+11"}
    payload = {"origins": [{"lat": -33.759688,"lng": 151.156369},{"lat": -33.865189,"lng": 151.208162},{"lat": -33.677066,"lng": 151.302117}],"regionDeFinition": {"type": "autoCircle","margin": 10000},"matrixAttributes": ["travelTimes","distances"]}
    headers = {'Content-Type': 'application/json'}
    r = requests.post(base_url,params=params,json=payload,headers=headers)
    response = r.json()
    
    # pretty print
    print(json.dumps(response,indent=4))

这将显示“已接受”状态:

    // Example response
    {
        "matrixId": "eba6780c-0379-40f1-abaf-5c62d07dabb4","status": "accepted","statusUrl": "https://aws-eu-west-1.matrix.router.hereapi.com/v8/matrix/eba6780c-0379-40f1-abaf-5c62d07dabb4/status"
    }

然后,我使用statusUrl和apiKey轮询状态。这就是我卡住的地方。我应该如何认证?我不确定身份验证应如何工作。步骤1中的身份验证有效。

# 2. Poll for status (GET)
    time.sleep(3)
    statusUrl = response['statusUrl']
    params = {'apiKey': 'MY_API_KEY_HERE'}
    headers = {'Content-Type': 'application/json'}
    r = requests.get(statusUrl,indent=4))

在写“ MY_API_KEY_HERE”的位置,我输入了我的apiKey。响应:

{
    "error": "Unauthorized","error_description": "No credentials found"
}

很明显,使用身份验证时出错。身份验证应如何使用?是否有可能显示一个成功的检查提交的矩阵计算状态的请求看起来像 ,以及下载这种矩阵的请求在Python中是什么样子(使用gzip轮询状态后的下一步)标头)?

欢迎使用任何指针。

解决方法

根据文档看来,当您提供出发时间时,他们不再考虑实时流量-但我不确定历史。因此,如果您需要考虑实时路况,则必须删除出发时间。

这将计算旅行时间,包括交通时间: 方法网址:https://matrix.router.hereapi.com/v8/matrix?apiKey={{API_KEY}}&async=false

方法:POST

身体:

{
    "origins": [
        {
            "lat": 47.673993,"lng": -122.356108
        },{
            "lat": 47.656910,"lng": -122.362823
        },{
            "lat": 47.648015,"lng": -122.335674
        },{
            "lat": 47.653022,"lng": -122.312461
        },{
            "lat":47.675796,"lng": -122.311520
        }
    ],"destinations": [
        {
            "lat": 47.661438,"lng": -122.336427
        }
    ],"regionDefinition": {
        "type": "world"
    }
}