---
title: "Integracja danych z usług sieciowych"
date: "2020-05-11"
categories: 
  - "data-integration"
  - "json"
  - "tools"
tags: 
  - "data-integration"
  - "data-mapping"
  - "excel-data-mapping"
  - "json-mapping"
  - "mapforce"
  - "web-services"
description: Poznaj sposób integracji danych prognozy pogody z usługi internetowej do programu Excel, wykorzystując narzędzie MapForce, ze szczególnym uwzględnieniem technik mapowania danych JSON i konwersji danych.
---
Status: #blog

Tags:  #data-integration #data-mapping #excel-data-mapping #json-mapping #mapforce #web-services

Categories: [data-integration](/blog/pl/category/data-integration.md) | [json](/blog/pl/category/json.md) | [tools](/blog/pl/category/tools.md)
# Integracja danych z usług sieciowych

W [poprzedni wpis](https://www.altova.com/blog/analyze-json-data-in-xmlspy-grid-view/) Napisaliśmy, że każde zadanie związane z integracją danych i generowaniem raportów musi rozpoczynać się od jasnego zrozumienia danych źródłowych. Korzystając z widoku tabeli w programie XMLSpy, który jest liderem w swojej branży, można [Edytor plików XML i JSON](https://www.altova.com/pl/xmlspy-xml-editor), Przeanalizowaliśmy dane JSON zawierające prognozy pogody na 5 dni, pobrane z usługi internetowej.

Kontynuując scenariusz, o którym wspominaliśmy wcześniej, użyjemy MapForce, uznanego i nagradzanego narzędzia graficznego [Narzędzie do mapowania danych, umożliwiające konwersję i integrację danych w dowolnym formacie](https://www.altova.com/pl/mapforce), Przetwarzamy prognozy dla szeregu ważnych portów przeładunkowych i umieszczamy je w czytelnych dokumentach Excel. Chcemy zwrócić szczególną uwagę na wszelkie przewidywane silne wiatry lub obfite opady deszczu, które mogą powodować opóźnienia, utrudniając pracę dźwigów podczas załadunku i rozładunku kontenerów, lub spowalniając wejście i wyjście statków do portów.

![](/blog/images/containership.jpg)

<!--more-->

Żądanie REST do pobierania prognoz pogody przyjmuje współrzędne geograficzne (szerokość i długość) i zwraca prognozę na 5 dni dla dowolnego miejsca na świecie. Pojedyncza konfiguracja MapForce może mapować wiele danych wejściowych i wyjściowych, dlatego nasz projekt integracji danych dla usługi internetowej rozpoczniemy od stworzenia listy portów handlowych wraz z ich współrzędnymi.

Tworzenie listy jako nowego dokumentu JSON w widoku tabelarycznym w programie XMLSpy jest szybkie i proste. Wystarczy wpisać dane, nie martwiąc się o znaki specjalne związane z formatem JSON. Na poniższym obrazku kliknęliśmy ikonę w lewym górnym rogu, aby wyświetlić listę w formie tabeli:

[![Lista głównych portów przeładunkowych, wyświetlana w formacie siatki JSON w programie XMLSpy](/blog/images/port-list-grid.png)](port-list-grid.png)

Widok siatki znacznie ułatwia przeglądanie i analizowanie zawartości pliku, w przeciwieństwie do widoku tekstowego, który wyświetla wszystkie znaki składni niezbędne w prawidłowym pliku JSON.

[![Ten sam plik JSON wyświetlony w trybie tekstowym](/blog/images/port-list-text.png)](port-list-text.png)

### Omówienie mapowania danych

Projekt integracji danych MapForce Web Service będzie przyjmował listę portów jako plik wejściowy, generował żądania REST dla każdego zestawu współrzędnych i przekształcał wynikowe dane JSON dla każdego portu do arkusza kalkulacyjnego Excel.

MapForce wykorzystuje pliki schematów JSON, zgodne ze specyfikacjami [json-schema.org](http://json-schema.org), do modelowania struktur danych JSON w procesie mapowania. MapForce może automatycznie generować schemat JSON na podstawie konkretnego przykładu danych JSON. To rozwiązanie będzie odpowiednie dla pojedynczego pliku port-list.json.

Potrzebujemy również schematu JSON, który pozwoli na prawidłowe interpretowanie danych zwracanych przez usługę internetową, co jest nieco bardziej skomplikowane. Nie mamy pojedynczego pliku .json zawierającego wszystkie możliwe warianty wymaganych i opcjonalnych danych w odpowiedzi.

Na szczęście, XMLSpy może generować schemat JSON na podstawie wielu dokumentów instancji zgromadzonych w folderze projektu XMLSpy.

[![Wygeneruj schemat JSON na podstawie wielu plików instancji w formacie XML w programie XMLSpy](/blog/images/xmlspy-schema-gen.png)](xmlspy-schema-gen.png)

Otwierając wynikową strukturę w widoku JSON Schema, widzimy, że obiekt "rain" (deszcz) jest opcjonalny. Dzieje się tak dlatego, że co najmniej jeden z plików zawierających prognozę nie przewidywał deszczu w ciągu całego 5-dniowego okresu, dlatego obiekty "rain" nie zostały uwzględnione w odpowiedzi.

[![Przejrzyj schemat w widoku schematu XMLSpy](/blog/images/schema-view.png)](schema-view.png)

Możemy wykorzystać ten schemat do opisu danych odpowiedzi REST w konfiguracji mapowania.

Na poniższym obrazku widać początek procesu mapowania danych. Zaczęliśmy od zaimportowania pliku "post-list.json" oraz nowej usługi webowej. Dodaliśmy adres URL interfejsu REST i zmapowaliśmy współrzędne szerokości i długości jako parametry wejściowe, aby zbudować żądanie. Obecnie treść odpowiedzi nie ma jeszcze żadnej struktury.

[![Dodawanie odpowiedzi REST do mapowania integracji danych usługi webowej](/blog/images/port-mapping-1.png)](port-mapping-1.png)

Możemy kliknąć w obszar główny, aby otworzyć okno dialogowe "Struktura odpowiedzi" i przypisać do niego schemat, który wygenerowaliśmy w programie XMLSpy

[![Dodanie schematu JSON w celu zmapowania struktury danych zwracanych przez interfejs REST](/blog/images/response-structure-dialog.png)](response-structure-dialog.png)

Po przypisaniu schematu, wszystkie elementy zawarte w treści stają się dostępne do mapowania

[![Wyświetlanie każdego elementu odpowiedzi REST w mapowaniu integracji danych usługi webowej](/blog/images/port-mapping-2.png)](port-mapping-2.png)

Teraz możemy dodać docelowy plik Excel. Otrzymaliśmy przykładową arkusz kalkulacyjny, który możemy wykorzystać jako wzór, zawierający niektóre style komórek, wykresy oraz przykładowe dane:

[![Model arkusza kalkulacyjnego dla końcowego wyniku](/blog/images/sheet-1.png)](sheet-1.png)

Możemy dodać ten arkusz kalkulacyjny do mapowania integracji danych usługi internetowej jako cel, ale nadal musimy zidentyfikować komórki, do których mają być przesyłane dane

[![Dodawanie arkusza kalkulacyjnego do mapowania danych](/blog/images/port-mapping-3.png)](port-mapping-3.png)

Kliknięcie przycisku po prawej stronie pola "Wiersze 1, n=dyn" otwiera okno dialogowe "Wybierz zakres". Wiersz 10 zawiera nagłówki kolumn dla danych, więc chcemy mapować główną tabelę, zaczynając od wiersza 11, do kolumn od A do K. Kolumny zawierają różne typy danych, które w większości odpowiadają typom tekstowym lub numerycznym w źródle JSON oraz formatom w Excelu. Okno dialogowe "Wybierz zakres" pozwala nam zdefiniować dokładne zakresy i typy danych:

[![Wybór zakresu komórek, do których mają zostać wprowadzone dane](/blog/images/select-range-dialog.png)](select-range-dialog.png)

Identyfikacja nazw kolumn w oknie dialogowym "Wybierz zakres" dodaje je jako etykiety w mapowaniu wyników. Następnie możemy zdefiniować logikę, która przypisuje każdą prognozę do oddzielnego pliku Excel, jak pokazano poniżej:

[![Tworzenie unikalnych nazw plików dla każdego arkusza kalkulacyjnego](/blog/images/port-mapping-4.png)](port-mapping-4.png)

Nazwa pliku na samym początku arkusza Excela jest ustawiona na "<dynamic>", co wskazuje, że proces mapowania będzie generował nazwy plików. Każda rzeczywista nazwa pliku jest tworzona za pomocą funkcji łączenia, która włącza nazwę miasta z listy źródłowej, tworząc nazwy takie jak forecast-Seattle.xlsx, itp.

Musimy również upewnić się, że główna tabela danych w każdym pliku rozpoczyna się w wierszu 11. W tym celu powiązaliśmy element najwyższego poziomu tablicy z docelowym miejscem w wierszach 10, ustawiając parametr n na wartość "dyn" i wykorzystaliśmy funkcję automatycznego numerowania, aby resetować początkowy wiersz za każdym razem, gdy zmienia się nazwa pliku.

Każdy obiekt listy w odpowiedzi zostanie przyporządkowany do nowego wiersza w arkuszu kalkulacyjnym Excel. Teraz możemy powiązać poszczególne elementy z odpowiedzią z kolumnami w danym wierszu. Na poniższym obrazku pokazano, jak połączono wszystkie elementy, które nie wymagają dalszej obróbki.

[![Łączenie elementów z odpowiedzi REST z komórkami w arkuszu kalkulacyjnym](/blog/images/port-mapping-5.png)](port-mapping-5.png)

Dla elementów powiązanych bezpośrednio, typy danych w odpowiedzi JSON odpowiadają bezpośrednio typom, które zdefiniowaliśmy dla kolumn w arkuszu kalkulacyjnym. W danych JSON źródłowych, wartość "Temp" jest typu numerycznego, a kolumna E w danych docelowych również jest typu numerycznego. Typ danych dla pola "description" w danych źródłowych to ciąg znaków, a kolumna B w danych docelowych również jest typu ciągu znaków, i tak dalej.

W schemacie JSON dla odpowiedzi zauważyliśmy, że obiekt "rain" (deszcz) jest opcjonalny. Jeśli ten obiekt nie istnieje, chcemy zastąpić go wartością zero. Można to łatwo osiągnąć, tworząc wyrażenie, które łączy funkcje sprawdzające istnienie i instrukcję warunkową: "jeśli istnieje, to... w przeciwnym razie..."

[![W przypadku braku danych dotyczących opadów, wprowadź wartość zero.](/blog/images/port-mapping-6.png)](port-mapping-6.png)

Jednym z ograniczeń formatu danych JSON jest to, że zawiera on tylko dwa typy danych: tekst i liczby. Typy danych, takie jak liczby całkowite i daty, a także specjalne formaty Excela, takie jak procenty i formaty księgowe, nie są zdefiniowane w JSON. MapForce oferuje wygodne, wbudowane funkcje, które pozwalają przekształcić dane źródłowe w pożądane typy danych docelowych podczas mapowania. Dzięki temu możemy utworzyć format daty, który chcemy, w kolumnie A tabeli Excel.

Element `main.dt_text` w danych JSON zawiera datę i godzinę reprezentowane jako ciąg znaków, na przykład: 2020-05-09 06:00:00. MapForce posiada funkcję `parse-dateTime`, która przyjmuje jako argument ciąg znaków i model formatu, a następnie zwraca wynik w formacie daty i czasu. Dodatkową komplikacją jest fakt, że ciąg `dt-txt` jest wyrażony w strefie czasowej GMT, a nie w czasie lokalnym dla miasta, dla którego prognoza jest przygotowywana. Różnica czasu lokalnego jest podawana w elemencie `city.timezone` jako dodatnia lub ujemna wartość w sekundach.

Aby zachować prostotę głównego widoku mapowania, stworzyliśmy funkcję użytkownika o nazwie "calc-local-time". Ta funkcja przyjmuje ciąg znaków i przesunięcie, a następnie oblicza czas lokalny. Funkcja użytkownika jest mapowana w taki sam sposób, jak funkcja wbudowana:

[![](/blog/images/port-mapping-7-2.png)](port-mapping-7-2.png)

Ostatnim krokiem, który musimy wykonać, aby zakończyć mapowanie integracji danych usługi webowej, jest połączenie nazw miast i krajów oraz dodanie ich do wiersza 1, kolumny C:

[![Dodanie nazwy miasta i kraju w pierwszym wierszu](/blog/images/port-mapping-8.png)](port-mapping-8.png)

Oto pełny obraz końcowego odwzorowania:

[![Kompletny przegląd mapowania danych do integracji usług internetowych](/blog/images/port-mapping-complete.png)](port-mapping-complete.png)

Aby uzyskać pliki Excel o odpowiednim formacie dla każdego miasta, potrzebujemy istniejącego pliku Excel o formacie zgodnym z nazwą każdego docelowego pliku. Plik wsadowy to szybki sposób na tworzenie kopii oryginalnych plików, poprzez wielokrotne kopiowanie przykładowego pliku Excel wraz z jego formatowaniem i formułami.

### Wyniki integracji danych z usług sieciowych

Kliknięcie przycisku "Wyjście" znajdującego się w lewym dolnym rogu okna mapowania uruchamia proces mapowania i generuje pliki wynikowe. Jeśli na komputerze jest zainstalowany program Excel, podgląd pliku wynikowego w formacie Excel jest wyświetlany w oknie "Wyjście":

[![Okno podglądu, w którym wyświetlony jest pierwszy wygenerowany plik Excela](/blog/images/port-forecast-output-1.png)](port-forecast-output-1.png)

Data, godzina oraz aktualne warunki pogodowe wyświetlane na górze, a także krótkie opisy tekstowe znajdujące się obok wykresu opadów, są generowane za pomocą formuł w arkuszu kalkulacyjnym Excel. Wszystkie dziewięć plików wynikowych zostało wygenerowanych i możemy wybrać oraz wyświetlić podgląd każdego z nich. Poniżej znajduje się lista rozwijana do wyboru plików oraz siódmy plik zawierający prognozę pogody dla Seattle:

[![Opcja podglądu zawartości innego pliku wyjściowego](/blog/images/port-forecast-output-2.png)](port-forecast-output-2.png)

Funkcje programu Excel są dostępne w oknie podglądu. Na przykład, ta arkusz kalkulacyjny wykorzystuje podział ekranu z możliwością przewijania, przy czym górna część jest zablokowana. Możemy przewinąć do końca głównej tabeli danych, aby dokładnie zobaczyć, jaka ilość opadów jest przewidywana w ostatniej prognozie. Zwróć uwagę na numery wierszy po lewej stronie:

[![Przewijanie danych wyświetlanych w oknie podglądu](/blog/images/port-forecast-output-3.png)](port-forecast-output-3.png)

Jeśli wynik jest zadowalający, możemy zapisać jeden lub wszystkie wygenerowane pliki:

[![Zapisywanie plików wynikowych integracji danych usługi webowej](/blog/images/port-forecast-output-4.png)](port-forecast-output-4.png)

### Dane pośrednie

MapForce został zaprojektowany z myślą o efektywności konwersji danych. Nigdy nie musieliśmy zapisywać, zarządzać ani w żaden sposób manipulować pośrednimi danymi JSON pochodzącymi z odpowiedzi serwisu REST. Wykonywanie tego mapowania integracji danych z usługą internetową nie powoduje zapisywania pośrednich danych.

Jeśli chcemy zapisać dane odpowiedzi JSON wraz z gotowymi arkuszami Excel, MapForce oferuje kilka opcji. Jedną z nich jest utworzenie łańcucha transformacji, który zapisuje dane odpowiedzi jako pośredni plik JSON, oparty na tej samej strukturze, co odpowiedź. Następnie można przekształcić ten plik JSON, aby wygenerować wynik w formacie Excel. Łańcuch transformacji umożliwia podgląd i zapisywanie plików pośrednich, a także ostatecznego wyniku. Poniżej znajduje się lista plików wyjściowych wygenerowanych przez łańcuch transformacji, z jednym z plików JSON wyświetlonym w trybie tekstowym w tle:

[![Alternatywna metoda mapowania danych usług internetowych w celu integracji, wykorzystująca dane pośrednie](/blog/images/port-forecast-output-5.png)](port-forecast-output-5.png)

### Automatyczna integracja danych z usług internetowych

Nasz scenariusz przepływu pracy wymagałby aktualizacji prognoz każdego dnia. Możemy zapisać mapowanie jako plik wykonywalny dla serwera MapForce, co umożliwi [automatyczne przetwarzanie](https://www.altova.com/pl/mapforce-server) przez serwer MapForce, lub wdrożyć go bezpośrednio do serwera FlowForce, aby generować nowe prognozy zgodnie z ustalonym harmonogramem. Zadanie wykonywane przez serwer FlowForce może łączyć zadania integracji danych z wieloma akcjami, w tym akcjami systemowymi, takimi jak przenoszenie plików lub wysyłanie e-maili, lub zadanie serwera FlowForce może [wykonywać złożone przepływy pracy](https://www.altova.com/pl/flowforceserver), które mogą przekazywać wyniki i parametry w celu uruchomienia innych zadań.

Obejrzyj krótki film [demonstracja wideo](https://www.altova.com/pl/mapforce/demos) programu MapForce, lub [Pobierz bezpłatną wersję próbną](https://www.altova.com/pl/mapforce/download) w tym samouczki, pomoc i wiele przykładów, które pomogą rozpocząć pracę nad własnym projektem związanym z integracją danych JSON i usług internetowych, a także w przypadku innych potrzeb związanych z mapowaniem, konwersją i transformacją danych!
