Jef*_*eff 81 architecture api screen-scraping aggregate
问候,我一直在想一个新项目的想法,并想知道是否有人知道像Kayak.com这样的服务如何能够如此快速和准确地汇总来自这么多来源的数据.更具体地说,您认为Kayak.com是否正在与API进行交互,还是在抓取/抓取航空公司和酒店网站以满足用户请求?我知道这种事情没有一个正确的答案,但我很想知道其他人认为这是一个很好的方法.如果有帮助,假装你明天要创建kayak.com ......你的数据来自哪里?
Dom*_*chi 144
我在旅游行业担任软件架构师/项目负责人,正是您所描述的精确项目 - 在我们的地区,我们直接与供应商合作,但对于外向我们连接到多个聚合器.
要回答你的问题...你有一些数据,有些数据以各种方式得到,有些数据你必须折磨和扭曲,直到它承认为止.
你要问的问题是......你想卖出像Kayak这样的广告,还是像Expedia一样剪彩?您是搜索还是出售旅游服务?您是否针对利基(例如,航空旅行)或一切(住宿,航空公司,租车,其他服务,如交通/观光/会议等)?你是针对地区(美国或美国的一部分)还是世界?您有多深 - 您是在一个屏幕上显示多个网站,还是将不同的服务捆绑在一起并动态打包?
如果您使用的是Kayak商业模式,从技术上讲,您不需要网站的许可......但很多网站都有IFrame的联盟计划或其他简单的方式来引导客户访问他们的网站.从好的方面来说,您无需处理付款/投诉和旅行者本人.至于缺点......如果你想自己比较价格并向用户提供最便宜的选项,你必须在更深层次上进行整合,这意味着API和网络抓取.
至于网络抓取......避免它.太糟糕了.真.只是不要这样做.相信我这个.例如,有些像lowcosters这样的东西,如果没有网络抓取就无法获得.低成本航空公司生活在增值服务之中.如果用户没有看到他们的网站,他们不会出售额外的东西,他们也没有赚到任何东西.因此,他们没有附属机构,他们不提供API,他们几乎不断改变他们的网站布局.然而,有些公司通过网络抓取lowcoster的网站并将它们包装成漂亮的API来谋生.如果您能负担得起,您可以为您的用户提供低成本航班的成本比较,这是巨大的.
另一方面,有"普通"运营商提供API.到达航空公司并不是一个大问题,因为他们在IATA下团结一致; 基本上,你从IATA购买,IATA将钱分配给运营商.但是,您可能不希望直接连接到运营商网络.他们现在有Web服务和SOAP,但是当我说SOAP协议只是文本提示周围的一个非常薄的包装器时,请相信我,通过它可以与具有80es风格协议的大型机交互(想想Unix)提示您按命令计费的地方;并且需要大约20个命令才能进行一次搜索).这就是为什么你可能希望通过更好的API与食物链中的某个人联系起来.
因此,航空公司处于高斯曲线的两个极端; 一方面是个别供应商,另一方面是您实施一个API的高度集中化系统,您可以在世界任何地方飞行.住宿和其他旅行产品介于两者之间.有几家大型酒店集合了酒店,还有一大批小型供应商,其中有很多聚合商,只覆盖了部分频谱.例如,你可以租一座灯塔,它甚至不贵 - 但你无法在一个地方比较不同灯塔的价格.
如果您正在使用Kayak商业模式,您可能最终会抓取网站.如果您要集成不同的提供程序,您通常会使用API,其中一些非常好,而且大多数都是可以容忍的.我没有使用RSS,但RSS和网页抓取之间没有太大的区别.杰夫的答案中还没有提到第四个选项......你每晚都可以得到你的数据,例如.CSV文件通过FTP等.
然后就是复杂性.您想要添加的值越多,您需要处理的复杂性就越高.你能搜索允许宠物入住的住宿吗?对于距离市中心不到5公里的旅馆?您是否正在组合航班,并且您能够保证旅行者有足够的时间从一个机场到另一个机场......您能提前出售交通工具吗?一位着名的大提琴家不想从他珍贵的18世纪大提琴中脱颖而出; 你可以把他的另一个座位卖给大提琴吗(是的,不是把它放到这里)?
想比较价格?当然,房间每晚30欧元.但是你可以得到一个双人30和一个单人20,或者你可以得到一个双人床和第三人70%的折扣.但只有这是一个12岁以下的孩子; 我们的加床不适合成人.而且,只有在计算最终价格时,才能获得搜索结果中加床的价格.
甚至不让我开始动态包装.想要出售住宿+租车吗?没问题; 与两个不同的提供商集成,然后你去...手动更新城市中的位置列表(从租车提供商)到酒店(从住宿提供商那里,只给你每个酒店的城市).当然,前提是您已经匹配了两者中的城市列表,因为城市代码没有国际标准.
与许多其他拥有众多产品的行业不同,旅游业有许多非常复杂的产品.亚马逊很容易; 卖书和卖土豆,这是一回事; 你甚至可以把它们放在同一个盒子里.它们易于组合,并且不是由许多部件组装而成.:)
PS链接到Hacker News上一个有趣的最新帖子,其中有关于航班的一些内幕消息.PPS最近偶然发现了一篇关于国际航空运输协会NDC协议的相当古老的博客文章,概述了旅游业的相关性以及历史教训.
我只知道3种从网站获取数据的方法.
RSS源 - 我们在我的公司使用rss feed来将现有站点的数据与我们的应用程序集成.它很快,大多数网站都有RSS提要.这个问题并不是所有网站都能正确实施RSS标准,因此,如果您要从许多网站的许多RSS源中提取数据,请确保编写代码,以便轻松添加例外和过滤器.
API - 如果它们设计得很好并且拥有您需要的所有信息,这些都很好,但情况并非总是如此,如果网站没有使用标准的api格式,那么您将不得不支持多个API.
Web Scraping - 这种方法最不可靠,维护成本最高.但如果你没有别的东西就可以做到.