Udostępnij za pośrednictwem


Jak napisać rozszerzenie pogody

W tej sekcji zostanie wyświetlony przewodnik krok po kroku dotyczący pisania własnego rozszerzenia pogody.

Co to jest rozszerzenie pogody

Rozszerzenie pogody w programie Data Manager for Agriculture to plik manifestu (JSON) zawierający pełne szczegóły dotyczące interfejsów API i szablon dla każdej odpowiedzi interfejsów API (dane wyjściowe). W związku z tym plik rozszerzenia jest zasadniczo strukturą szablonu interfejsu API zdefiniowaną przez menedżera danych dla rolnictwa, aby zrozumieć charakterystykę danych wejściowych (żądania) interfejsu API i danych wyjściowych (odpowiedzi).

Struktura rozszerzenia pogody

Na wysokim poziomie plik rozszerzenia jest plikiem JSON składającym się z dwóch elementów:

  • Metadane dostawcy (obiekt JSON)
  • Informacje o interfejsie API (tablica JSON)

Metadane dostawcy

Jest to obiekt json zawierający szczegółowe informacje na temat poniższych pól, które są niezbędne do unikatowego zidentyfikowania rozszerzenia i informacji o jego wersji. Szczegółowe informacje podane w tej sekcji rozszerzenia są wyświetlane klientom zewnętrznym w witrynie Data Manager for Agriculture Marketplace. W związku z tym extensionId i extensionName (w celu łatwej identyfikacji) i description (dla propozycji wartości) muszą być skoncentrowane na klientach.

Przykładowe metadane dostawcy

"provider": {
    "extensionId": "abc.weather", 
    "extensionName": "ABC weather",
    "description": "Get Weather data from ABC weather into Azure Data Manager for Agriculture platform using this extension",
    "dataCategory": "Weather",
    "farmBeatsSchemaVersion": "1.0",
    "extensionVersion": "1.0",
    "supportUrl": "www.abc.com/support",
    "supportEmail": "support@abc.com"
  }
Szczegóły metadanych dostawcy
Nazwisko Pisz Opis
extensionId string Identyfikator podany w sposób nazwy organizacji (Contoso) i usługi (pogoda) Np. org.service. extensionId jest unikatowym identyfikatorem rozszerzenia i tym, którego użytkownicy używają na platformie Data Manager for Agriculture do interakcji z interfejsami API rozszerzeń
extensionName string Nazwa rozszerzenia, które ma być używane na platformie handlowej rozszerzenia Data Manager for Agriculture.
opis string Opis z informacją o możliwościach i usługach oferowanych przez rozszerzenie.
dataCategory string W przypadku rozszerzeń pogodowych użyj polecenia weather.
farmBeatsSchemaVersion string Wersja pliku manifestu po stronie Menedżera danych dla rolnictwa. Wszelkie aktualizacje istniejącego pliku manifestu prowadzą do nowej aktualizacji wersji tego pola.
extensionVersion string Wersja pliku rozszerzenia. 1.0Rozpoczynanie od . Aktualizacje pliku rozszerzenia zwiększa ten numer wersji zgodnie z konwencją aktualizacji głównych i pomocniczych.
supportUrl string Link do witryny internetowej w celu zgłaszania zapytań pomocy technicznej i często zadawanych pytań
supportEmail string Wiadomość e-mail do wysłania w zapytaniach pomocy technicznej.

Informacje o interfejsie API

Tablica JSON informacji o interfejsie API (apiInfos) może zostać dodatkowo podzielona na następujące elementy strukturalne.

  • Metadane interfejsu API
  • Parametry uwierzytelniania
  • Parametry wejściowe interfejsu API
  • Wyodrębnione parametry wejściowe interfejsu API
  • Parametry funkcjonalne
  • System jednostek
  • Parametry platformy i niestandardowe
  • Szablon platformy i szablon niestandardowy

Metadane interfejsu API

