---
title: "使用 Altova MapForce 处理 Groupon API"
date: "2011-08-02"
categories: 
  - "data-integration"
  - "json"
tags: 
  - "altova-xmlspy"
  - "data-integration"
  - "data-mapping"
  - "mapforce"
  - "missionkit"
  - "web-services"
  - "xml-schema"
description: 探索如何使用 Altova MapForce 产品，利用 Groupon API 进行数据集成，包括模式生成、数据聚合以及输出过滤等方法。
---
Status: #blog

Tags:  #altova-xmlspy #data-integration #data-mapping #mapforce #missionkit #web-services #xml-schema

Categories: [data-integration](/blog/zh/category/data-integration.md) | [json](/blog/zh/category/json.md)
# 使用 Altova MapForce 处理 Groupon API

我们通常将一个[数据集成项目](https://www.altova.com/zh/mapforce/data-integration.html)视为将一个单一的数据输入文件转换成其他数据集的过程，但[Altova MapForce](https://www.altova.com/zh/mapforce.html)可以极大地扩展“输入文件”的概念。例如，MapForce安装包中提供的“MergeMultipleFiles.mfd”示例，展示了如何使用包含通配符的文件名，将多个输入文件合并成一个输出文件。 

[![MapForce 合并多个文件示例 (MapForce MergeMultipleFiles.mfd)](https://lh5.ggpht.com/-RBpPd9xjMSc/TjF168Ec0gI/AAAAAAAAAcE/bV5CyMKsPD4/Capture1a_thumb%25255B2%25255D.png?imgmax=800 "MapForce MergeMultipleFiles.mfd example")](http://lh4.ggpht.com/-R8gdQ1Q38u8/TjF16hMIxzI/AAAAAAAAAcA/GsqlZnUf5EM/s1600-h/Capture1a%25255B4%25255D.png) 

MapForce 的映射输入并不一定需要是一个实际的文件，它可以是一个 URL，该 URL 返回结构化的数据，例如像 Groupon 和许多其他网站那样，它们提供 API 接口。 在这篇博文中，我们将介绍如何使用 Altova 工具来获取、过滤、分析和呈现来自 Web API 的数据，以 Groupon 为例。 如果您想自己尝试，首先需要访问 [http://www.groupon.com/pages/api](http://www.groupon.com/pages/api)，以获取您的个人 Groupon API 客户端密钥。 

**问题：所有交易都是本地化的** 

Groupon的网站和邮件订阅服务非常适合查找您所在社区的优惠活动，但如果您正在寻找用于即将到来的旅行的优惠，或者为全国各地的朋友或家人准备礼物，该怎么办？ 您当然可以手动在Groupon网站上输入每个地点，但那样太落后了。 让我们使用[Altova MissionKit](https://www.altova.com/zh/missionkit/software-development-tools.html)来自动化这个过程。 Groupon的API提供了两个URL查询，它们以.json或.xml格式返回数据：第一个查询返回所有Groupon服务区域（称为“区域”）的列表，第二个查询返回指定区域的当前优惠信息。 如果我们想查看多个区域的所有优惠活动，我们需要解析多个URL并将数据汇总到一个结果中。 没错，MapForce可以做到！ 

**首先，我们需要一个模式** 

Groupon 的 API 文档描述了我们的请求将返回的元素，但没有提供 XML 模式。这没关系，我们可以使用 MapForce 来生成一个。我们只需要打开一个新的映射设计，选择“插入 XML 模式/文件”，然后点击“切换到 URL”按钮。现在，我们可以输入 URL 来获取 Groupon 的分部列表：

[![通过URL将新组件插入到MapForce映射中](https://lh3.ggpht.com/-qM2IPop_c30/TjF17brkVWI/AAAAAAAAAcM/jUa4qGeshyg/Capture5a_thumb%25255B3%25255D.png?imgmax=800 "Inserting a new component into a MapForce mapping by URL")](http://lh3.ggpht.com/-0BjDz4wIZH4/TjF17MmRwSI/AAAAAAAAAcI/LlPHWGndfxA/s1600-h/Capture5a%25255B7%25255D.png) 

当我们点击“打开”按钮时，MapForce会提示我们生成模式文件 

[![MapForce 能够生成 XML 模式文件](https://lh3.ggpht.com/-PiqLocWZDDA/TjF18LUtzxI/AAAAAAAAAcU/QIKrx4ewM70/Capture6a_thumb%25255B2%25255D.png?imgmax=800 "MapForce offers to generate an XML Schema")](http://lh5.ggpht.com/-vCth55bCKOo/TjF172VAMUI/AAAAAAAAAcQ/dncdbJ3mvtA/s1600-h/Capture6a%25255B4%25255D.png) 

当我们点击“是”后，会打开“文件/保存”对话框。我将该模式文件保存为 divisions.xsd，并且插入了新的 XML 模式后的映射关系如下所示： 

[![在 MapForce 设计中，生成一个新的 .xsd 组件](https://lh4.ggpht.com/-7puBZWoRdJc/TjF18jRYtJI/AAAAAAAAAcc/9iP01YJ3S5o/Capture7a_thumb%25255B2%25255D.png?imgmax=800 "Generated .xsd as a new component in a MapForce design")](http://lh3.ggpht.com/-0OJFlVtA3TY/TjF18dEUNzI/AAAAAAAAAcY/QbYs66oS4ao/s1600-h/Capture7a%25255B4%25255D.png) 

并且，XML Schema 组件的“属性”对话框会自动包含 API/divisions 的 URL，并将其作为“输入 XML 文件”

[![生成的 .xsd 文件的组件属性](https://lh4.ggpht.com/-DxR6I7S_M0Y/TjF19AYCulI/AAAAAAAAAck/oEyriBBPFLw/Capture8a_thumb%25255B2%25255D.png?imgmax=800 "Component properties for the generated .xsd")](http://lh3.ggpht.com/-j78a9iqLhNA/TjF185FWCYI/AAAAAAAAAcg/kpQVQRFdQnQ/s1600-h/Capture8a%25255B4%25255D.png) 

**检查工作** 

我们希望筛选 Groupon 各个部门的数据，从而构建一个包含 ID 名称的列表，用于针对每个地区的优惠活动查询。但在继续之前，现在可能是一个使用之前提到的文本文件技巧的好时机 [解决复杂功能的快速方案](https://www.altova.com/blog/2011/06/quick-solution-for-complicated.html) 在博客文章中，我们可以查看 ID 值。当我们将文本文件导入并连接各个分段以及 ID 模式元素后，映射关系如下所示： 

[![使用 MapForce 设计，并使用文本文件预览输出结果](https://lh3.ggpht.com/-Mp6B8HzA76s/TjF19vA3IYI/AAAAAAAAAcs/tZ3QnQUmKHM/Capture9a_thumb.png?imgmax=800 "MapForce design with text file to preview output")](http://lh4.ggpht.com/-yq4FRkmg2pc/TjF19YEVF4I/AAAAAAAAAco/klUCUiUmSZA/s1600-h/Capture9a%25255B2%25255D.png) 

为了在文本文件中为每个唯一的部门创建一个新行，我们将“部门”字段与文本文件中的“行”关联起来。这样，每个行中的“字段1”将包含部门的ID。现在，点击“输出”按钮将生成以下结果：

[![MapForce 输出窗口](https://lh4.ggpht.com/-7FD3rcouxog/TjF1-O22nvI/AAAAAAAAAc0/s6XfT-yf6mM/Capture10a_thumb.png?imgmax=800 "MapForce Output window")](http://lh5.ggpht.com/-isYCN1hj10Q/TjF198GgHgI/AAAAAAAAAcw/AyfvxcATibY/s1600-h/Capture10a%25255B2%25255D.png) 

我们只需要使用 `concat [string](https://www.altova.com/zh/mapforce/data-processing-functions.html) 函数来构建包含所有部门 ID 对应的 "/deal" URL 的列表。下一步的映射关系如下： 

[![使用 MapForce 的连接函数来构建字符串](https://lh4.ggpht.com/-SBE9mgc9AfI/TjF1-rNY8WI/AAAAAAAAAc8/EEpWrWfj0gk/Capture11a_thumb.png?imgmax=800 "Using the MapForce concat function to build a string")](http://lh3.ggpht.com/-qClnz7ZHjw4/TjF1-XbA3MI/AAAAAAAAAc4/AJ-gV2dnmbY/s1600-h/Capture11a%25255B2%25255D.png) 

将光标悬停在与 "concat" 函数的 "value1" 参数相连的变量上，会显示该变量的完整定义 

[![MapForce 字符串常量定义](https://lh3.ggpht.com/-t1SNI0Ds6ns/TjF1_fP4ABI/AAAAAAAAAdE/P9JmMG1qND4/clip_image010_thumb%25255B2%25255D.png?imgmax=800 "Definition of a MapForce string constant")](http://lh3.ggpht.com/-n6kAy7GZ470/TjF1-0j-6bI/AAAAAAAAAdA/RPmD7EcKCH0/s1600-h/clip_image010%25255B5%25255D.png) 

当我们点击“输出”按钮来执行映射操作时，输出文件现在会显示如下内容： 

[![MapForce 输出窗口](https://lh4.ggpht.com/-30F5fcIIBos/TjF2AKMGFmI/AAAAAAAAAdM/nR4W4krpL0g/Capture13a_thumb_thumb.png?imgmax=800 "MapForce Ouput window")](http://lh4.ggpht.com/-WMDb-lUe9C4/TjF1_mnQbEI/AAAAAAAAAdI/8uCForSSDxo/s1600-h/Capture13a_thumb%25255B2%25255D.png) 

为了进一步检查，我们可以打开生成的 XML Schema 文件，并在 XMLSpy 中使用图形化模式查看其内容 

[![Altova XMLSpy 软件生成的 .xsd 文件的图形化模式视图](https://lh5.ggpht.com/-Q2yiYR8WFic/TjF2A8H0sKI/AAAAAAAAAdU/PhSlddLXLrk/Capture4a_thumb_thumb.png?imgmax=800 "Altova XMLSpy graphical schema view of the generated .xsd")](http://lh4.ggpht.com/-En89-pLUYN0/TjF2AYoZNhI/AAAAAAAAAdQ/yleZP_KLz88/s1600-h/Capture4a_thumb%25255B2%25255D.png) 

到目前为止，我们已经有了：

- 构建了一个 MapForce 映射，该映射会查询 Groupon API，以获取所有部门的数据
- 提取了部门ID字段
- 并且构建了一个URL列表，用于API查询，以便获取每个部门的优惠信息

在接下来的系列文章中，我们将使用一系列交易查询作为输入，为新的映射组件进行处理，并筛选输出结果，提取一些有趣的信息。 **亲自体验一下，使用 MapForce 将 Web API 中的数据转换为其他格式是多么简单！** 

[**下载 MapForce 的免费 30 天试用版。**](https://www.altova.com/zh/download/mapforce/data_mapping_enterprise.html) **** 

**编辑语：** 我们之前推出的一系列关于如何从 Groupon API 获取数据的文章，分为三个部分。您可以点击以下链接查看：第一部分 [使用 Altova MapForce 处理 Groupon API](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html) 描述了如何通过从多个网址收集数据来创建动态输入。 [使用 MapForce 处理 Groupon API 的方法（第二部分）](https://www.altova.com/blog/2011/08/processing-groupon-api-with-mapforce.html) 它描述了我们如何从API中筛选数据，并定义输出格式，以便只提取最重要和有趣的信息。 [处理 Groupon API – 第 3 部分](https://www.altova.com/blog/2011/08/processing-groupon-api-part-3.html) 它描述了如何将输出格式化为单个HTML文档，该文档针对桌面设备和移动设备进行了优化，并介绍了自动化重复执行的方法。
