Cómo escribir una extensión meteorológica
En esta sección, verá una guía paso a paso para escribir su propia extensión meteorológica.
¿Qué es una extensión meteorológica?
Una extensión meteorológica en Data Manager for Agriculture es un archivo de manifiesto (JSON) que proporciona los detalles completos de las API y una plantilla para cada respuesta de API (salida). Por lo tanto, el archivo de extensión es básicamente una estructura de plantilla de API tal como se define en Data Manager for Agriculture, para que comprenda las características de entrada (solicitud) y salida (respuesta) de API.
Estructura de las extensiones meteorológicas
En un nivel alto, el archivo de extensión es un JSON que consta de dos cosas:
- Metadatos del proveedor (objeto JSON)
- Información de API (matriz JSON)
Metadatos del proveedor
Es un objeto JSON que proporciona los detalles de los campos siguientes necesarios para identificar de manera única una extensión y su información de control de versiones. Los detalles proporcionados en esta sección de la extensión se muestran a los clientes externos en el marketplace de Data Manager for Agriculture. Por lo tanto, extensionId
y extensionName
(para facilitar la identificación) y description
(para la propuesta de valor) deben centrarse en el cliente.
Metadatos del proveedor de ejemplo
"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"
}
Detalles de los metadatos del proveedor
Nombre | Escribir | Descripción |
---|---|---|
extensionId | string | El id. proporcionado en la forma de nombre de la organización (Contoso) y servicio (clima) Por ejemplo: org.service . extensionId es el identificador único de la extensión y el que usan los usuarios en la plataforma de Data Manager for Agriculture para interactuar con las API de extensión. |
extensionName | string | Nombre de la extensión que se va a usar en el marketplace de extensiones de Data Manager for Agriculture. |
descripción | string | Descripción que indica las funcionalidades y los servicios ofrecidos por la extensión. |
dataCategory | string | Para las extensiones meteorológicas, use weather . |
farmBeatsSchemaVersion | string | Versión del archivo de manifiesto en el lado de Data Manager for Agriculture. Cualquier actualización del archivo de manifiesto existente conduce a una nueva actualización de versión en este campo. |
extensionVersion | string | Versión del archivo de extensión. A partir de 1.0 . Las actualizaciones de su archivo de extensión incrementan este número de versión según la convención de las actualizaciones principales y secundarias. |
supportUrl | string | Vínculo al sitio web para generar consultas de soporte técnico y preguntas más frecuentes |
supportEmail | string | Correo electrónico para enviar en las consultas de soporte técnico. |
Información de API
La matriz JSON de información de la API (apiInfos
) se puede dividir aún más en los siguientes elementos estructurales.
- Metadatos de API
- Parámetros de autenticación
- Parámetros de entrada de la API
- Parámetros de entrada de la API extraídos
- Parámetros funcionales
- Sistema de unidades
- Parámetros de plataforma y personalizados
- Plantilla de plataforma y personalizada
Metadatos de API
Esta sección consta de información básica sobre la API que usa Data Manager for Agriculture para identificar apiName
(llamada explícitamente por los usuarios) y redirigir la solicitud de API al endpoint
correcto en función del requestType
adecuado.
Metadatos de API de ejemplo
"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"
}
]
Detalles de metadatos de la API
Nombre | Escribir | Descripción |
---|---|---|
apiInfos | array | Matriz de objetos JSON, donde cada API es un objeto dentro de la matriz apiInfos . |
apiName | string | El nombre de la API como lo admite la extensión es el nombre exacto con el que los usuarios llamarían a las API de extensión. Siga la misma convención de nomenclatura que se mencionó en la documentación de la API. |
descripción | string | Descripción de API |
endpoint | string | Punto de conexión de API para que Data Manager for Agriculture llame a apiName . |
requestType | string | GET o POST o el tipo de solicitud PUT como lo admite apiName . |
isLoadAPI | boolean | Si apiName es una API de paso a través como los datos meteorológicos actuales, convierta esta clave como false . Para todas las API de carga (histórico y previsión), mantenga este campo como true . Cuando la clave isLoadAPI es false , la respuesta de la API se enviaría directamente al usuario y no se almacenaría en el servicio de almacenamiento de Data Manager for Agriculture. |
typeOfData | string | Los valores admitidos actualmente son Historical y Forecast . |
granularidad | string | Los valores admitidos actualmente son Daily y Hourly . |
defaultUnitSystem | string | Proporcione el nombre del sistema de unidades predeterminado admitido por apiName . |
Parámetros de autenticación
En esta sección se toman los parámetros relacionados con la autenticación como compatibles con apiName
. Como Data Manager for Agriculture admite dos tipos de claves relacionadas con la autenticación (x-ms-farmBeats-data-provider-id
y x-ms-farmBeats-data-provider-key
) en la sección de encabezado de API, el archivo de extensión debe proporcionar explícitamente el nombre de clave de sus respectivas claves de autenticación según sea necesario para apiName
.
Como Data Manager for Agriculture recopila la información de autenticación a través del encabezado de API (en la API crear trabajo de clima). La asignación de parámetros de autenticación se realiza para asegurarse de que Data Manager for Agriculture pueda pasar la clave en consecuencia a la extensión según sea necesario.
Parámetros de autenticación de ejemplo
"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"
}
]
]
Detalles de los parámetros de autenticación
Nombre | Escribir | Descripción |
---|---|---|
authInputParameters | array | Matriz JSON de los parámetros de autenticación, donde cada objeto significa un tipo de autenticación admitido. Use la clave en función del tipo de autenticación admitido por la extensión. |
farmBeatsAuthMapping | string | Actualmente se admiten dos tipos de claves relacionadas con la autenticación. En el caso de la autenticación basada en claves de API, use solo el objeto x-ms-farmBeats-data-provider-key , mientras que para la autenticación basada en id. de la aplicación y clave de la aplicación, use ambos objetos x-ms-farmBeats-data-provider-id y x-ms-farmBeats-data-provider-key . |
nombre | string | Nombre de la clave de autenticación compatible con apiName . |
isRequired | boolean | ¿Este nombre es un parámetro necesario para apiName? Proporcione valores true o false. |
providerDataType | string | Proporcione el tipo de datos del parámetro name . |
descripción | string | Descripción de Data Manager for Agriculture de qué significa cada una de las farmBeatsAuthMapping dentro de cada objeto. |
ubicación | string | En qué parte de la API debe enviarse el parámetro name . Los valores admitidos actualmente son apiQuery y apiHeader . |
Parámetros de entrada de la API
En esta sección se proporcionan los detalles sobre la signatura de API (parámetros de entrada) para llamar correctamente a apiName
.
Parámetros de entrada de la API de ejemplo
"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"
},
]
]
Detalles de los parámetros de entrada de la API
Nombre | Escribir | Descripción |
---|---|---|
apiInputParameters | array | Matriz JSON de parámetros de entrada de API, donde cada objeto significa un parámetro de entrada admitido por apiName . |
nombre | string | Nombre del parámetro de entrada como lo admite apiName . |
isRequired | boolean | ¿Este nombre es un parámetro necesario para apiName? Proporcione valores true o false. |
providerDataType | string | Proporcione el tipo de datos del parámetro name . |
descripción | string | Proporcione una descripción de lo que significa el parámetro name . |
ubicación | string | En qué parte de la API debe enviarse el parámetro name . Los valores admitidos actualmente son apiQuery y apiHeader . |
Parámetros de entrada de la API extraídos
Esta sección sirve para que Data Manager extraiga los parámetros de entrada pasados en la solicitud de API para el cálculo y el almacenamiento. En este ejemplo, Data Manager for Agriculture extraería la información de ubicación (latitud y longitud) de la solicitud de entrada de API y la almacenaría como parte de cada salida meteorológica en Data Manager for Agriculture.
Por lo tanto, la extensión debe proporcionar una plantilla HandleBars sobre cómo extraer información de ubicación. En el ejemplo siguiente se sugiere que la API de extensión recopila información de ubicación como "lat"
para "latitude"
y "lon"
para "longitude"
.
Parámetros de entrada de API extraídos de ejemplo
"extractedApiInputParameters": [
{
"name": "location",
"template": "{ \"latitude\": \"{{lat}}\", \"longitude\": \"{{lon}}\" } "
}
]
Detalles de los parámetros de entrada de API extraídos
Nombre | Escribir | Descripción |
---|---|---|
extractedApiInputParameters | array | Matriz JSON de las funcionalidades de extracción, donde cada objeto indica qué información se debe extraer. Actualmente, location es una extracción de este tipo. |
nombre | string | Nombre de la extracción, actualmente el valor admitido es location . |
template | string | Plantilla HandleBars que muestra cómo se recopila la información de latitud y longitud en los parámetros de entrada de la API. |
Parámetros funcionales
Esta sección está dedicada a las funcionalidades y capacidades creadas por Data Manager for Agriculture. Para la extensión meteorológica, el cálculo del centroide es una de estas funciones.
Cuando los usuarios no proporcionan las coordenadas de latitud y longitud, Data Manager for Agriculture usa la geometría principal del campo (id. pasado por el usuario) para calcular el centroide. Las coordenadas calculadas del centroide se pasan como la latitud y la longitud a la extensión (proveedor de datos). Por lo tanto, para que Data Manager for Agriculture pueda comprender el uso de las coordenadas de ubicación, se usa la sección de parámetros funcionales.
Para que Data Manager for Agriculture comprenda el uso de latitudes y longitudes en los parámetros de entrada de apiName
, se espera que la extensión proporcione el name
de la clave usada para recopilar información de ubicación seguida de una plantilla HandleBar para implicar cómo se deben pasar los valores de latitud y longitud.
Parámetros funcionales de ejemplo
"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}}\" } "
}
]
}
],
]
Detalles de los parámetros funcionales
Nombre | Escribir | Descripción |
---|---|---|
functionalParameters | array | Matriz de funcionalidades JSON, donde cada objeto significa una funcionalidad compatible con Data Manager for Agriculture. Actualmente, CentroidCalculation es una de estas funcionalidades. |
nombre | string | Nombre de la funcionalidad, actualmente el valor admitido es CentroidCalculation . |
descripción | string | Descripción de la funcionalidad de Data Manager for Agriculture. |
functionalParameterEntities | array | Matriz de objetos JSON, donde cada objeto es específico de la latitud y la longitud. |
Sistema de unidades
Data Manager for Agriculture usa esta sección para comprender los distintos tipos de sistemas de unidades admitidos por la extensión. Por lo tanto, la extensión debe proporcionar el nombre de la key
usado para recopilar información de unidades en las entradas de la API y seguido de los distintos nombres de los sistemas de unidades (por ejemplo: us-std) como los admite apiName
.
Sistema de unidades de ejemplo
"unitSystems":
{
"key": "unitcode",
"values": [
"us-std",
"si-std",
"us-std-precise",
"si-std-precise"
]
}
Detalles del sistema de unidades
Nombre | Escribir | Descripción |
---|---|---|
unitSystems | objeto | Objeto JSON para recopilar la información del sistema de unidades. |
key | string | Nombre del parámetro usado para recopilar la información de las unidades en la entrada de la API. |
valores | string | Lista de nombres de los sistemas de unidades compatibles con la extensión. |
Parámetros de plataforma y personalizados
En cada respuesta de la API meteorológica, las medidas meteorológicas, que se envían como parte de la salida (por ejemplo, temperatura, punto de rocío, etc.) ,se denominan parámetros.
Por lo tanto, cuando se trata de parámetros, Data Manager for Agriculture admite internamente el siguiente conjunto de parámetros y los trata como Platform parameters
.
- cloudCover
- dateTime
- dewPoint
- growingDegreeDay
- precipitation
- presión
- relativeHumidity
- soilMoisture
- soilTemperature
- temperatura
- visibility
- wetBulbTemperature
- windChill
- windDirection
- windGust
- windSpeed
Por lo tanto, cualquier extensión que envíe parámetros meteorológicos, que no se encuentren en los parámetros de la plataforma, los envía como parte de los Custom parameters
. La diferencia clave entre los parámetros de plataforma y de cliente es que los usuarios que usan las API meteorológicas de Data Manager for Agriculture pueden consultar y filtrar los parámetros de plataforma (por ejemplo: temperatura > 30) pero no los parámetros personalizados. Sin embargo, los parámetros personalizados se envían como parte de la salida de la consulta meteorológica.
En esta sección, la extensión proporciona la información de unidades para cada uno de los parámetros de cada sistema de unidades que se admite. El uso de Data Manager for Agriculture sabe cuál es la unidad de medición subyacente para cada parámetro meteorológico en función de la información proporcionada en esta sección de la extensión.
Nota:
- Para un parámetro determinado, si las unidades no son aplicables, no mencione las unidades para este (por ejemplo: weatherDescriptor)
- Para un parámetro determinado, si las unidades son iguales para todos los sistemas de unidades, mencione lo mismo en todos los sistemas de unidades. (Por ejemplo, cloudCover)
Parámetro de plataforma y personalizados de ejemplo
"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"
}
]
},
]
Detalles de los parámetros de plataforma
Nombre | Escribir | Descripción |
---|---|---|
platformParameters | array | Matriz JSON de los parámetros de plataforma donde cada objeto es un parámetro de plataforma. |
farmBeatsName | string | Nombre del parámetro tal como lo proporciona Data Manager for Agriculture. |
farmBeatsDataType | string | Tipo de datos del parámetro tal como lo proporciona Data Manager for Agriculture. |
descripción | string | Descripción del parámetro tal como lo proporciona Data Manager for Agriculture. |
measurementUnits | string | Matriz de unidades JSON para cada uno de los values del sistema de unidades admitidos por la extensión. |
unitSystem | string | value del sistema de unidades compatible con la extensión. |
unidad | string | Unidad de medida para el parámetro meteorológico específico Por ejemplo: F para dewPoint. |
Detalles de los parámetros personalizados
Nombre | Escribir | Descripción |
---|---|---|
customParameters | objeto | Matriz de parámetros personalizados JSON donde cada objeto es un parámetro personalizado. |
providerName | string | Nombre del parámetro tal como lo proporciona la extensión. |
providerDataType | string | Tipo de datos del parámetro tal como lo proporciona la extensión. |
descripción | string | Descripción del parámetro tal como lo proporciona la extensión. |
measurementUnits | string | Matriz de unidades JSON para cada uno de los values del sistema de unidades admitidos por la extensión. |
unitSystem | string | value del sistema de unidades compatible con la extensión. |
unidad | string | Unidad de medida para el parámetro meteorológico específico. Por ejemplo: F para airTempMax. |
Plantilla de plataforma y personalizada
La plantilla es la información de asignación proporcionada por la extensión para convertir la salida de la API de extensión (respuesta JSON) al formato que espera Data Manager for Agriculture. El uso de estos diferentes formatos de salida de API ahora se puede asignar o convertir uniformemente a un solo formato.
Se considera que la solución de plantilla es una de las maneras más eficaces de analizar la salida JSON proporcionada por la extensión. En el caso de una extensión meteorológica, Data Manager for Agriculture espera que la extensión se escriba mediante la plantilla HandleBars. HandleBars es un lenguaje de plantillas de código abierto con expresiones sencillas de usar.
Nota:
Se recomienda probar la plantilla HandleBars con los ejemplos proporcionados y aprender a usar las funciones auxiliares para crear su propia lógica de análisis si Data Manager for Agriculture no la proporciona aún.
En un nivel alto, esta es la manera en que funcionan las plantillas: toman la respuesta de la API como entrada y generan la salida en el formato esperado por Data Manager for Agriculture.
Como se muestra en la ilustración anterior, valide la plantilla con la respuesta de API correspondiente y use la plantilla validada en la extensión. A continuación se muestra un ejemplo de una respuesta de API y su plantilla de plataforma y personalizada respectivas.
Respuesta de API de ejemplo
{
"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
}
}
}
}
}
Plantilla de plataforma y personalizada de ejemplo para la respuesta de API anterior
{
"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:
La plantilla generada a partir de HandleBars se encadena agregando \"<text>\"
para que sea compatible con el formato JSON.
Funciones auxiliares
Las plantillas usan las funciones auxiliares para realizar una transformación específica en los datos, que no se admiten de manera nativa. Estas son las funciones auxiliares compatibles con Data Manager for Agriculture.
Funciones auxiliares de ejemplo
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);
});
¿Qué acciones realizan estas funciones auxiliares?
- SplitAndTake(object valueObject, string separator, int index): esta función se usa para dividir una cadena (por ejemplo: "47,-97") en función de un separador (por ejemplo, ",") y toma el elemento en el índice determinado (por ejemplo, index=0 da "47")
- ConvertDateInFormatToDateTime(object dateObject, string format): esta función se usa para analizar una fecha en un formato dado (por ejemplo: 2016-12-15) a una cadena DateTime.
- ConvertUnixTimeToDateTime(object unixTimeStamp): esta función se usa para convertir la marca de tiempo de unix (por ejemplo, 1392267600) en una cadena datetime.
- GetObjectFromListWithKeyValuePair(Array listOfObjects, string key, string value): en función de una lista de objetos, captura el objeto en función del par clave (
type
) valor (RAIN
). En el ejemplo siguiente, se usa esta función para elegir la precipitación de"type": "RAIN"
.
{
"precipitation": [
{
"type": "SNOW",
"amount": 0
},
{
"type": "RAIN",
"amount": 0.01
}
]
}
- GetValueFromObject(string jsonString, string key): en función de un objeto JSON como cadena, obtiene el valor en función de la clave.
Nota:
Si la extensión que está escribiendo requiere funciones auxiliares adicionales para analizar la respuesta de la API, póngase en contacto con nosotros mediante la creación de una incidencia de soporte técnico.