Ta sekcja składa się z podstawowych informacji dotyczących interfejsu API używanego przez menedżera danych dla rolnictwa do identyfikowania apiName (wywoływanego przez użytkowników jawnie) i przekierowywania żądania interfejsu API do prawej endpoint strony na podstawie odpowiedniego requestTypeelementu .

Przykładowe metadane interfejsu API
"apiInfos": [
    {
          "apiName": "dailyforecast",
          "description": "The Daily Forecast API",
          "endpoint": "https://ag.us.clearapis.com/v1.1/forecast/daily",
          "requestType": "GET",
          "isLoadAPI": "false",
          "typeOfData": "forecast",
          "granularity": "daily",
          "defaultUnitSystem": "us"
    }
]
Szczegóły metadanych interfejsu API
Nazwisko Pisz Opis
apiInfos tablica Tablica JSON obiektów, gdzie każdy interfejs API jest obiektem w apiInfos tablicy.
apiName string Nazwa interfejsu API obsługiwana przez rozszerzenie to dokładna nazwa, przy użyciu której użytkownicy będą wywoływać interfejsy API rozszerzeń. Postępuj zgodnie z tą samą konwencją nazewnictwa, jak wspomniano w dokumentacji interfejsu API.
opis string Opis interfejsu API
endpoint string Punkt końcowy interfejsu apiNameAPI dla programu Data Manager for Agriculture w celu wywołania metody .
Requesttype string GET lub POST PUT typ żądania obsługiwany przez element apiName.
isLoadAPI boolean apiName Jeśli element jest interfejsem API przekazywania, takim jak bieżące dane pogodowe, wprowadź ten klucz jako false. Dla wszystkich interfejsów API ładowania (historycznych i prognozowanych) zachowaj to pole jako true. isLoadAPI Gdy klucz to false, odpowiedź interfejsu API zostanie wysłana bezpośrednio do użytkownika i nie będzie przechowywana w usłudze magazynu Data Manager for Agriculture.
typeOfData string Obecnie obsługiwane wartości to Historical i Forecast.
Ziarnistość string Obecnie obsługiwane wartości to Daily i Hourly.
defaultUnitSystem string Podaj nazwę domyślnego systemu jednostek obsługiwanego przez program apiName.

Parametry uwierzytelniania

Ta sekcja przyjmuje parametry powiązane z uwierzytelnianiem, które są obsługiwane przez element apiName. Ponieważ menedżer danych dla rolnictwa obsługuje dwa typy kluczy związanych z uwierzytelnianiem (x-ms-farmBeats-data-provider-id i x-ms-farmBeats-data-provider-key) w sekcji nagłówka interfejsu API, plik rozszerzenia musi jawnie podać nazwę klucza odpowiednich kluczy uwierzytelniania zgodnie z wymaganiami .apiName

Jako menedżer danych dla rolnictwa zbiera informacje uwierzytelniania za pośrednictwem nagłówka interfejsu API (w interfejsie API tworzenia zadań pogodowych). Mapowanie parametrów uwierzytelniania jest wykonywane, aby upewnić się, że menedżer danych dla rolnictwa może przekazać klucz odpowiednio do rozszerzenia zgodnie z potrzebami.

