Partilhar via


Como escrever uma extensão meteorológica

Nesta seção, você verá um guia passo a passo para escrever sua própria extensão meteorológica.

O que é uma extensão meteorológica

A extensão meteorológica no Data Manager for Agriculture é um arquivo de manifesto (JSON) que fornece os detalhes completos sobre as APIs e um modelo para cada resposta (saída) das APIs. Portanto, o arquivo de extensão é essencialmente uma estrutura de modelo de API, conforme definido pelo Data Manager for Agriculture, para que ele compreenda as características de entrada (solicitação) e saída (resposta) da API.

Estrutura de extensão meteorológica

Em um alto nível, o arquivo de extensão é um JSON que consiste em duas coisas:

  • Metadados do provedor (objeto JSON)
  • Informações da API (matriz JSON)

Metadados do provedor

É um objeto json que fornece os detalhes nos campos abaixo que são necessários para identificar exclusivamente uma extensão e suas informações de controle de versão. Os detalhes fornecidos nesta seção da extensão são mostrados aos clientes externos no mercado Data Manager for Agriculture. Portanto, extensionId & extensionName (para fácil identificação) e description (para proposta de valor) precisam ser focados no cliente.

Metadados do provedor de exemplo

"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"
  }
Detalhes dos metadados do provedor
Nome Tipo Description
extensãoId string A ID fornecida na forma de nome da organização (Contoso) e serviço (meteorologia) Ex: org.service. extensionId é o identificador exclusivo da extensão e aquele que os usuários estão usando na plataforma Data Manager for Agriculture para interagir com as APIs de extensão
nome_da_extensão string Nome da extensão a ser usada no mercado de extensão do Data Manager for Agriculture.
descrição string Descrição que indica as capacidades e serviços oferecidos pela extensão.
dataCategory string Para extensões meteorológicas, use weather.
farmBeatsSchemaVersion string A versão do arquivo de manifesto no lado do Gerenciador de Dados para Agricultura. Quaisquer atualizações no arquivo de manifesto existente levam a uma nova atualização de versão para este campo.
extensionVersion string A versão do arquivo de extensão. Começando com 1.0. As atualizações do seu arquivo de extensão incrementam este número de versão de acordo com a convenção de atualizações principais ou menores.
supportUrl string Link do site para levantar dúvidas de suporte & FAQs
suporteE-mail string E-mail para enviar as consultas de suporte.

Informações da API

A matriz JSON de informações da API (apiInfos) pode ser dividida nos seguintes elementos estruturais.

  • Metadados da API
  • Parâmetros de autenticação
  • Parâmetros de entrada da API
  • Parâmetros de entrada da API extraídos
  • Parâmetros funcionais
  • Sistema de unidades
  • Plataforma & Parâmetros personalizados
  • Plataforma & Modelo personalizado

Metadados da API

Esta seção consiste em informações básicas sobre a API usada pelo Data Manager for Agriculture para identificar o apiName (chamado pelos usuários explicitamente) e redirecionar a solicitação de API para o direito endpoint com base no apropriado requestType.

Metadados de API de exemplo
"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"
    }
]
Detalhes dos metadados da API
Nome Tipo Description
apiInfos matriz A matriz JSON de objetos, onde cada API é um objeto dentro apiInfos da matriz.
apiName string O nome da API, conforme suportado pela extensão, é o nome exato usando o qual os usuários estariam chamando as APIs de extensão. Por favor, siga a mesma convenção de nomenclatura mencionada na documentação da API.
descrição string Descrição da API
endpoint string Ponto de extremidade da API para o Data Manager for Agriculture chamar o apiName.
requestType [en] string GETou POST tipo de solicitação, conforme suportado apiNamePUT pelo .
isLoadAPI boolean Se a API for de passagem, como os apiName dados meteorológicos atuais, faça essa chave como false. Para todas as APIs de carga (histórico & forecast), mantenha este campo como true. Quando a isLoadAPI chave é false, a resposta da API seria enviada diretamente ao usuário e não seria armazenada no serviço de armazenamento do Gerenciador de Dados para Agricultura.
typeOfData string Atualmente, os valores suportados são Historical e Forecast.
granularidade string Atualmente, os valores suportados são Daily e Hourly.
defaultUnitSystem string Forneça o nome do sistema de unidades padrão suportado apiNamepelo .

Parâmetros de autenticação

