Project Icon

amadeus-node

Amadeus Node.js SDK 简化旅游应用开发

amadeus-node 是 Amadeus 旅游 API 的官方 Node.js SDK。该工具为开发者提供简洁接口,方便访问航班、酒店、机场等旅游数据和服务。支持 Promise 异步处理,集成日志和调试功能,适配多样化 Node.js 项目需求。借助 amadeus-node,开发人员能高效构建功能完善的旅游应用。

Amadeus Node SDK

模块版本 构建和部署 可维护性 依赖项 Discord

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_IDAMADEUS_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(默认)、warndebug

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
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号