作为参考,我是一个新手,想要学习Python并使用英国航空公司的Flight Offer Basic API,可以在这里找到他们的文档:
https://developer.ba.com/docs/api/Flight_Offer_Basic
使用docs.python-requests中的Requests库文档,我尝试构建实际可行的a matching API call,但是当我不包含我的API密钥而只是查询的必要参数(这是有意义的),但当我包含参数和API密钥时,这是400 ...这没有意义,除了我查看我的API调用的样子和什么他们提供的成功案例如下:
(注意:HTTP:已删除,因为我目前无法发布两个以上的链接)
矿:
// api.ba.com/rest-v1/v1/flightOfferBasic?range=monthLow&departureCity=LON&arrivalCity=NYC&cabin=economy&journeyType=roundTrip
他们的:
// api.ba.com/rest-v1/v1/flightOfferBasic;departureCity=LON;arrivalCity=NYC;cabin=economy;journeyType=roundTrip;range=monthLow.json
编辑:2015年6月6日下午12:20太平洋标准时间;我在一些测试中修改了代码并且没有意识到我没有将其还原,特别是' journeyType'。
这是我的代码:
import requests
import pprint
parameters = { 'departureCity': 'LON',
'arrivalCity': 'NYC',
'cabin': 'economy',
'journeyType': 'roundTrip',
'range': 'monthLow'
}
endpoint = 'https://api.ba.com/rest-v1/v1/flightOfferBasic'
headers = {'client-key': 'h6z...'}
response = requests.get(endpoint, params = parameters, headers = headers)
data = response.json
pprint.pprint(data)
我注意到我有一个"&"加入呼叫中的每个参数,成功呼叫有一个&#34 ;;"加入呼叫中的每个参数,这似乎是当消费者向服务发送格式错误的请求时发送400"发送的原因。实际的错误消息在响应正文中返回"。
当我检查回复的正文时,我告诉过:
{"Errors":{"Error":"invalid range"}}
但是,我已经检查了那个正确的键值和字符串。当我删除要测试的范围时,我告诉"无效的机舱"。当我卸下客舱时,我仍然告诉"舱室无效"。但我已经检查过双重和三重检查,确认这是机舱的正确键值和字符串。
成功的电话也有" .json"最后,但我相信" response.json" call应该将返回的数据转换为JSON对象......对吗?另一个奇怪的事情是,然后传递"格式"参数为" .json"正如文件所示:
parameters = { 'departureCity': 'LON',
'arrivalCity': 'NYC',
'cabin': 'economy',
'journeyType': 'roundTrip',
'range': 'monthLow',
'format': '.json'
}
我为API调用获取此URL:
// api.ba.com/rest-v1/v1/flightOfferBasic?format=.json&arrivalCity=NYC&range=monthLow&journeyType=roundTrip&departureCity=LON&cabin=economy
它作为第一个参数注入,它应该是最后一个参数,当它是我的参数"中的最后一个参数时。字典也是。
知道我哪里出错了吗?
答案 0 :(得分:2)
哎呀。这是一个设计糟糕的API。
正如您所注意到的,问题是他们希望参数以分号分隔。这意味着它们根本不是查询字符串的一部分,这就是当你给它一个cvs
字典时请求所做的,但它是实际URL路径的一部分。
您需要手动构建,例如通过字符串插值:
params