Esta seção inclui os parâmetros relacionados à autenticação, conforme suportado apiNamepelo . Como o Data Manager for Agriculture suporta dois tipos de chaves relacionadas a auth (x-ms-farmBeats-data-provider-id & x-ms-farmBeats-data-provider-key) na seção de cabeçalho da API, o arquivo de extensão precisa fornecer explicitamente o nome da chave de suas respetivas chaves de autenticação, apiNameconforme exigido pelo .

As Data Manager for Agriculture recolhe as informações de autenticação através do cabeçalho da API (na API Create Weather Job). O mapeamento de parâmetros de autenticação é feito para garantir que o Data Manager for Agriculture possa passar a chave de acordo com a extensão, conforme necessário.

Parâmetros de autenticação de exemplo
"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"
        }
      ]
]
Detalhes dos parâmetros de autenticação
Nome Tipo Description
authInputParameters matriz Matriz JSON de parâmetros de autenticação, onde cada objeto significa um tipo de autenticação suportada. Use a chave com base no tipo de autenticação suportado pela sua extensão.
farmBeatsAuthMapping string Atualmente, há suporte para dois tipos de chaves relacionadas à autenticação. Para autenticação baseada em chave de API, use apenas x-ms-farmBeats-data-provider-key objeto, enquanto para ID de aplicativo e autenticação baseada em chave de aplicativo use ambos os x-ms-farmBeats-data-provider-id objetos &x-ms-farmBeats-data-provider-key .
nome string Nome da chave de autenticação, conforme suportado apiNamepelo .
isObrigatório boolean Esse nome é um parâmetro necessário para o apiName? Forneça valores verdadeiros ou falsos.
providerDataType string Forneça o tipo de dados do name parâmetro.
descrição string Descrição do Data Manager for Agriculture do que cada um dos farmBeatsAuthMapping meios dentro de cada objeto.
localização string Para onde na API o parâmetro deve name ser enviado. Atualmente, os valores suportados são apiQuery & apiHeader.

Parâmetros de entrada da API

Esta seção fornece os detalhes sobre a assinatura da API (parâmetros de entrada) para chamar com êxito o apiName.

Parâmetros de entrada da API de exemplo
"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"
        },
      ]
]
Detalhes dos parâmetros de entrada da API
Nome Tipo Description
apiInputParameters matriz Matriz JSON de parâmetros de entrada da API, onde cada objeto significa um parâmetro de entrada suportado apiNamepelo .
nome string Nome do parâmetro de entrada, conforme suportado apiNamepelo .
isObrigatório boolean Esse nome é um parâmetro necessário para o apiName? Forneça valores verdadeiros ou falsos.
providerDataType string Forneça o tipo de dados do name parâmetro.
descrição string Forneça uma descrição do que name significa parâmetro.
localização string Para onde na API o parâmetro deve name ser enviado. Atualmente, os valores suportados são apiQuery & apiHeader.

Parâmetros de entrada da API extraídos

Esta seção é para o Data Manager extrair parâmetros de entrada passados na solicitação de API para computação e armazenamento. Neste exemplo, o Data Manager for Agriculture estaria extraindo as informações de localização (latitude e longitude) da solicitação de entrada da API e armazenando-as como parte de cada saída meteorológica no Data Manager for Agriculture.

Portanto, a extensão precisa fornecer um modelo de HandleBars sobre como extrair informações de localização. O exemplo abaixo sugere que a API de extensão coleta informações de localização como "lat" para "latitude" e "lon" para "longitude".

Parâmetros de entrada da API extraídos de amostra
"extractedApiInputParameters": [
        {
          "name": "location",
          "template": "{ \"latitude\": \"{{lat}}\", \"longitude\": \"{{lon}}\"  } "
        }
      ]
Detalhes dos parâmetros de entrada da API extraídos
Nome Tipo Description
extractedApiInputParameters matriz Matriz JSON de funcionalidades de extração, onde cada objeto significa quais informações precisam ser extraídas. Atualmente location é uma dessas extrações.
nome string Nome da extração, atualmente o valor suportado é location .
aninhado string Modelo HandleBars que descreve como as informações de latitude e longitude são coletadas nos parâmetros de entrada da API.

Parâmetros funcionais

Esta seção é dedicada às funcionalidades/capacidades criadas pelo Data Manager for Agriculture. Para a extensão do tempo, o cálculo centróide é uma dessas funcionalidades.