Przykładowe parametry uwierzytelniania
"apiInfos": [
    "authInputParameters": [
        {
          "farmBeatsAuthMapping": "x-ms-farmBeats-data-provider-id",
          "name": "app_id",
          "isRequired": "true",
          "providerDataType": "string",
          "description": "Provide the APP ID, username etc. that your API supports",
          "location": "apiQuery"
        },
        {
          "farmBeatsAuthMapping": "x-ms-farmBeats-data-provider-key",
          "name": "app_key",
          "isRequired": "true",
          "providerDataType": "string",
          "description": "Provide the API Key or password etc. that your API supports",
          "location": "apiQuery"
        }
      ]
]
Szczegóły parametrów uwierzytelniania
Nazwisko Pisz Opis
authInputParameters tablica Tablica parametrów uwierzytelniania JSON, w której każdy obiekt oznacza obsługiwany typ uwierzytelniania. Użyj klucza na podstawie typu uwierzytelniania obsługiwanego przez rozszerzenie.
farmBeatsAuthMapping string Obecnie obsługiwane są dwa typy kluczy związanych z uwierzytelnianiem. W przypadku uwierzytelniania opartego na kluczu interfejsu API użyj tylko x-ms-farmBeats-data-provider-key obiektu, natomiast w przypadku uwierzytelniania opartego na identyfikatorze APLIKACJI i kluczu aplikacji używane są obiekty x-ms-farmBeats-data-provider-id ix-ms-farmBeats-data-provider-key .
nazwa string Nazwa klucza uwierzytelniania obsługiwanego przez element apiName.
Isrequired boolean Czy ta nazwa jest wymaganym parametrem apiName? Podaj wartości true lub false.
providerDataType string Podaj typ danych parametru name .
opis string Menedżer danych dla rolnictwa opis tego, co każdy z farmBeatsAuthMapping środków w każdym obiekcie.
lokalizacja string Gdzie w interfejsie API powinien name zostać wysłany parametr. Obecnie obsługiwane wartości to apiQuery & apiHeader.

Parametry wejściowe interfejsu API

Ta sekcja zawiera szczegółowe informacje na temat sygnatury interfejsu API (parametrów wejściowych), aby pomyślnie wywołać element apiName.

Przykładowe parametry wejściowe interfejsu API
"apiInfos": [
    "apiInputParameters": [
        {
          "name": "start",
          "isRequired": "true",
          "providerDataType": "double",
          "description": "Start of time range. Valid start values range from zero to nine. Day zero represents the current day.",
          "location": "apiQuery"
        },
        {
          "name": "end",
          "isRequired": "true",
          "providerDataType": "double",
          "description": "End of time range. Valid end values range from zero to nine.",
          "location": "apiQuery"
        },
        {
          "name": "location",
          "isRequired": "true",
          "providerDataType": "string",
          "description": "User-provided latitude and longitude coordinates. Formatted as location=[(<lat_1>,<lon_1>)].",
          "location": "apiQuery"
        },
        {
          "name": "unitcode",
          "isRequired": "false",
          "providerDataType": "string",
          "description": "Unit conversion set to be used. Default is us-std. Valid values are us-std, si-std.",
          "location": "apiQuery"
        },
      ]
]
Szczegóły parametrów wejściowych interfejsu API
Nazwisko Pisz Opis
apiInputParameters tablica Tablica JSON parametrów wejściowych interfejsu API, gdzie każdy obiekt oznacza parametr wejściowy obsługiwany przez apiNameparametr .
nazwa string Nazwa parametru wejściowego obsługiwanego przez parametr apiName.
Isrequired boolean Czy ta nazwa jest wymaganym parametrem apiName? Podaj wartości true lub false.
providerDataType string Podaj typ danych parametru name .
opis string Podaj opis parametru, który name oznacza.
lokalizacja string Gdzie w interfejsie API powinien name zostać wysłany parametr. Obecnie obsługiwane wartości to apiQuery & apiHeader.

Wyodrębnione parametry wejściowe interfejsu API

Ta sekcja dotyczy menedżera danych w celu wyodrębnienia parametrów wejściowych przekazanych w żądaniu interfejsu API do obliczeń i magazynu. W tym przykładzie menedżer danych dla rolnictwa wyodrębnia informacje o lokalizacji (szerokość i długość geograficzną) z żądania danych wejściowych interfejsu API i zapisze je jako część danych wyjściowych każdej pogody w menedżerze danych dla rolnictwa.

W związku z tym rozszerzenie musi udostępnić szablon HandleBars dotyczący sposobu wyodrębniania informacji o lokalizacji. Poniższy przykład sugeruje, że interfejs API rozszerzenia zbiera informacje o lokalizacji dla "lat" "latitude" parametrów i "lon" dla programu "longitude".

