Groupon API를 MapForce를 사용하여 처리하기 (2부)
본 시리즈의 1부에서는 Altova MapForce를 Groupon API에 연결하는 방법을 설명했습니다. 먼저 Groupon의 여러 사업 부문 목록을 API를 통해 가져온 다음, 이 목록을 사용하여 각 사업 부문의 현재 프로모션 상품 목록을 가져오는 API 쿼리를 생성했습니다. 이번 부분에서는 /deals 쿼리를 실행하고, 응답 결과에서 가장 유용한 데이터를 추출하는 방법을 알아보겠습니다. 앞서 생성한 /deals 쿼리 목록은 다음과 같습니다
![]()
모든 질의를 처리하기 위해, 우리는 이 목록을 동적 파일 입력으로 새로운 매핑 구성 요소에 연결할 수 있습니다. 이전에도 새로운 구성 요소가 필요했을 때, API/부서 관련 질의를 매핑에 추가하고 MapForce가 자동으로 XML 스키마를 생성하도록 했습니다. 여기에서도 API/거래 관련 질의를 XML 입력 파일로 추가하여 동일한 작업을 수행할 수 있습니다. 다만, 한 가지 작은 문제가 있습니다. Groupon API의 온라인 설명서에서는 우리가 수행할 수 있는 질의에 대해 명확하게 설명하고 있지만, 반환될 정보에 대해서는 자세히 설명하지 않습니다. 현재 진행 중인 모든 거래에 대해 수십 개의 질의를 API에 보내기 전에, 반환될 데이터에 대해 조금 더 자세히 알아야 할 것 같습니다.
합의를 해 봅시다
요기 베라가 말했듯이, 단순히 살펴보는 것만으로도 많은 것을 알 수 있습니다. 먼저 XMLSpy에서 "/deals" 쿼리를 실행해 보겠습니다. 이를 통해 특정 사업부의 쿼리에 대한 응답을 확인하고, 방대한 양의 데이터를 한꺼번에 가져오기 전에 데이터를 검토할 수 있습니다. XMLSpy의 파일/열기 메뉴에는 이전 게시물에서 MapForce에서 사용했던 것과 동일한 "URL로 전환" 옵션이 포함되어 있습니다. 만약 대규모 도시 지역을 포함하는 사업부, 예를 들어 댈러스에 대한 "/deals" API 쿼리를 입력하면, 전체 데이터 세트의 특징을 추론할 수 있을 만큼 충분한 거래 정보가 반환될 가능성이 높습니다. XMLSpy는 로컬 파일을 여는 것처럼, "/deals" API 쿼리에 대한 응답을 텍스트 보기로 엽니다
![]()
예상대로, 특정 사업부의 모든 거래 내역을 요청했더니 상당한 양의 데이터가 나왔습니다. 이 데이터를 분석하는 가장 빠른 방법은 XMLSpy의 DTD/스키마 메뉴 옵션을 사용하여 XML 파일로부터 .xsd 파일을 생성하는 것입니다. 아래에 제시된 내용은, 댈러스 지역의 거래 내역을 요청했을 때 생성된 전체 .xsd 파일의 일부입니다
![]()
우리는 더욱 깊이 파고들어, 마치 "데자뷰"처럼 요기(Yogi)의 조언을 따라가 볼 수 있습니다. XML 스키마의 모든 요소를 자세히 살펴보면 몇 가지 흥미로운 이상 현상이 나타납니다. 예를 들어, "redemptionLocation"이라는 이름의 요소가 두 개 있는데, 이들의 정의가 서로 다릅니다. 첫 번째 요소는 다음과 같은 하위 요소들의 순서로 구성됩니다
![]()
두 번째는 단순한 문자열로 정의됩니다
![]()
댈러스 지역의 XML 데이터로 다시 돌아가서 "redemptionLocation" 항목을 검색하면 다음과 같은 예시들이 나타납니다
![]()
그리고:
![]()
그리고:
![]()
이제 정말 흥미로운 부분이 나왔습니다. redemptionLocation = "online"은 특정 지역 매장을 방문하지 않고도 어디서든 사용할 수 있는 할인 상품을 나타냅니다. 만약 모든 지역의 /deals API를 사용하여 온라인 할인 상품 목록을 추출한다면, 엄청난 규모의 그루폰이 될 것입니다!
** 필요한 정보만 요청하세요**
그루폰 /deals API 쿼리는 선택적인 매개변수 &show=를 지원하며, 이를 통해 사용자는 반환되는 데이터를 제한할 수 있습니다. 이 매개변수를 사용하면 불필요한 데이터를 API 응답에서 제거하여 대역폭을 절약하고 데이터 처리 시간을 줄일 수 있습니다. 또한, 각 할인 상품에 대한 그루폰 웹 페이지 링크를 포함하여 가장 흥미로운 정보만 포함함으로써 최종 결과를 단순화할 수 있습니다. 생성된 댈러스 스키마에서 불필요한 요소를 제거한 후, 온라인 할인 상품 요약에 대한 최종 버전은 다음과 같습니다
![]()
MapForce 매핑에 "&show=" 파라미터를 추가하여 단순화된 XML 스키마에 포함된 요소만 요청하면, 쿼리는 다음과 같이 나타납니다
![]()
이제 수정된 .xsd 파일을 매핑에 추가하고, API/거래 관련 쿼리 목록을 동적 입력으로 연결할 수 있습니다. 이전에 쿼리 목록을 수집하기 위해 사용했던 텍스트 파일은 삭제할 필요가 없습니다. 해당 파일은 향후 문제 해결에 유용하게 사용될 수 있습니다.
![]()
이러한 변경 사항은 데이터 매핑의 입력 부분 작업을 완료합니다.
데이터 변환 결과 정의하기
XMLSpy로 돌아가서, 입력 XML 스키마를 몇 가지 수정하여 출력용 새로운 버전을 설계할 수 있습니다
![]()
저희는 응답 요소는 아무런 가치를 더하지 않으므로 삭제했고, 출력 결과에 포함할 계획이 없는 "교환 장소" 요소를 제거했습니다. 또한, 출력 파일이 지속적으로 변화하는 데이터의 스냅샷이므로, 타임스탬프를 기록하기 위한 날짜 요소를 추가했습니다.
XMLSpy에서 이 .xsd 파일 버전을 저장한 후, 이를 MapForce 매핑에 적용할 수 있습니다. 아래는 매핑의 출력 부분을 보여주며, 출력 구성 요소 중 일부가 연결되어 있습니다. 상단의 필터는 "redemptionLocation" 요소를 읽어 온라인 거래만 선택하고, "now" 함수는 현재 날짜를 삽입합니다
![]()
저희가 출력 XML 스키마에서 마지막으로 수정한 부분은 몇 가지 요소의 데이터 유형을 "dateTime", "Boolean", "정수"에서 "문자열"로 변경한 것입니다. 이렇게 변경한 이유는 더 자세한 설명을 담을 수 있도록 하기 위함입니다. 아래는 최종적으로 출력 구성 요소에 연결된 매핑의 전체 정의입니다
![]()
이제 결론을 말씀드리겠습니다
"출력" 버튼을 클릭하면 MapForce는 내장된 실행 엔진을 사용하여 매핑 작업을 처음부터 끝까지 처리합니다. 다음은 처리 과정에 대한 설명입니다
/divisions쿼리를 실행하여 현재 조직 부서 목록을 확인하십시오- 모든 부서에 대한 "/deals" 쿼리 목록을 만들기 위해 문자열을 연결합니다
- "/deals" 쿼리를 실행하여 입력 컴포넌트에 필요한 동적 데이터를 생성합니다
- 온라인 상품 정보 필터를 적용하여 결과 컴포넌트를 생성하고, 나머지 매핑 함수를 실행한 후, 모든 상품 정보 처리가 완료되면 타임스탬프를 추가합니다
MapForce는 몇 초 만에 모든 단계를 완료하고 다음과 같은 일련의 거래 정보가 담긴 출력 파일을 생성합니다
![]()
이번 시리즈의 3부에서는, 저희가 만든 매핑 결과를 자동으로 HTML 형식으로 변환하는 스타일시트를 디자인할 예정입니다. 이를 통해 웹 브라우저와 모바일 기기에서 보기 좋게 내용을 표시할 수 있습니다. 다음에 야구장에서 뵙겠습니다, 요기!
XMLSpy와 MapForce는 특별 할인 가격으로 제공되는 Altova MissionKit에 함께 포함되어 있습니다. MissionKit을 사용하여 웹 API에서 데이터를 변환하는 것이 얼마나 쉬운지 직접 확인해보세요. 무료 30일 체험판을 다운로드하여 사용해보세요!
편집자의 글: 저희가 제공했던 Groupon API 데이터를 활용한 시리즈는 총 세 부분으로 구성되어 있으며, 아래 링크를 클릭하시면 각 부분을 확인하실 수 있습니다. 1부, Altova MapForce를 사용하여 Groupon API 처리하기에서는 여러 URL에서 데이터를 수집하여 동적인 입력 데이터를 생성하는 방법을 설명합니다. 2부, MapForce를 사용하여 Groupon API 처리하기 – 2부에서는 API에서 데이터를 필터링하고, 가장 흥미로운 정보만 추출하도록 출력 형식을 정의하는 방법을 설명합니다. 3부, Groupon API 처리 – 3부에서는 데스크톱 및 모바일 기기에 최적화된 단일 HTML 문서로 출력을 포맷하는 방법과, 반복적인 작업을 자동화하는 방법을 소개합니다.