Quando os usuários não fornecem as coordenadas de latitude/longitude, o Data Manager for Agriculture usa a geometria primária do campo (ID passado pelo usuário) para calcular o centróide. As coordenadas centróides calculadas são passadas como latitude e longitude para a extensão (provedor de dados). Assim, para que o Data Manager for Agriculture possa entender o uso das coordenadas de localização, a seção de parâmetros funcionais é usada.

Para que o Data Manager for Agriculture compreenda o apiName uso de latitude e longitude nos parâmetros de entrada, espera-se que a extensão forneça a name chave usada para coletar informações de localização, seguida por um modelo de guidão para sugerir como os valores de latitude e longitude precisam ser passados.

Parâmetros funcionais da amostra
"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}}\" } "
            }
          ]
        }
      ],
]
Detalhes dos parâmetros funcionais
Nome Tipo Description
functionalParameters matriz Matriz JSON de funcionalidades, onde cada objeto significa uma funcionalidade suportada pelo Data Manager for Agriculture. Atualmente CentroidCalculation é uma dessas funcionalidades.
nome string Nome da funcionalidade, atualmente o valor suportado é CentroidCalculation .
descrição string Descrição da funcionalidade do Data Manager for Agriculture.
functionalParameterEntities matriz Matriz JSON de objetos, onde cada objeto é específico para a latitude & longitude.

Sistema de unidades

Esta seção é usada pelo Data Manager for Agriculture para entender os vários tipos de sistemas de unidade suportados pela extensão. Portanto, a extensão precisa fornecer o key nome usado para coletar informações de unidades nas entradas da API e seguido pelos vários nomes de sistema de unidades (Ex: us-std), conforme suportado apiNamepelo .

Sistema de unidades de amostra
"unitSystems": 
    {
        "key": "unitcode",
        "values": [
            "us-std",
            "si-std",
            "us-std-precise",
            "si-std-precise"
            ]
    }
Detalhes do sistema de unidades
Nome Tipo Description
unitSystems objeto Objeto JSON para coletar as informações do sistema da unidade.
key string Nome do parâmetro usado para coletar as informações das unidades na entrada da API.
valores string Lista de nomes de sistema de unidades conforme suportado pela extensão.

Parâmetros personalizados da plataforma e dos parâmetros personalizados

Em cada resposta da API meteorológica, as medidas meteorológicas, que são enviadas como parte da saída (ex: temperatura, ponto de orvalho, etc.) são chamadas de parâmetros.

Assim, quando se trata de parâmetros, o Data Manager for Agriculture suporta internamente o seguinte conjunto de parâmetros e os trata como Platform parameters.

  • cloudCover [en]
  • dateTime
  • Ponto de Orvalho
  • crescendoGrauDia
  • precipitação
  • pressão
  • relativeHumidity
  • soloHumidade
  • soloTemperatura do solo
  • temperatura
  • Visibilidade
  • wetBulbTemperatura
  • windChill
  • windDirection
  • rajada de vento
  • windSpeed

Portanto, qualquer extensão que envie parâmetros meteorológicos, que não se enquadrem nos parâmetros da plataforma, está enviando-os como parte do Custom parameters. A principal diferença entre os parâmetros da plataforma e do cliente é que, os usuários que usam as APIs meteorológicas do Data Manager for Agriculture são capazes de consultar e filtrar nos parâmetros da plataforma (Ex: temperatura > 30) e não em parâmetros personalizados. No entanto, os parâmetros personalizados são enviados como parte da saída da consulta meteorológica.

Nesta seção, a extensão fornece as informações de unidades para cada um dos parâmetros para cada sistema de unidades que é suportado. Usando este Gerenciador de Dados para Agricultura sabe qual é a unidade de medida subjacente para cada parâmetro meteorológico com base nas informações fornecidas nesta seção da extensão.

Nota

  • Para um determinado parâmetro, se as unidades não forem aplicáveis, não mencione as unidades apenas para essas unidades (Ex: weatherDescriptor)
  • Para um parâmetro específico, se as unidades são iguais para todos os sistemas de unidades, então mencione o mesmo em todos os sistemas de unidades. (Ex: cloudCover)
