我在旅游业工作,担任软件架构师/项目负责人,负责您所描述的那种项目 - 在我们所在地区,我们直接与供应商合作,但在外出时,我们会与多个聚合器建立联系。
要回答你的问题……有些数据你有,有些你可以通过各种方式得到,有些你必须折磨和扭曲直到它承认。
你的角度是什么?
您要问的问题是……您是想像 Kayak 那样销售广告还是像 Expedia 那样分一杯羹?您是搜索还是销售旅游服务?你的目标是利基市场(例如,只是航空旅行)还是一切(住宿、航空公司、租车、交通/观光/会议等附加服务)?您的目标是地区(美国或美国的一部分)还是世界?您的深度有多大?您是在一个屏幕上显示多个网站,还是将不同的服务捆绑在一起并动态打包?
获取数据
如果您使用 Kayak 商业模式,从技术上讲,您不需要网站的许可……但许多网站都有 IFrame 或其他简单的方式来引导客户访问他们的网站的附属计划。从好的方面来说,您不必自己处理付款/投诉和旅行者。至于缺点...如果您想自己比较价格并向用户提供最便宜的选择,则必须进行更深层次的集成,这意味着 API 和网络抓取。
至于网页抓取...避免它。糟透了。真的。只是不要这样做。相信我这个。例如,有些东西,如没有网络抓取就无法获得的低成本。低成本航空公司以增值服务为生。如果用户看不到他们的网站,他们就不会出售额外的东西,也不会赚取任何收入。因此,他们没有附属公司,他们不提供 API,而且他们几乎不断地改变他们的网站布局。然而,有些公司通过网络抓取低成本网站并将它们包装成漂亮的 API 来谋生。如果您负担得起,您可以为您的用户提供低成本航班的成本比较,这非常重要。
另一方面,也有提供 API 的“普通”运营商。去航空公司不是什么大问题,因为它们都在IATA 下联合起来;基本上,您从 IATA 购买,然后 IATA 将钱分配给承运人。但是,您可能不想直接连接到运营商网络。现在他们有 Web 服务和 SOAP,但是当我说有 SOAP 协议时相信我,它们只是围绕文本提示的一个非常薄的包装器,您可以通过它与具有 80 年代风格协议的大型机交互(想想 Unix提示您按命令计费的位置;执行一次搜索大约需要 20 个命令)。这就是为什么您可能希望通过更好的 API 与食物链更下游的人建立联系。
航空公司因此处于高斯曲线的两个极端;一方面是单独的供应商,另一方面是高度集中的系统,您可以在其中实施一个 API,并且可以在世界任何地方飞行。住宿和其他旅游产品介于两者之间。有几家大公司聚合酒店,还有大量的小型供应商,它们有很多只涵盖一部分范围的聚合器。例如,您可以租一座灯塔,它甚至不那么贵 - 但您将无法在一个地方比较不同灯塔的价格。
如果您喜欢 Kayak 商业模式,您最终可能会抓取网站。如果您要集成不同的提供程序,您将经常使用 API,其中一些非常好,而大多数是可以接受的。我没有使用过 RSS,但 RSS 和网络抓取之间没有太大区别。 Jeff 的回答中还没有提到第四个选项......您每晚获取数据的选项,例如通过 FTP 和类似的 .CSV 文件。
生活糟透了(迷你咆哮)
然后是复杂性。您想要添加的价值越多,您必须处理的复杂性就越高。您可以搜索允许携带宠物的住宿吗?对于距离市中心不到 5 公里的旅馆?您是否合并了航班,您是否能够保证旅客有足够的时间从一个机场到达另一个机场……您可以提前出售交通工具吗?一位著名的大提琴家不想离开他珍贵的 18 世纪大提琴;你能卖给他另一个大提琴的座位吗(是的,不要编这个)?
想要比较价格?当然,房间是每晚 30 欧元。但是你可以得到一张双人床 30 和一张单人 20,或者你可以加一张双人床,第三人享受 70% 的折扣。但仅限于 12 岁以下的儿童;我们的加床不适用于成人。而且您不会在搜索结果中看到加床的价格 - 只有在您计算最终价格时才会显示。
甚至不要让我开始使用动态包装。想卖住宿+租车?没问题;与两个不同的提供商集成,然后您就可以使用...手动更新城市中的位置列表(来自汽车租赁提供商)以匹配酒店(来自住宿提供商,他们只为您提供每家酒店的城市)。当然,前提是您已经匹配了两者中的城市列表,因为城市代码没有国际标准。
与许多其他拥有许多产品的行业不同,旅游业有许多非常复杂的产品。亚马逊很容易;卖书和卖土豆,是一回事;您甚至可以将它们装在同一个盒子里。它们很容易组合,并且不是由许多部分组装而成。 :)
附:用一些insider info regarding flights 链接到 Hacker News 最近一个有趣的线程。
附言最近在IATA's NDC protocol with overview of how travel industry is connected and a history lesson how this came to be 上偶然发现了一篇很棒的博文,虽然相当老了。