Amadeus Node SDK
Amadeus为旅游行业提供了丰富的API集。欲了解更多详情,请查看Amadeus开发者门户或SDK类参考文档。
安装
本模块已在Node LTS版本上进行了测试。你可以使用Yarn或NPM进行安装。
npm install amadeus --save
入门指南
要进行首次API调用,您需要注册一个Amadeus开发者账户,并设置您的第一个应用程序。
var Amadeus = require('amadeus');
var amadeus = new Amadeus({
clientId: '替换为您的API密钥',
clientSecret: '替换为您的API密钥'
});
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-06-01',
adults: '2'
}).then(function(response){
console.log(response.data);
}).catch(function(responseError){
console.log(responseError.code);
});
示例
您可以在独立的代码示例中找到所有的端点。
初始化
可以直接初始化客户端。
// 使用参数初始化
var amadeus = new Amadeus({
clientId: '替换为你的API密钥',
clientSecret: '替换为你的API密钥'
});
另外,如果存在环境变量AMADEUS_CLIENT_ID
和AMADEUS_CLIENT_SECRET
,则可以不使用任何参数进行初始化。
var amadeus = new Amadeus();
你可以在Amadeus仪表板上找到你的凭证。
默认情况下,SDK环境设置为test
环境。要切换到production
(按需付费)环境,请按如下方式切换主机名:
var amadeus = new Amadeus({
hostname: 'production'
});
文档
Amadeus 拥有大量的 API,我们的文档能帮助您立即开始使用。前往我们的参考文档,了解每个 SDK 方法的详细信息、参数和返回类型。
进行API调用
本库方便地将每个API路径映射到类似的路径。例如,GET /v2/reference-data/urls/checkin-links?airlineCode=BA
可以写成:
amadeus.referenceData.urls.checkinLinks.get({ airlineCode: 'BA' });
同样,要通过ID选择资源,可以将ID传递给单数路径。例如,GET /v1/shopping/hotelOffers/123/
可以写成:
amadeus.shopping.hotelOffer('123').get(...);
你也可以使用.client.get
方法直接进行任意GET
API调用:
amadeus.client.get('/v2/reference-data/urls/checkin-links', { airlineCode: 'BA' });
或者,使用.client.post
方法进行POST
请求:
amadeus.client.post('/v1/shopping/flight-offers/pricing', JSON.stringify({ data }));
承诺
每个API调用都会返回一个会解决或拒绝的Promise
。
每个成功解决的API调用都会返回一个包含原始响应的body
属性的Response
对象。如果API调用包含JSON响应,它会将JSON解析到result
属性中。如果这些数据包含data
键,那么它将在data
属性中可用。
对于失败的API调用,它会返回一个包含(已解析或未解析的)响应、请求和错误代码的ResponseError
对象。
amadeus.referenceData.urls.checkinLinks.get({
airlineCode: 'BA'
}).then(function(response){
console.log(response.body); //=> 原始主体
console.log(response.result); //=> 完全解析的结果
console.log(response.data); //=> 从结果中提取的数据属性
}).catch(function(error){
console.log(error.response); //=> 包含(未)解析数据的响应对象
console.log(error.response.request); //=> 发出请求的详细信息
console.log(error.code); //=> 用于识别错误类型的唯一错误代码
});
分页
如果API端点支持分页,其他页面可以通过.next
、.previous
、.last
和.first
方法获取。
amadeus.referenceData.locations.get({
keyword: 'LON',
subType: 'AIRPORT,CITY'
}).then(function(response){
console.log(response.data); // 第一页
return amadeus.next(response);
}).then(function(nextResponse){
console.log(nextResponse.data); // 第二页
});
如果某页不可用,响应将解析为null
。
日志记录和调试
SDK 使得添加与默认 console
兼容的自定义日志记录器变得简单。
var amadeus = new Amadeus({
clientId: '替换为你的API密钥',
clientSecret: '替换为你的API密钥',
logger: new MyConsole()
});
此外,要启用更详细的日志记录,你可以在自己的日志记录器上设置适当的级别。最简单的方法是通过初始化时的参数或使用 AMADEUS_LOG_LEVEL
环境变量来启用调试。可用选项有 silent
(默认)、warn
和 debug
。
var amadeus = new Amadeus({
clientId: '替换为你的API密钥',
clientSecret: '替换为你的API密钥',
logLevel: 'debug'
});
支持的端点列表
//机场路线
amadeus.airport.directDestinations.get({
departureAirportCode: 'CDG',
})
//航空公司路线
//查找指定航空公司提供服务的所有目的地
amadeus.airline.destinations.get({
airlineCode: 'BA',
})
// 航班灵感搜索
amadeus.shopping.flightDestinations.get({
origin : 'MAD'
})
// 航班最低价日期搜索
amadeus.shopping.flightDates.get({
origin : 'MAD',
destination : 'MUC'
})
// 航班优惠搜索 GET
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-11-01',
adults: '2'
})
// 航班优惠搜索 POST
// 完整示例可在 https://github.com/amadeus4dev/amadeus-code-examples 找到
amadeus.shopping.flightOffersSearch.post(JSON.stringify(body))
// 航班优惠价格
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-11-01',
adults: '1'
}).then(function(response){
return amadeus.shopping.flightOffers.pricing.post(
JSON.stringify({
'data': {
'type': 'flight-offers-pricing',
'flightOffers': [response.data[0]]
}
})
)
}).then(function(response){
console.log(response.data);
}).catch(function(responseError){
console.log(responseError);
});
// 带附加参数的航班优惠价格
// 例如:检查额外行李选项
amadeus.shopping.flightOffers.pricing.post(JSON.stringify(body),{include: 'bags'})
// 航班创建订单
// 预订由航班优惠价格返回的航班优惠,
// 并创建包含旅客信息的航班订单。
// 完整示例可在 https://git.io/JtnYo 找到
amadeus.booking.flightOrders.post(
JSON.stringify({
'type': 'flight-order',
'flightOffers': [priced-offers],
'travelers': []
})
)
// 检索 ID 为 'XXX' 的航班订单。此 ID 来自
// 航班创建订单 API,在测试环境中是临时 ID。
amadeus.booking.flightOrder('XXX').get()
// 取消 ID 为 'XXX' 的航班订单。此 ID 来自
// 航班创建订单 API,在测试环境中是临时 ID。
amadeus.booking.flightOrder('XXX').delete()
// 航班座位图显示
// 检索 2021-08-01 从马德里到纽约的航班优惠中
// 包含的每个航班的座位图
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-11-01',
adults: '1'
}).then(function(response){
return amadeus.shopping.seatmaps.post(
JSON.stringify({
'data': [response.data[0]]
})
);
}).then(function(response){
console.log(response.data);
}).catch(function(responseError){
console.log(responseError);
});
// 检索 ID 为 'XXX' 的航班订单的座位图
amadeus.shopping.seatmaps.get({
'flight-orderId': 'XXX'
});
// 航班可用性搜索
amadeus.shopping.availability.flightAvailabilities.post(JSON.stringify((body));
// 品牌运价升级
amadeus.shopping.flightOffers.upselling.post(JSON.stringify(body));
// 航班选择预测
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-11-01',
adults: '2'
}).then(function(response){
return amadeus.shopping.flightOffers.prediction.post(
JSON.stringify(response)
);
}).then(function(response){
console.log(response.data);
}).catch(function(responseError){
console.log(responseError);
});
// 航班值机链接
amadeus.referenceData.urls.checkinLinks.get({
airlineCode : 'BA'
})
// 航空公司代码查询
amadeus.referenceData.airlines.get({
airlineCodes : 'U2'
})
// 机场和城市搜索(自动完成)
// 查找所有以 'LON' 开头的城市和机场
amadeus.referenceData.locations.get({
keyword : 'LON',
subType : Amadeus.location.any
})
// 根据 ID 获取特定城市或机场
amadeus.referenceData.location('ALHR').get()
// 最近相关机场(以伦敦为例)
amadeus.referenceData.locations.airports.get({
longitude : 0.1278,
latitude : 51.5074
})
// 最多预订目的地航班
amadeus.travel.analytics.airTraffic.booked.get({
originCityCode : 'MAD',
period : '2017-08'
}
// 最常旅行目的地航班
amadeus.travel.analytics.airTraffic.traveled.get({
originCityCode : 'MAD',
period : '2017-01'
})
// 最繁忙旅行期间航班
amadeus.travel.analytics.airTraffic.busiestPeriod.get({
cityCode: 'MAD',
period: '2017',
direction: Amadeus.direction.arriving
})
// 行程解析 API V3
// 解析航班、酒店、铁路和租车确认邮件中的信息
// 使用辅助函数 `fromFile` 直接从确认文件解析
amadeus.travel.tripParser.post(
JSON.stringify({
'payload': amadeus.travel.tripParser.fromFile(fs.readFileSync('confirmation.eml')),
"metadata": {
"documentType": "eml",
"name": "BOOKING_DOCUMENT",
"encoding": "BASE_64"
}
}))
// 或者从 BASE_64 编码的字符串解析
amadeus.travel.tripParser.post(
JSON.stringify({
'payload': "BASE_64 编码的字符串"
"metadata": {
"documentType": "html",
"name": "BOOKING_DOCUMENT",
"encoding": "BASE_64"
}
}))
// 城市搜索 API
// 查找与特定单词或字母串匹配的城市。
// 返回与关键词 'Paris' 匹配的城市列表
amadeus.referenceData.locations.cities.get({
keyword: 'Paris'
})
//酒店名称自动完成 API
//自动完成酒店搜索字段
amadeus.referenceData.locations.hotel.get({
keyword: 'PARI',
subType: 'HOTEL_GDS'
})
//酒店列表 API
//按城市代码获取酒店列表
amadeus.referenceData.locations.hotels.byCity.get({
cityCode: 'PAR'
})
//按地理坐标获取酒店列表
amadeus.referenceData.locations.hotels.byGeocode.get({
latitude: 48.83152,
longitude: 2.24691
})
//按酒店 ID 获取酒店列表
amadeus.referenceData.locations.hotels.byHotels.get({
hotelIds: 'ACPAR245'
})
// 酒店搜索 API V3
// 按酒店 ID 获取特定酒店的可用优惠列表
amadeus.shopping.hotelOffersSearch.get({
hotelIds: 'RTPAR001',
adults: '2'
})
// 检查特定优惠 ID 的优惠条件
amadeus.shopping.hotelOfferSearch('XXX').get()
// 酒店预订 API v2
amadeus.booking.hotelOrders.post(
JSON.stringfy({
'data': {
'type': 'hotel-order',
'guests': [],
'travelAgent': {},
'roomAssociations': [],
'payment': {}
}})
)
// 酒店预订 API v1
amadeus.booking.hotelBookings.post(
JSON.stringify({
'data': {
'offerId': 'XXXX',
'guests': [],
'payments': [],
'rooms': []
}})
)
// 按需航班状态
// 我的航班当前状态如何?
amadeus.schedule.flights.get({
carrierCode: 'AZ',
flightNumber: '319',
scheduledDepartureDate: '2021-03-13'
})
// 兴趣点
// 巴塞罗那有哪些热门地点?(基于地理位置和半径)
amadeus.referenceData.locations.pointsOfInterest.get({
latitude : 41.397158,
longitude : 2.160873
})
// 巴塞罗那有哪些热门地点?(基于矩形区域)
amadeus.referenceData.locations.pointsOfInterest.bySquare.get({
north: 41.397158,
west: 2.160873,
south: 41.394582,
east: 2.177181
})
// 提取 ID 为 '9CB40CB5D0' 的兴趣点信息
amadeus.referenceData.locations.pointOfInterest('9CB40CB5D0').get()
// 位置评分
amadeus.location.analytics.categoryRatedAreas.get({
latitude : 41.397158,
longitude : 2.160873
})
// 旅游和活动
// 巴塞罗那最佳旅游和活动有哪些?
amadeus.shopping.activities.get({
latitude: 41.397158,
longitude: 2.160873
})
// 巴塞罗那最佳旅游和活动有哪些?(基于矩形区域)
amadeus.shopping.activities.bySquare.get({
north: 41.397158,
west: 2.160873,
south: 41.394582,
east: 2.177181
})
// 提取ID为'56777'的活动信息
amadeus.shopping.activity('56777').get()
// 酒店评分
// 获取巴黎圣母院假日酒店的评论情感分析
amadeus.eReputation.hotelSentiments.get({
hotelIds: 'XKPARC12'
})
// 行程目的预测
// 在搜索和购物的背景下,预测旅客目的是商务还是休闲,并给出概率
amadeus.travel.predictions.tripPurpose.get({
originLocationCode: 'NYC',
destinationLocationCode: 'MAD',
departureDate: '2021-04-01',
returnDate: '2021-04-08'
})
// 航班延误预测
// 这个机器学习API基于一个预测模型,接收用户输入的时间、航空公司、机场和飞机信息;
// 并预测航班可能落在哪个时间段。
amadeus.travel.predictions.flightDelay.get({
originLocationCode: 'BRU',
destinationLocationCode: 'FRA',
departureDate: '2020-01-14',
departureTime: '11:05:00',
arrivalDate: '2020-01-14',
arrivalTime: '12:10:00',
aircraftCode: '32A',
carrierCode: 'LH',
flightNumber: '1009',
duration: 'PT1H05M'
})
// 机场准点率表现
// 获取从JFK机场准时出发的航班百分比
amadeus.airport.predictions.onTime.get({
airportCode: 'JFK',
date: '2022-18-01'
})
// 旅行推荐
amadeus.referenceData.recommendedLocations.get({
cityCodes: 'PAR',
travelerCountryCode: 'FR'
})
// 航班价格分析
amadeus.analytics.itineraryPriceMetrics.get({
originIataCode: 'MAD',
destinationIataCode: 'CDG',
departureDate: '2022-03-13',
})
//汽车和接送服务API
// 接送搜索API:搜索接送服务
amadeus.shopping.transferOffers.post(JSON.stringify(body));
// 接送预订API:根据优惠ID预订接送服务
amadeus.ordering.transferOrders.post(JSON.stringify(body),offerId='2094123123');
// 接送管理API:根据订单ID和确认号取消接送服务
amadeus.ordering.transferOrder('XXX').transfers.cancellation.post(JSON.stringify({}), confirmNbr='12345');
## 开发与贡献
想要贡献?请阅读我们的[贡献者指南](.github/CONTRIBUTING.md),获取在开发环境中安装和运行此代码的指导。
## 许可证
该库根据 [MIT 许可证](LICENSE) 发布。
## 帮助
您可以在[StackOverflow](https://stackoverflow.com/questions/tagged/amadeus)上找到我们,或加入我们的开发者社区
[Discord](https://discord.gg/cVrFBqx)。
[npmjs]: https://www.npmjs.com/package/amadeus