Plataforma de exemplo & parâmetros personalizados
"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"
            }
          ]
        },
]
Detalhes dos parâmetros da plataforma
Nome Tipo Description
platformParameters matriz Matriz JSON de parâmetros de plataforma onde cada objeto é um parâmetro de plataforma.
farmBeatsName string Nome do parâmetro fornecido pelo Data Manager for Agriculture.
farmBeatsDataType string Tipo de dados do parâmetro, conforme fornecido pelo Data Manager for Agriculture.
descrição string Descrição do parâmetro fornecida pelo Data Manager for Agriculture.
medidaUnidades string Matriz JSON de unidades para cada um dos sistemas values de unidades suportados pela extensão.
unitSystem string Sistema value de unidades suportado pela extensão.
unit string Unidade de medida para o parâmetro meteorológico específico Ex: F para ponto de orvalho.
Detalhes dos parâmetros personalizados
Nome Tipo Description
customParameters objeto Matriz JSON de parâmetros personalizados onde cada objeto é um parâmetro personalizado.
nomedoprovedor string Nome do parâmetro conforme fornecido pela extensão.
providerDataType string Tipo de dados do parâmetro, conforme fornecido por extensão.
descrição string Descrição do parâmetro conforme fornecido por extensão.
medidaUnidades string Matriz JSON de unidades para cada um dos sistemas values de unidades suportados pela extensão.
unitSystem string Sistema value de unidades suportado pela extensão.
unit string Unidade de medida para o parâmetro meteorológico específico Ex: F para airTempMax.

Plataforma & modelo personalizado

Modelo é a informação de mapeamento fornecida pela extensão para converter a saída da API de extensão (resposta JSON) para o formato que o Data Manager for Agriculture espera. O uso desses diferentes formatos de saída de API agora pode ser uniformemente mapeado/convertido em um único formato.

A solução de modelo é encontrada como uma das maneiras mais eficazes de analisar a saída JSON fornecida pela extensão. No caso da extensão meteorológica, o Data Manager for Agriculture espera que a extensão seja escrita usando o modelo HandleBars. HandleBars é uma linguagem de modelos de código aberto com expressões simples de usar.

Nota

É altamente recomendável experimentar o modelo HandleBars com os exemplos fornecidos e aprender a usar as funções auxiliares para criar sua própria lógica de análise, se ela ainda não for fornecida pelo Data Manager for Agriculture.

Em um alto nível, é assim que os modelos funcionam, tomando a resposta da API como entrada e gerando a saída no formato esperado pelo Data Manager for Agriculture.

Captura de tela do fluxo do modelo.

Como mostrado na figura acima, valide seu modelo em relação à respetiva resposta da API e use o modelo validado na extensão. Abaixo está um exemplo de uma resposta de API e sua respetiva plataforma e modelo personalizado.

Exemplo de resposta da 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
                }
            }
        }
    }
}
Plataforma de exemplo & Modelo personalizado para a resposta da API acima
{
"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}} }"
}
}

Nota

O modelo gerado a partir das HandleBars é stringified adicionando \"<text>\" para torná-lo compatível com o formato JSON.

Funções de auxílio

As funções auxiliares são usadas pelos modelos para executar transformações específicas nos dados, que não são suportadas nativamente. Aqui estão as funções auxiliares suportadas pelo Data Manager for Agriculture.

Exemplo de funções auxiliares
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);
});

Que ação essas funções auxiliares fazem?

  • SplitAndTake(object valueObject, separador de cadeia de caracteres, int index) - Esta função é usada para dividir uma string (Ex: "47,-97") com base em um separador (Ex: ",") e leva o elemento em determinado índice (Ex: index=0 dá "47")
  • ConvertDateInFormatToDateTime(object dateObject, string format) - Esta função é usada para analisar uma data em determinado formato (Ex: 2016-12-15) para a cadeia de caracteres DateTime.
  • ConvertUnixTimeToDateTime(object unixTimeStamp) - Esta função é usada para converter timestamp unix (Ex: 1392267600) em strings datetime.
  • GetObjectFromListWithKeyValuePair(Array listOfObjects, string key, string value) - Dada uma lista de objetos, ele busca o objeto com base no par de valor de chave (typeRAIN) (). No exemplo abaixo, para escolher a precipitação "type": "RAIN" desta função é usada.
{
"precipitation": [
      {
        "type": "SNOW",
        "amount": 0
      },
      {
        "type": "RAIN",
        "amount": 0.01
      }
    ]
}
  • GetValueFromObject(string jsonString, string key) - Dado um objeto json como string, ele obtém o valor com base na chave.

Nota

Se a extensão que você está escrevendo exigir funções auxiliares adicionais para analisar a resposta da API, entre em contato conosco criando um tíquete de suporte.