Przykładowe wyodrębnione parametry wejściowe interfejsu API
"extractedApiInputParameters": [
        {
          "name": "location",
          "template": "{ \"latitude\": \"{{lat}}\", \"longitude\": \"{{lon}}\"  } "
        }
      ]
Szczegóły wyodrębnionych parametrów wejściowych interfejsu API
Nazwisko Pisz Opis
extractedApiInputParameters tablica Tablica funkcji wyodrębniania JSON, w której każdy obiekt oznacza, jakie informacje należy wyodrębnić. Obecnie location jest to jedno z takich wyodrębniania.
nazwa string Nazwa wyodrębniania, obecnie obsługiwana wartość to location .
sieci Web string Szablon HandleBars przedstawiający sposób zbierania informacji o szerokości geograficznej i długości geograficznej w parametrach wejściowych interfejsu API.

Parametry funkcjonalne

Ta sekcja jest przeznaczona dla funkcji/możliwości utworzonych przez menedżera danych dla rolnictwa. W przypadku rozszerzenia pogody obliczenie centroid jest jedną z takich funkcji.

Gdy użytkownicy nie udostępniają współrzędnych szerokości/długości geograficznej, menedżer danych dla rolnictwa używa podstawowej geometrii pola (identyfikator przekazany przez użytkownika) do obliczenia centroidu. Obliczone współrzędne centroid są przekazywane jako szerokość geograficzna i długość geograficzna rozszerzenia (dostawca danych). W związku z tym, aby menedżer danych dla rolnictwa mógł zrozumieć użycie współrzędnych lokalizacji, używana jest sekcja parametrów funkcjonalnych.

W przypadku menedżera danych dla rolnictwa, aby zrozumieć użycie szerokości i długości geograficznej w apiName parametrach wejściowych, rozszerzenie ma dostarczyć name klucz używany do zbierania informacji o lokalizacji, a następnie szablon paska obsługi, aby sugerować, jak należy przekazać wartości szerokości i długości geograficznej.

Przykładowe parametry funkcjonalne
"apiInfos": [
    "functionalParameters": [
        {
          "name": "CentroidCalculation",
          "description": "Provide names of the parameters used to collect latitude and longitude information",
          "functionalParameterEntities": [
            {
              "name": "lat",
              "template": "{ \"lat\": \"{{latitude}}\" } "
            },
            {
              "name": "lon",
              "template": "{ \"lon\": \"{{longitude}}\" } "
            }
          ]
        }
      ],
]
Szczegóły parametrów funkcjonalnych
Nazwisko Pisz Opis
functionalParameters tablica Tablica funkcji JSON, w której każdy obiekt oznacza funkcjonalność obsługiwaną przez menedżera danych dla rolnictwa. Obecnie CentroidCalculation jest to jedna z takich funkcji.
nazwa string Nazwa funkcji, obecnie obsługiwana wartość to CentroidCalculation .
opis string Data Manager for Agriculture description of functionality (Menedżer danych dla rolnictwa— opis funkcji).
functionalParameterEntities tablica Tablica JSON obiektów, gdzie każdy obiekt jest specyficzny dla szerokości i długości geograficznej.

System jednostek

Ta sekcja jest używana przez menedżera danych dla rolnictwa do zrozumienia różnych typów systemów jednostkowych obsługiwanych przez rozszerzenie. W związku z tym rozszerzenie musi podać key nazwę używaną do zbierania informacji o jednostkach w danych wejściowych interfejsu apiNameAPI, a następnie różne nazwy systemu jednostek (np. us-std) obsługiwane przez element .

Przykładowy system jednostek
"unitSystems": 
    {
        "key": "unitcode",
        "values": [
            "us-std",
            "si-std",
            "us-std-precise",
            "si-std-precise"
            ]
    }
Szczegóły systemu jednostek
Nazwisko Pisz Opis
unitSystems obiekt Obiekt JSON do zbierania informacji o systemie jednostkowym.
klucz string Nazwa parametru używanego do zbierania informacji o jednostkach w danych wejściowych interfejsu API.
wartości string Lista nazw systemów jednostek obsługiwanych przez rozszerzenie.

