处理 Groupon API – 总结

在某些特殊情况下,松散耦合的数据映射应用可能会出现问题。这种情况尤其容易发生,当您需要处理来自互联网的大量数据集,并且对原始数据的来源几乎没有任何控制权时。本文介绍了一种调试技术,它可以帮助数据映射和转换项目的开发人员快速识别并处理来自远程来源的数据流中出现的意外数据。

问题 去年夏天,我们写了一系列博客文章,介绍了如何使用Groupon API来获取所有Groupon城市中的一部分优惠信息,并将这些信息格式化,以便在网页浏览器或移动设备上显示。

我们最终使用一个命令行来运行 MapForce 数据映射,该映射会调用 Groupon API 超过 150 次——每次对应一个 Groupon 城市。然后,它会过滤数据,提取在互联网上销售的优惠信息,而不是实体店的优惠,并将结果以 HTML 格式通过 StyleVision 生成。 每天早上,我们都会在批处理文件中运行该命令行,将 HTML 输出保存到本地服务器,以便我们的同事可以使用任何 Web 浏览器查看,从而找到来自全国各地的有趣优惠。

该映射运行了两个多月,直到有一天,它出现故障,并显示以下错误消息:“类型为 dateTime 的源值“”,无法转换为目标类型 dateTime。” 具体来说,在映射的某个环节,我们期望接收到一个 dateTime 类型的值,但却收到了一个空值。

从更抽象的层面来看,这个错误表明我们的映射策略可能存在潜在缺陷。 每次我们调用 Groupon API 时,都会收到一个格式良好的 XML 数据流,该数据流包含在 元素中,但 API 规范中没有包含定义可能返回数据的 XML Schema。

在开发映射时,我们需要分析原始数据并选择所需的输出,因此我们的第一步是调用 API,以捕获一个大型都市区域的所有 Groupon 优惠信息。 我们假设我们会获得足够大的数据样本,以包含 API 响应中的所有可能选项。

在我们的映射成功运行了两个月后,API 最终输出了一个罕见的边缘情况,该情况不符合我们预期的模式。

调试工具 MapForce 提供了调试帮助。 我们可以使用 MapForce 内置的执行引擎来运行我们的数据映射,以便在“消息”窗口中查看更多详细信息。

标有“相关位置”的行是超链接,可以链接回地图中发生错误的组件。点击错误结果会跳转到 "format-dateTime" 函数。

我们可以选择点击“错误”提示,或者追踪“值”连接器,以确定传递给“format-dateTime”函数的输入元素。 无论哪种方式,我们都能找到导致错误的元素。

问题出在输入组件中,该组件负责接收我们调用 Groupon API 返回的所有数据,并在进行任何过滤或转换之前就将这些数据捕获。在设计映射关系时,我们示例数据中的 "endAt" 字段始终报告每个 Groupon 优惠的结束日期和时间,但出于某种原因,我们似乎收到了该字段的空值。如果错误发生在处理本地输入文件时,我们可以简单地检查文件内容,但现在数据来自多个 URL,并且仅在映射到输出组件时才临时存储。幸运的是,我们可以使用一种技巧来轻松修改映射关系,并保留从 Groupon API 接收的所有数据。我们只需复制输入组件,并将一个副本粘贴到映射关系中。我们可以将原始组件中的响应元素连接到副本,这同时会将两个组件之间的所有子元素都映射起来。

我们的原始输入组件现在连接到两个输出组件。我们可以通过点击任何输出组件右上角的眼睛图标,选择由 MapForce 内置执行引擎生成哪个输出组件。新的输出组件只是简单地保存输入组件中所有内容的副本。当我们使用 XMLSpy 检查原始数据时,不出所料,我们发现了一个空元素,而我们期望的是一个日期和时间:

解决方案

既然我们知道优惠活动可能没有明确的结束时间,我们可以在数据映射中考虑到这种可能性。在对“endAt”元素的处理方式上进行了改进,我们首先进行一个条件判断,然后在调用原始的格式化日期时间函数之前,如果“endAt”元素为空,则提供一种替代的输出结果。

我们必须快速行动,因为所有Groupon的数据都具有时效性。这种特殊情况最终会过期,并从数据流中消失。这次经历让我们认识到,拥有强大的调试工具并巧妙地运用它们至关重要,即使你认为数据映射项目已经运行成功!Altova MapForce提供免费试用版本——你解决的下一个特殊问题,可能就是你自己的。

编辑语: 我们之前推出的一系列关于如何从 Groupon API 获取数据的文章,分为三个部分。您可以点击以下链接查看:第一部分 使用 Altova MapForce 处理 Groupon API 描述了如何通过从多个网址收集数据来创建动态输入。 使用 MapForce 处理 Groupon API 的方法(第二部分) 它描述了我们如何从API中筛选数据,并定义输出格式,以便只提取最重要和有趣的信息。 处理 Groupon API – 第 3 部分 它描述了如何将输出格式化为单个HTML文档,该文档针对桌面设备和移动设备进行了优化,并介绍了自动化重复执行的方法。