---
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/ja/category/data-integration.md) | [json](/blog/ja/category/json.md)
# Altova MapForce を使用した Groupon API の処理

私たちはよく、あるものを [データ統合プロジェクト](https://www.altova.com/ja/mapforce/data-integration.html) これは、ある単一のデータ入力ファイルから別のデータセットへの変換として機能しますが、 [Altova MapForce](https://www.altova.com/ja/mapforce.html) これにより、入力ファイルの概念を大幅に拡張できます。例えば、MapForceに付属している「MergeMultipleFiles.mfd」というサンプルファイルは、ワイルドカード文字を含むファイル名を使用して、複数の入力ファイルを1つの出力ファイルに統合する方法を示しています。 

[![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でも構いません。例えば、Grouponのような人気ウェブサイトのAPIなどが該当します。この記事では、Altovaのツールを使って、ウェブベースのAPIから利用可能なデータを取得、フィルタリング、分析し、表示する方法を、Grouponを例に説明します。もしご自身で試してみたい場合は、まず[http://www.groupon.com/pages/api](http://www.groupon.com/pages/api)にアクセスして、ご自身のGroupon APIクライアントキーをリクエストする必要があります。 

**問題点：すべての取引は地域限定である** 

Grouponのウェブサイトやメールマガジンは、お住まいの地域でお得な情報を探すのに便利ですが、もし旅行の予定がある際に利用できるお得な情報や、全国各地に住む友人や家族へのプレゼントを探している場合はどうでしょうか？もちろん、Grouponのウェブページでそれぞれの場所を手動で入力することもできますが、それはもう昔の話です。そこで、[Altova MissionKit](https://www.altova.com/ja/missionkit/software-development-tools.html)を使って、この作業を自動化しましょう。GrouponのAPIには、.jsonまたは.xml形式でデータを提供する2つのURLクエリがあります。1つは、すべてのGrouponの地域（「ディビジョン」と呼ばれます）のリストを返し、もう1つは、特定のディビジョンにおける現在のお得な情報を提供します。もし、複数のディビジョンにおけるお得な情報をすべて確認したい場合は、複数のURLを処理し、そのデータを1つの結果にまとめる必要があります。MapForceなら、それを実現できます！ 

**まず、スキーマが必要です** 

GrouponのAPIドキュメントには、リクエストによって返される要素が記述されていますが、XMLスキーマは提供されていません。しかし、問題ありません。MapForceを使ってXMLスキーマを生成できます。新しいマッピングデザインを開き、「XMLスキーマ/ファイルの挿入」を選択し、次に「URLへの切り替え」ボタンをクリックします。これで、Grouponの部門リストを取得するためのURLを入力できます

[![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は、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スキーマコンポーネントのプロパティダイアログには、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名の一覧を作成し、それを使ってお得な情報（"deal"）を検索したいと考えています。しかし、さらに進む前に、ここで「テキストファイルを利用する」という手法を適用する良い機会かもしれません [複雑な機能に対する迅速な解決策](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/ja/mapforce/data-processing-functions.html)関数を使って、すべての部門IDに対応する`/deal`のURLのリストを作成することです。 次のステップは、以下のようになります 

[![MapForceのconcat関数を使用して、文字列を構築します](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スキーマを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」のフィールドを抽出しました
- そして、各部門の情報を取得するためのAPIクエリに使用するURLの一覧を作成しました

次の記事では、このシリーズの続きとして、取引に関する問い合わせリストを新しいマッピングコンポーネントの入力として処理し、その結果から興味深い情報を抽出します。 **ご自身で、MapForceを使ってWeb APIからデータを変換するがいかに簡単であるか、ぜひ試してみてください。** 

[**30日間の無料トライアルをダウンロードしてください。**](https://www.altova.com/ja/download/mapforce/data_mapping_enterprise.html) **MapForceに関する情報です。** 

**編集後記：** 弊社のGroupon APIから取得したデータを活用したオリジナルシリーズは、3つのパートで構成されており、以下のリンクをクリックして各パートをご覧ください。パート1： [Altova MapForce を使用した Groupon API の処理](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html) 複数のURLからデータを収集することで、動的な入力を作成する方法について説明します。 [MapForceを使ったGroupon APIの処理 - 第2部](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ドキュメントとして整形する方法について説明し、繰り返し実行を自動化するための方法についても解説しています。