Parametry platformy i niestandardowe

W każdej odpowiedzi interfejsu API pogody miary pogody, które są wysyłane jako część danych wyjściowych (np. temperatura, punkt odwu itp.) są nazywane parametrami.

W związku z tym, jeśli chodzi o parametry, menedżer danych dla rolnictwa wewnętrznie obsługuje następujący zestaw parametrów i traktuje je jako Platform parameters.

  • cloudCover
  • Data i godzina
  • dewPoint
  • growingDegreeDay
  • Opady
  • ciśnienie
  • relativeHumidity
  • glebaMoisture
  • glebaTemperature
  • temperature
  • widoczność
  • wetBulbTemperature
  • windChill
  • windDirection
  • windGust
  • windSpeed

W związku z tym każde rozszerzenie wysyłające parametry pogodowe, które nie należą do parametrów platformy, wysyła je w ramach elementu Custom parameters. Kluczową różnicą między parametrami platformy i klienta jest to, że użytkownicy korzystający z usługi Data Manager for Agriculture weather API mogą wykonywać zapytania i filtrować parametry platformy (np. temperatura > 30), a nie na parametrach niestandardowych. Parametry niestandardowe są jednak wysyłane jako część danych wyjściowych zapytania pogodowego.

W tej sekcji rozszerzenie zawiera informacje o jednostkach dla każdego z parametrów dla każdego obsługiwanego systemu jednostek. Korzystając z tego menedżera danych dla rolnictwa, wie, jaka jest podstawowa jednostka miary dla każdego parametru pogody na podstawie informacji podanych w tej sekcji rozszerzenia.

Uwaga

  • W przypadku określonego parametru, jeśli jednostki nie mają zastosowania, nie wspominając o jednostkach dla tych samych (np. weatherDescriptor)
  • W przypadku określonego parametru, jeśli jednostki są takie same dla wszystkich systemów jednostek, należy wspomnieć o tym samym we wszystkich systemach jednostek. (Np. cloudCover)
