像 kayak.com 这样的网站如何聚合内容? [关闭]

Posted

技术标签:

【中文标题】像 kayak.com 这样的网站如何聚合内容? [关闭]【英文标题】:How does a site like kayak.com aggregate content? [closed] 【发布时间】:2011-06-04 04:13:47 【问题描述】:

您好, 我一直在琢磨一个新项目的想法,想知道是否有人知道 Kayak.com 之类的服务如何能够如此快速准确地聚合来自如此多来源的数据。更具体地说,您认为 Kayak.com 是在与 API 交互,还是为了满足用户请求而抓取/抓取航空公司和酒店网站?我知道这种事情没有一个正确的答案,但我很想知道其他人认为什么是解决这个问题的好方法。如果有帮助,请假装您明天要创建 kayak.com……您的数据来自哪里?

【问题讨论】:

【参考方案1】:

我在旅游业工作,担任软件架构师/项目负责人,负责您所描述的那种项目 - 在我们所在地区,我们直接与供应商合作,但在外出时,我们会与多个聚合器建立联系。

要回答你的问题……有些数据你有,有些你可以通过各种方式得到,有些你必须折磨和扭曲直到它承认。

你的角度是什么?

您要问的问题是……您是想像 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 上偶然发现了一篇很棒的博文,虽然相当老了。

【讨论】:

Domchi,今年有很大变化吗?现在还有其他可用的 API 吗? 不,不是很多;市场是分散的,如果有的话,这种情况不太可能很快改变。值得注意的事件是谷歌进入了航班市场(通过 ITA 软件,见 mavrcs 答案);他们拥有整合市场和提供 API 的资源,但我怀疑他们打算/能够做到这一点。在创业界,最有趣的竞争者可能是airbnb.com,但到目前为止他们不提供 API。这个领域的 API 不难找到,但很少是免费的。检查 programmableweb.com/apitag/booking 和 programmableweb.com/apitag/travel 以获得良好的 API 列表。 您是说 Kayak.com 从航空公司的网站上抓取内容,而无需付费?他们的商业模式如何让他们做到这一点?主要航空公司的使用条款似乎规定不能从他们的网站上抓取内容/数据以用于另一个网站。 @Ryan 我不能说 Kayak 是做什么的,但我知道大多数低成本航空公司不提供任何 API 以仅通过其网站推动销售并尽可能多地追加销售.因此,聚合器反过来会废弃他们的网站并模拟用户交互。作为回应,航空公司经常改变网站结构,猫捉老鼠的游戏还在继续。我想运营商很难证明这种情况会继续发生,但他们知道这一点并且可能不想完全阻止它,因为他们确实想要他们原本无法获得的流量。 @Domchi 你所描述的合法性如何?据我所知,在有关航空公司数据、ebay 列表和其他(特别是用于所述数据的商业用途)的各种法庭案件中,网络抓取被认为是非法的。【参考方案2】:

他们使用像 ITA Software 这样的软件包,这是 Google 正在收购的公司之一。

【讨论】:

在此期间挖到了,请参阅developers.google.com/qpx-express/v1/trips/search 获取 API【参考方案3】:

我只知道从网站获取数据的 3 种方法。

RSS 提要 - 我们在我的公司经常使用 RSS 提要来将现有网站的数据与我们的应用程序集成。它速度很快,而且大多数网站已经提供了 RSS 提要。问题在于并非所有站点都正确实现了 RSS 标准,因此如果您从多个站点的多个 RSS 提要中提取数据,请确保编写代码以便轻松添加异常和过滤器。

API - 如果设计得当并且拥有您需要的所有信息,这些是很好的,但情况并非总是如此,此外,如果网站不使用标准 api 格式,那么您将不得不支持多个 API。

Web Scraping - 这种方法最不可靠,维护成本也最高。但是,如果您一无所有,就可以做到。

【讨论】:

【参考方案4】:

Travelport 提供一种名为“Universal API”的产品,该产品连接到航班、酒店和汽车租赁公司,并处理一揽子交易以及与税收和汇率有关的所有各种复杂问题:

https://developer.travelport.com/app/developer-network/resource-centre-uapi

我刚开始使用它,到目前为止看起来还不错。查询有点慢,但每个 OTA(在线旅行社)网站上的每个查询也是如此。

【讨论】:

使用通用 API 的成本是多少? 我忘记了。我认为,一次性费用低至数千,年费低至数千。 通用 API 是否可用于移动设备? uAPI 使用 SOAP 协议。每个 IP 地址范围没有限制,但我不会将 API 凭据集成到公开可用的移动应用程序中。构建您自己的中间件来保护凭证。 support.travelport.com/webhelp/uapi/uapi.htm【参考方案5】:

This article 说 Kayak 被要求停止报废某个航空公司的页面。这让我相信他们可能会在与他们没有关系的网站上进行抓取(以及与该关系相关的数据馈送)。

【讨论】:

【参考方案6】:

我最近在航班比较网站上发现了两个不错的 API

有一个来自Wego,一个来自Skyscanner。两者似乎都有来自多家航空公司的广泛和广泛的数据以及良好的文档。

每当用户从您的应用点击预订网站时,Wego 都会向关联公司支付 50% 的“收入”(我假设这意味着他们从航空公司获得的佣金)

【讨论】:

仅供参考,Wego 每年还收取 1000 美元的使用其 API 的特权。 正确。此外,在我的帖子之后(我现在知道的更多),Skyscanner 以与 Wego 相同的方式为每次退出点击付费。 您好,Skyscanner API 团队。酒店正在筹备中。如果您想讨论使用我们的任何 API(航班、汽车租赁、酒店),请访问 business.skyscanner.net。 刚刚检查了 SkyScanner。新开发者对他们来说毫无价值。除非您的网站每月产生至少 200,000 次独立访问,否则您不能使用他们的航班 API!可怜! 已经 4 年了,@Skyscanner 仍然不提供酒店 API。【参考方案7】:

这是一个旧帖子,但我想我只是添加。我是一名数据架构师,为一家为这些旅游网站提供内容的公司工作。该公司与许多酒店品牌、个别酒店和其他内容提供商签订了合同。我们汇总这些信息,然后将其传递到不同的渠道。然后他们再次聚合到他们的系统中。 大型 GDS 系统也是内容提供者。 聚合是通过多种方法完成的……匹配算法(内部)和密钥。作为一个聚合服务,我们需要在客户端级别进行通信。

希望这会有所帮助!干杯!

【讨论】:

以上是关于像 kayak.com 这样的网站如何聚合内容? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JPA 的两列上运行像 SUM 这样的聚合函数并显示它们的结果?

如何从另一个网站“抓取”内容

uniapp如何把云数据库的内容显示出来

在chrome中创建一个窗口

如何创建 MySQL 存储聚合函数?

像 Virus Total 这样的网站是如何运作的? [关闭]