python - 如何使用 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,151.185366",
"destination1": "-33.865103,151.205627",
"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 的新尝试:
脚步:
- 请求矩阵 (POST)
- 轮询状态 (GET)
- 准备好后下载结果(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, params=params, headers=headers)
response = r.json()
# pretty print
print(json.dumps(response, indent=4))
写“MY_API_KEY_HERE”的地方我输入了我的apiKey。响应:
{
"error": "Unauthorized",
"error_description": "No credentials found"
}
显然,使用身份验证存在错误。应该如何使用身份验证?是否可以显示检查已提交矩阵计算状态的成功请求的外观以及下载此类矩阵的请求在 Python 中的外观(使用 gzip 标头轮询状态后的下一步)?
欢迎任何指点。
解决方案
看起来根据文档,当您提供出发时间时,他们不再考虑实时流量 - 不过我不确定历史。因此,如果您需要考虑实时流量,则必须删除出发时间。
这将计算包括交通时间在内的行程时间: 方法 URL: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"
}
}
推荐阅读
- typescript - Typescript Property does not exist on enum type
- python - 在另一个之前调整一个小部件的大小
- android - 关于 RadioGroup 和 RecyclerView 的问题
- javascript - 如何让ES6类的静态函数中的this指向函数本身
- d3.js - 定心力偏移力图 d3js v4
- python - 从python中的数据帧字典中捕获跨数据帧的变量值
- javascript - Angular 6 复选框过滤器覆盖以前的复选框
- nlp - 给定输入文本的多个意图?
- c - 使用返回 0;in void 功能是否可行?
- ios - 即使提供了隐私链接,App Store 连接仍显示错误“您必须提供隐私政策 url”