Przykładowe parametry platformy i niestandardowe
"apiInfos": [
     "platformParameters": [
        {
          "farmBeatsName": "cloudCover",
          "farmBeatsDataType": "double",
          "description": "The average percentage of sky covered by clouds.",
          "measurementUnits": [
            {
              "unitSystem": "us-std",
              "unit": "%"
            },
            {
              "unitSystem": "us-std-precise",
              "unit": "%"
            },
            {
              "unitSystem": "si-std",
              "unit": "%"
            },
            {
              "unitSystem": "si-std-precise",
              "unit": "%"
            }
          ]
        },
        {
          "farmBeatsName": "dewPoint",
          "farmBeatsDataType": "double",
          "description": "The air temperature at which the air will become saturated, and dew moisture will condense into fog (or dew).",
          "measurementUnits": [
            {
              "unitSystem": "us-std",
              "unit": "F"
            },
            {
              "unitSystem": "us-std-precise",
              "unit": "F"
            },
            {
              "unitSystem": "si-std",
              "unit": "C"
            },
            {
              "unitSystem": "si-std-precise",
              "unit": "C"
            }
          ]
        },
    "customParameters": [
        {
          "providerName": "weatherDescriptor",
          "providerDataType": "string",
          "description": "General weather descriptor data"
        },
        {
          "providerName": "airTempMax",
          "providerDataType": "double",
          "description": "Maximum daily air temperature at two meters above ground level.",
          "measurementUnits": [
            {
              "unitSystem": "us-std",
              "unit": "F"
            },
            {
              "unitSystem": "us-std-precise",
              "unit": "F"
            },
            {
              "unitSystem": "si-std",
              "unit": "C"
            },
            {
              "unitSystem": "si-std-precise",
              "unit": "C"
            }
          ]
        },
]
Szczegóły parametrów platformy
Nazwisko Pisz Opis
platformParameters tablica Tablica JSON parametrów platformy, gdzie każdy obiekt jest jednym parametrem platformy.
farmBeatsName string Nazwa parametru dostarczonego przez menedżera danych dla rolnictwa.
farmBeatsDataType string Typ danych parametru dostarczonego przez menedżera danych dla rolnictwa.
opis string Opis parametru dostarczonego przez menedżera danych dla rolnictwa.
measurementUnits string Tablica JSON jednostek dla każdego systemu values jednostkowego obsługiwanego przez rozszerzenie.
unitSystem string System value jednostkowy obsługiwany przez rozszerzenie.
unit string Jednostka miary dla określonego parametru pogody Ex: F dla dewPoint.
Szczegóły parametrów niestandardowych
Nazwisko Pisz Opis
customParameters obiekt Tablica JSON parametrów niestandardowych, w której każdy obiekt jest jednym parametrem niestandardowym.
Providername string Nazwa parametru podanego przez rozszerzenie.
providerDataType string Typ danych parametru podanego przez rozszerzenie.
opis string Opis parametru podanego przez rozszerzenie.
measurementUnits string Tablica JSON jednostek dla każdego systemu values jednostkowego obsługiwanego przez rozszerzenie.
unitSystem string System value jednostkowy obsługiwany przez rozszerzenie.
unit string Jednostka miary dla określonego parametru pogody Ex: F dla airTempMax.

Szablon platformy i szablon niestandardowy

Szablon to informacje o mapowaniu udostępniane przez rozszerzenie w celu przekonwertowania danych wyjściowych interfejsu API rozszerzenia (odpowiedź JSON) na format oczekiwany przez menedżera danych dla rolnictwa. Za pomocą tych różnych formatów danych wyjściowych interfejsu API można teraz równomiernie mapować/konwertować na jeden format.

Rozwiązanie szablonu jest jednym z najbardziej skutecznych sposobów analizowania danych wyjściowych JSON dostarczonych przez rozszerzenie. W przypadku rozszerzenia pogody menedżer danych dla rolnictwa oczekuje, że rozszerzenie zostanie napisane przy użyciu szablonu HandleBars. HandleBars to język tworzenia szablonów typu open source z prostymi wyrażeniami.

Uwaga

Zdecydowanie zaleca się wypróbowanie szablonu HandleBars z podanymi przykładami i dowiedz się, jak używać funkcji pomocnika do tworzenia własnej logiki analizowania, jeśli nie została jeszcze udostępniona przez menedżera danych dla rolnictwa.

Na wysokim poziomie jest to sposób działania szablonów, przyjmując odpowiedź interfejsu API jako dane wejściowe i generując dane wyjściowe w formacie oczekiwanym przez menedżera danych dla rolnictwa.

Zrzut ekranu przedstawiający przepływ szablonu.

Jak pokazano na powyższej ilustracji, zweryfikuj szablon względem odpowiedniej odpowiedzi interfejsu API i użyj zweryfikowany szablon w rozszerzeniu. Poniżej znajduje się przykład odpowiedzi interfejsu API oraz odpowiedniej platformy i szablonu niestandardowego.

Przykładowa odpowiedź interfejsu API
{
    "47,-97": {
        "2016-12-15": {
            "overall": {
                "air_temp_avg": {
                    "unit": "F",
                    "value": -3.0
                },
                "air_temp_max": {
                    "unit": "F",
                    "value": 5.0
                },
                "air_temp_min": {
                    "unit": "F",
                    "value": -11.0
                },
                "cloud_cover_avg": {
                    "unit": "%",
                    "value": 26.4
                },
                "descriptors": {
                    "cloud_cover_descriptor": {
                        "code": 21107,
                        "icon": "https://.../cover_partlycloudyday.png",
                        "text": "Increasing Clouds"
                    },
                    "precipitation_descriptor": {
                        "code": 61113,
                        "icon": "https://.../precip_flurries.png",
                        "text": "Slight Chance of Flurries"
                    },
                    "weather_descriptor": {
                        "code": 61113,
                        "icon": "https://.../precip_flurries.png",
                        "text": "Slight Chance of Flurries"
                    },
                    "wind_direction_descriptor": {
                        "code": 51600,
                        "icon": "https://.../direction_sw.png",
                        "text": "Southwest"
                    },
                    "wind_trend_descriptor": {
                        "code": 10500,
                        "icon": "https://.../error_none.png",
                        "text": "None"
                    }
                },
                "dew_point_avg": {
                    "unit": "F",
                    "value": -11.0
                },
                "dew_point_max": {
                    "unit": "F",
                    "value": -4.0
                },
                "dew_point_min": {
                    "unit": "F",
                    "value": -19.0
                },
                "ice_acc_period": {
                    "unit": "in",
                    "value": 0.0
                },
                "liquid_acc_period": {
                    "unit": "in",
                    "value": 0.0
                },
                "long_wave_radiation_avg": {
                    "unit": "W/m^2",
                    "value": 170.0
                },
                "pet_period": {
                    "unit": "in",
                    "value": 0.009
                },
                "precip_acc_period": {
                    "unit": "in",
                    "value": 0.001
                },
                "precip_prob": {
                    "unit": "%",
                    "value": 10.0
                },
                "relative_humidity_avg": {
                    "unit": "%",
                    "value": 68.0
                },
                "relative_humidity_max": {
                    "unit": "%",
                    "value": 77.0
                },
                "relative_humidity_min": {
                    "unit": "%",
                    "value": 61.0
                },
                "short_wave_radiation_avg": {
                    "unit": "W/m^2",
                    "value": 70.0
                },
                "snow_acc_period": {
                    "unit": "in",
                    "value": 0.02
                },
                "sunshine_duration": {
                    "unit": "hours",
                    "value": 6
                },
                "wind_gust_max": {
                    "unit": "n/a",
                    "value": "n/a"
                },
                "wind_speed_2m_avg": {
                    "unit": "mph",
                    "value": 6.0
                },
                "wind_speed_2m_max": {
                    "unit": "mph",
                    "value": 8.0
                },
                "wind_speed_2m_min": {
                    "unit": "mph",
                    "value": 2.0
                },
                "wind_speed_avg": {
                    "unit": "mph",
                    "value": 8.0
                },
                "wind_speed_max": {
                    "unit": "mph",
                    "value": 11.0
                },
                "wind_speed_min": {
                    "unit": "mph",
                    "value": 3.0
                }
            }
        }
    }
}
Przykładowy szablon platformy i szablon niestandardowy dla powyższej odpowiedzi interfejsu API
{
"apiInfos": {
    "platformTemplate": "{ {{#each .}}\"value\": [{{#each .}} {\"cloudCover\": \"{{overall.cloud_cover_avg.value}}\" ,\"dewPoint\": \"{{overall.dew_point_avg.value}}\" ,\"precipitation\": \"{{overall.precip_acc_period.value}}\" ,\"relativeHumidity\": \"{{overall.relative_humidity_avg.value}}\" ,\"dateTime\": \"{{convertDateInYYYYMMDDToDateTime @key}}\",      \"temperature\": \"{{overall.air_temp_avg.value}}\" ,\"windSpeed\": \"{{overall.wind_speed_avg.value}}\" ,   },{{/each}}]{{/each}} }",
    "customTemplate": "{ {{#each .}}\"value\": [{{#each .}} {\"air_temp_max\": \"{{overall.air_temp_max.value}}\",\"air_temp_min\": \"{{overall.air_temp_min.value}}\",\"cloudCoverDescriptor\": \"{{overall.descriptors.cloud_cover_descriptor.text}}\",\"precipitationDescriptor\": \"{{overall.descriptors.precipitation_descriptor.text}}\",\"weatherDescriptor\": \"{{overall.descriptors.weather_descriptor.text}}\",\"windDirectionDescriptor\": \"{{overall.descriptors.wind_direction_descriptor.text}}\",\"windTrendDescriptor\": \"{{overall.descriptors.wind_trend_descriptor.text}}\",\"dewPointMax\": \"{{overall.dew_point_max.value}}\",\"dewPointMin\": \"{{overall.dew_point_min.value}}\",\"iceAccPeriod\": \"{{overall.ice_acc_period.value}}\",\"liquidAccPeriod\": \"{{overall.liquid_acc_period.value}}\",\"longWaveRadiationAvg\": \"{{overall.long_wave_radiation_avg.value}}\",\"petPeriod\": \"{{overall.pet_period.value}}\",\"precipProb\": \"{{overall.precip_prob.value}}\",\"relativeHumidityMax\": \"{{overall.relative_humidity_max.value}}\",\"relativeHumidityMin\": \"{{overall.relative_humidity_min.value}}\",\"shortWaveRadiationAvg\": \"{{overall.short_wave_radiation_avg.value}}\",\"snowAccPeriod\": \"{{overall.snow_acc_period.value}}\",\"sunshineDuration\": \"{{overall.sunshine_duration.value}}\",\"windSpeed2mAvg\": \"{{overall.wind_speed_2m_avg.value}}\",\"windSpeed2mMax\": \"{{overall.wind_speed_2m_max.value}}\",\"windSpeed2mMin\": \"{{overall.wind_speed_2m_min.value}}\",\"windSpeedMax\": \"{{overall.wind_speed_max.value}}\",\"windSpeedMin\": \"{{overall.wind_speed_min.value}}\",},{{/each}}]{{/each}} }"
}
}

Uwaga

Szablon wygenerowany na podstawie paska obsługi jest ciągowany przez dodanie \"<text>\" go, aby był zgodny z formatem JSON.

Funkcje pomocnicze

Funkcje pomocnika są używane przez szablony do wykonywania określonych przekształceń na danych, które nie są obsługiwane natywnie. Poniżej przedstawiono funkcje pomocnicze obsługiwane przez menedżera danych dla rolnictwa.

Przykładowe funkcje pomocnika
Handlebars.registerHelper('splitAndTake', function(title, char, index) {
  var t = title.split(char);
  return t[index];
});
Handlebars.registerHelper('converttime', function(timestamp) {
    return new Date(timestamp);
});
Handlebars.registerHelper('convertunixtime', function(unix_timestamp) {
    return new Date(unix_timestamp * 1000);
});

Jaką akcję wykonują te funkcje pomocnika?

  • SplitAndTake(object valueObject, separator ciągu, indeks int) — ta funkcja służy do dzielenia ciągu (np. "47,-97") na podstawie separatora (np. ",") i przyjmuje element w danym indeksie (np. index=0 daje wartość "47")
  • ConvertDateInFormatToDateTime(object dateObject, format ciągu) — ta funkcja służy do analizowania daty w danym formacie (np. 2016-12-15) do ciągu DateTime.
  • ConvertUnixTimeToDateTime(object unixTimeStamp) — ta funkcja służy do konwertowania sygnatury czasowej systemu unix (np. 1392267600) na ciąg daty/godziny.
  • GetObjectFromListWithKeyValuePair(Tablica listOfObjects, klucz ciągu, wartość ciągu) — biorąc pod uwagę listę obiektów pobiera obiekt na podstawie pary klucz (type) (RAIN). W poniższym przykładzie do wybrania opadów "type": "RAIN" tej funkcji jest używany.
{
"precipitation": [
      {
        "type": "SNOW",
        "amount": 0
      },
      {
        "type": "RAIN",
        "amount": 0.01
      }
    ]
}
  • GetValueFromObject(ciąg jsonString, klucz ciągu) — biorąc pod uwagę obiekt json jako ciąg, pobiera wartość na podstawie klucza.

Uwaga

Jeśli pisane rozszerzenie wymaga dodatkowych funkcji pomocniczych, aby przeanalizować odpowiedź interfejsu API, skontaktuj się z nami, tworząc bilet pomocy technicznej.