我正在为Deutsche Bahn 的 Fahrplan OpenData API编写一个包装器。
但是,我似乎无法产生与简单 curl 请求相同的结果,如下所示:
>>>import requests
>>>header = {'Authorization': 'Bearer 36e39957ace6f405a82cfb09522d0a8d'}
>>>departure_data = requests.get('https://api.deutschebahn.com/fahrplan-plus/v1/departureBoard/8011160?date=2017-06-30', headers=header)
# Now, using a journey's details id, lets request some journey details from the endpoint
>>>requests.get('https://api.deutschebahn.com/fahrplan-plus/v1/journeyDetails/' + departure_data.json()[0]['detailsId'], headers=header)
<Response [404]>
>>>requests.get('https://api.deutschebahn.com/fahrplan-plus/v1/journeyDetails/' + departure_data.json()[0]['detailsId'], headers=header).request.url
'https://api.deutschebahn.com/fahrplan-plus/v1/journeyDetails/782334%2F275830%2F795514%2F136979%2F80%3fstation_evaId%3D8098160'
好吧,到目前为止,太糟糕了。如您所见,我正在使用提供给我的数据。现在,通过网站调用端点,它告诉我它运行这个curl
命令:
curl -X GET --header "Accept: application/json" --header "Authorization: Bearer 36e39957ace6f405a82cfb09522d0a8d" "https://api.deutschebahn.com/fahrplan-plus/v1/journeyDetails/782334%252F275830%252F795514%252F136979%252F80%253fstation_evaId%253D8098160"
这一点神奇的事情发生了:
原始旅程 ID
'782334%2F275830%2F795514%2F136979%2F80%3fstation_evaId%3D8098160'
变成:
'782334%252F275830%252F795514%252F136979%252F80%253fstation_evaId%253D8098160'
并返回一个状态200
。
出乎意料的是,旅程 ID 中添加了一些字符。我将它复制并粘贴到给定的字段中,仅此而已,所以我知道这不是我。
我相信发生了某种编码/解码,但我以前从未见过这种情况,老实说,我不知道该怎么做。
我如何在我的代码中处理这个?显然,除了简单地解析departures
端点之外,我还需要做一些事情吗?或者,更好的是,我只是错过了一些明显的东西吗?
我已经向数据库开发人员发送了多封邮件,但到目前为止还没有收到他们的回复。