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 | GET ou POST tipo de solicitação, conforme suportado apiName PUT 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 apiName pelo . |
Parâmetros de autenticação
Esta seção inclui os parâmetros relacionados à autenticação, conforme suportado apiName
pelo . 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, apiName
conforme 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 apiName pelo . |
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 apiName pelo . |
nome | string | Nome do parâmetro de entrada, conforme suportado apiName pelo . |
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 apiName
pelo .
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.
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 (
type
RAIN
) (). 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.