Guide pratique pour écrire une extension météo
Cette section contient un guide pas à pas expliquant comment écrire votre propre extension météo.
Qu’est-ce qu’une extension météo ?
L’extension météo dans Data Manager for Agriculture est un fichier manifeste (JSON) qui fournit les détails complets sur les API et un modèle pour chaque réponse d’API (sortie). Par conséquent, le fichier d’extension est essentiellement une structure de modèle d’API telle que définie par Data Manager for Agriculture, pour lui permettre de comprendre les caractéristiques d’entrée (requête) et de sortie (réponse) d’API.
Structure de l’extension météo
À un niveau général, le fichier d’extension est un JSON composé de deux éléments :
- Métadonnées du fournisseur (objet JSON)
- Informations sur les API (tableau JSON)
Métadonnées du fournisseur
Il s’agit d’un objet json fournissant les détails des champs ci-dessous qui sont nécessaires pour identifier de manière unique une extension et ses informations de contrôle de version. Les détails fournis dans cette section de l’extension sont présentés aux clients externes de la Place de marché Data Manager for Agriculture. Par conséquent, extensionId
et extensionName
(pour une identification simple) et description
(pour la proposition de valeur) doivent être axés sur le client.
Exemples de métadonnées de fournisseur
"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"
}
Détails des métadonnées de fournisseur
Nom | Type | Description |
---|---|---|
extensionId | string | ID fourni incluant le nom de l’organisation (Contoso) et le service (météo). Par exemple : org.service . extensionId est l’identificateur unique de l’extension, et celui que les utilisateurs utilisent sur la plateforme Data Manager for Agriculture pour interagir avec les API d’extension. |
extensionName | string | Nom de l’extension tel qu’utilisé sur la Place de marché Data Manager for Agriculture. |
description | string | Description indiquant les fonctionnalités et services offerts par l’extension. |
dataCategory | string | Pour les extensions météo, utilisez weather . |
farmBeatsSchemaVersion | string | Version du fichier manifeste côté Data Manager for Agriculture. Toutes les mises à jour du fichier manifeste existant entraînent une mise à jour vers une nouvelle version de ce champ. |
extensionVersion | string | Version du fichier d’extension. À partir de 1.0 . Les mises à jour apportées à votre fichier d’extension incrémentent ce numéro de version en fonction de la convention applicables aux mises à jour majeures et mineures. |
supportUrl | string | Lien du site web où déclencher des requêtes de support et visualiser les questions fréquentes (FAQ). |
supportEmail | string | Adresse e-mail à laquelle envoyer les requêtes de support. |
Informations sur l’API
Le tableau JSON d’informations sur les API (apiInfos
) contient les éléments structurels suivants.
- Métadonnées des API
- Paramètres d’authentification
- Paramètres d’entrée d’API
- Paramètres d’entrée d’API extraits
- Paramètres fonctionnels
- Système d’unités
- Paramètres de plateforme et paramètres personnalisés
- Modèle de plateforme et modèle personnalisé
Métadonnées des API
Cette section fournit des informations de base sur l’API utilisée par Data Manager for Agriculture pour identifier apiName
(appelé explicitement par les utilisateurs) et rediriger la requête d’API vers le endpoint
correct en fonction du requestType
approprié.
Exemples de métadonnées d’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"
}
]
Détails des métadonnées d’API
Nom | Type | Description |
---|---|---|
apiInfos | tableau | Tableau JSON d’objets, où chaque API est un objet dans le tableau apiInfos . |
apiName | string | Nom de l’API tel que pris en charge par l’extension. Il s’agit du nom exact avec lequel les utilisateurs appellent les API d’extension. Suivez la même convention d’affectation de noms que celle mentionnée dans la documentation de votre API. |
description | string | Description de l’API |
endpoint | string | Point de terminaison d’API permettant à Data Manager for Agriculture d’appeler apiName . |
requestType | string | Type de requête GET , POST ou PUT pris en charge par apiName . |
isLoadAPI | booléen | Si apiName est une API directe telle que des données météorologiques actuelles, affectez la valeur false à cette clé. Pour toutes les API de charge (historique et prévision), conservez la valeur true pour ce champ. Lorsque la clé isLoadAPI est false , la réponse de l’API est directement envoyée à l’utilisateur et n’est pas stockée dans le service de stockage Data Manager for Agriculture. |
typeOfData | string | Les valeurs actuellement prises en charge sont Historical et Forecast . |
granularité | string | Les valeurs actuellement prises en charge sont Daily et Hourly . |
defaultUnitSystem | string | Indiquez le nom du système d’unités par défaut pris en charge par apiName . |
Paramètres d’authentification
Cette section prend les paramètres associés à l’authentification, tels que pris en charge par apiName
. Étant donné que Data Manager for Agriculture prend en charge deux types de clés liées à l’authentification (x-ms-farmBeats-data-provider-id
et x-ms-farmBeats-data-provider-key
) dans la section d’en-tête d’API, le fichier d’extension doit fournir explicitement le nom de clé de ses clés d’authentification respectives comme requis par apiName
.
Étant donné que Data Manager for Agriculture collecte les informations d’authentification via l’en-tête d’API (dans l’API de création de travail météo), un mappage des paramètres d’authentification est effectué pour s’assurer que Data Manager for Agriculture peut transmettre la clé à l’extension en fonction des besoins.
Exemples de paramètres d’authentification
"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"
}
]
]
Détails des paramètres d’authentification
Nom | Type | Description |
---|---|---|
authInputParameters | tableau | Tableau JSON de paramètres d’authentification, où chaque objet signifie un type d’authentification pris en charge. Utilisez la clé correspondant au type d’authentification pris en charge par votre extension. |
farmBeatsAuthMapping | string | Actuellement, deux types de clés associées à l’authentification sont pris en charge. Pour l’authentification basée sur la clé API, utilisez uniquement l’objet x-ms-farmBeats-data-provider-key . Pour l’authentification basée sur l’ID d’application et la clé d’application, utilisez les objets x-ms-farmBeats-data-provider-id et x-ms-farmBeats-data-provider-key . |
name | chaîne | Nom de la clé d’authentification prise en charge par apiName . |
isRequired | booléen | Indique si ce nom est un paramètre obligatoire pour apiName. Fournissez une valeur true ou false. |
providerDataType | string | Indiquez le type de données du paramètre name . |
description | string | Description Data Manager for Agriculture de la signification de chacun des farmBeatsAuthMapping au sein de chaque objet. |
location | string | Emplacement dans l’API où le paramètre name doit être envoyé. Les valeurs actuellement prises en charge sont apiQuery et apiHeader . |
Paramètres d’entrée d’API
Cette section fournit les détails sur la signature d’API (paramètres d’entrée) pour appeler correctement apiName
.
Exemples de paramètres d’entrée d’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"
},
]
]
Détails des paramètres d’entrée d’API
Nom | Type | Description |
---|---|---|
apiInputParameters | tableau | Tableau JSON de paramètres d’entrée d’API, où chaque objet signifie un paramètre d’entrée pris en charge par apiName . |
name | chaîne | Nom du paramètre d’entrée pris en charge par apiName . |
isRequired | booléen | Indique si ce nom est un paramètre obligatoire pour apiName. Fournissez une valeur true ou false. |
providerDataType | string | Indiquez le type de données du paramètre name . |
description | string | Fournissez une description de la signification du paramètre name . |
location | string | Emplacement dans l’API où le paramètre name doit être envoyé. Les valeurs actuellement prises en charge sont apiQuery et apiHeader . |
Paramètres d’entrée d’API extraits
Cette section permet à Data Manager d’extraire les paramètres d’entrée transmis dans la requête d’API pour le calcul et le stockage. Dans cet exemple, Data Manager for Agriculture extrait les informations de localisation (latitude et longitude) à partir de la requête d’entrée d’API, et les stocke dans le cadre de chaque sortie météo dans Data Manager for Agriculture.
Par conséquent, l’extension doit fournir un modèle HandleBars indiquant comment extraire les informations de localisation. L’exemple ci-dessous suggère que l’API d’extension collecte les informations de localisation comme "lat"
pour "latitude"
et "lon"
pour "longitude"
.
Exemples de paramètres d’entrée d’API extraits
"extractedApiInputParameters": [
{
"name": "location",
"template": "{ \"latitude\": \"{{lat}}\", \"longitude\": \"{{lon}}\" } "
}
]
Détails des paramètres d’entrée d’API extraits
Nom | Type | Description |
---|---|---|
extractedApiInputParameters | tableau | Tableau JSON de fonctionnalités d’extraction, où chaque objet signifie quelles informations doivent être extraites. Actuellement, location est l’une de ces extractions. |
name | chaîne | Nom de l’extraction. Actuellement, la valeur prise en charge est location . |
template | string | Modèle HandleBars indiquant comment les informations de latitude et de longitude sont collectées dans les paramètres d’entrée d’API. |
Paramètres fonctionnels
Cette section est dédiée aux fonctionnalités/capacités créées par Data Manager for Agriculture. Pour l’extension météo, le calcul centroïde est l’une de ces fonctionnalités.
Lorsque les utilisateurs ne fournissent pas les coordonnées de latitude/longitude, Data Manager for Agriculture utilise la géométrie principale du champ (ID passé par l’utilisateur) pour calculer le centroïde. Les coordonnées calculées du centroïde sont transmises en tant que latitude et longitude à l’extension (fournisseur de données). Par conséquent, pour que Data Manager for Agriculture puisse comprendre l’utilisation des coordonnées de localisation, la section des paramètres fonctionnels est utilisée.
Pour que Data Manager for Agriculture comprenne l’utilisation de la latitude et de la longitude dans les paramètres d’entrée apiName
, l’extension est censée fournir le name
de la clé utilisée pour collecter les informations de localisation, suivi d’un modèle HandleBars afin de déduire la façon dont les valeurs de latitude et de longitude doivent être transmises.
Exemples de paramètres fonctionnels
"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}}\" } "
}
]
}
],
]
Détails des paramètres fonctionnels
Nom | Type | Description |
---|---|---|
functionalParameters | tableau | Tableau JSON de fonctionnalités, où chaque objet signifie une fonctionnalité prise en charge par Data Manager for Agriculture. Actuellement, CentroidCalculation est l’une de ces fonctionnalités. |
name | chaîne | Nom de la fonctionnalité. Actuellement, la valeur prise en charge est CentroidCalculation . |
description | string | Description Data Manager for Agriculture de la fonctionnalité. |
functionalParameterEntities | tableau | Tableau JSON d’objets, où chaque objet est propre à la latitude et à la longitude. |
Système d’unités
Cette section est utilisée par Data Manager for Agriculture pour comprendre les différents types de systèmes d’unités pris en charge par l’extension. Par conséquent, l’extension doit fournir le nom key
utilisé pour collecter les informations sur les unités dans les entrées d’API, suivi des différents noms de systèmes d’unités (par exemple, us-std) pris en charge par apiName
.
Exemples de systèmes d’unités
"unitSystems":
{
"key": "unitcode",
"values": [
"us-std",
"si-std",
"us-std-precise",
"si-std-precise"
]
}
Détails des systèmes d’unités
Nom | Type | Description |
---|---|---|
unitSystems | object | Objet JSON pour collecter les informations sur les système d’unités. |
key | string | Nom du paramètre utilisé pour collecter les informations sur les unités dans l’entrée d’API. |
. | string | Liste de noms de systèmes d’unités pris en charge par l’extension. |
Paramètres de plateforme et paramètres personnalisés
Dans chaque réponse de l’API météo, les mesures météorologiques, qui sont envoyées dans le cadre de la sortie (par exemple, température, point de rosée, etc.), sont appelées en tant que paramètres.
Par conséquent, en matière de paramètres, Data Manager for Agriculture prend en charge en interne l’ensemble des paramètres suivants et les traite comme des Platform parameters
.
- cloudCover
- dateTime
- dewPoint
- growingDegreeDay
- precipitation
- pressure
- relativeHumidity
- soilMoisture
- soilTemperature
- température
- visibility
- wetBulbTemperature
- windChill
- windDirection
- windGust
- windSpeed
Par conséquent, toute extension envoyant des paramètres météorologiques qui ne font pas partie des paramètres de plateforme les envoie dans le cadre des Custom parameters
. La principale différence entre les paramètres de plateforme et les paramètres personnalisés est que les utilisateurs qui utilisent les API météorologiques Data Manager for Agriculture peuvent interroger et filtrer les paramètres de plateforme (par exemple, température > 30), mais pas les paramètres personnalisés. Toutefois, les paramètres personnalisés sont envoyés dans le cadre de la sortie de requête météorologique.
Dans cette section, l’extension fournit les informations sur les unités pour chacun des paramètres pour chaque système d’unités pris en charge. Ainsi, Data Manager for Agriculture sait quelle est l’unité de mesure sous-jacente pour chaque paramètre météorologique, d’après les informations fournies dans cette section de l’extension.
Remarque
- Pour un paramètre particulier, si les unités ne sont pas applicables, ne mentionnez pas les unités pour ce paramètre (par exemple, weatherDescriptor).
- Pour un paramètre particulier, si les unités sont identiques pour tous les systèmes d’unités, mentionnez-les dans tous les systèmes d’unités. (Par exemple, cloudCover.)
Exemples de paramètres de plateforme et de paramètres personnalisés
"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"
}
]
},
]
Détails des paramètres de plateforme
Nom | Type | Description |
---|---|---|
platformParameters | tableau | Tableau JSON de paramètres de plateforme où chaque objet est un paramètre de plateforme. |
farmBeatsName | string | Nom du paramètre tel que fourni par Data Manager for Agriculture. |
farmBeatsDataType | string | Type de données du paramètre tel que fourni par Data Manager for Agriculture. |
description | string | Description du paramètre telle que fournie par Data Manager for Agriculture. |
measurementUnits | string | Tableau JSON d’unités pour chacune des values de systèmes d’unités prises en charge par l’extension. |
unitSystem | string | value de système d’unités pris en charge par l’extension. |
unité | string | Unité de mesure pour le paramètre météo spécifique. Par exemple, F pour dewPoint. |
Détails des paramètres personnalisés
Nom | Type | Description |
---|---|---|
customParameters | object | Tableau JSON de paramètres personnalisés où chaque objet est un paramètre personnalisé. |
providerName | string | Nom du paramètre tel que fourni par l’extension. |
providerDataType | string | Type de données du paramètre tel que fourni par l’extension. |
description | string | Description du paramètre telle que fournie par l’extension. |
measurementUnits | string | Tableau JSON d’unités pour chacune des values de systèmes d’unités prises en charge par l’extension. |
unitSystem | string | value de système d’unités pris en charge par l’extension. |
unité | string | Unité de mesure pour le paramètre météo spécifique. Par exemple, F pour airTempMax. |
Modèle de plateforme et modèle personnalisé
Le modèle correspond aux informations de mappage fournies par l’extension pour convertir la sortie de l’API d’extension (réponse JSON) au format attendu par Data Manager for Agriculture. Ainsi, différents formats de sortie d’API peuvent désormais être mappé/convertis uniformément en un format unique.
La solution consistant à utiliser un modèle est l’une des méthodes les plus efficaces pour analyser la sortie JSON fournie par l’extension. Dans le cas de l’extension météo, Data Manager for Agriculture s’attend à ce que l’extension soit écrite à l’aide du modèle HandleBars. HandleBars est un langage de création de modèles open source avec des expressions simples à utiliser.
Remarque
Nous vous recommandons vivement d’essayer le modèle HandleBars avec les exemples fournis, et d’apprendre à utiliser les fonctions d’assistance pour générer votre propre logique d’analyse si elle n’est pas déjà fournie par Data Manager for Agriculture.
À un niveau général, c’est comme ceci que les modèles fonctionnent ; en prenant la réponse de l’API comme entrée et en générant la sortie dans le format attendu par Data Manager for Agriculture.
Comme indiqué dans la figure ci-dessus, validez votre modèle par rapport à la réponse d’API correspondante et utilisez le modèle validé dans l’extension. Vous trouverez ci-dessous un exemple de réponse d’API, et le modèle de plateforme et le modèle personnalisé correspondants.
Exemple de réponse d’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
}
}
}
}
}
Exemple de modèle de plateforme et de modèle personnalisé pour la réponse d’API ci-dessus
{
"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}} }"
}
}
Remarque
Le modèle généré à partir de HandleBars est converti en chaîne en ajoutant \"<text>\"
afin de le rendre compatible avec le format JSON.
Fonctions d’assistance
Des fonctions d’assistance sont utilisées par les modèles pour effectuer une transformation spécifique sur les données, qui n’est pas prise en charge en mode natif. Voici les fonctions d’assistance prises en charge par Data Manager for Agriculture.
Exemples de fonctions d’assistance
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 font ces fonctions d’assistance ?
- SplitAndTake(object valueObject, string separator, int index) : cette fonction est utilisée pour fractionner une chaîne (par exemple, « 47,-97 ») en fonction d’un séparateur (par exemple, « , ») et prendre l’élément à l’index donné (par exemple, index=0 donne « 47 »)
- ConvertDateInFormatToDateTime(object dateObject, string format) : cette fonction est utilisée pour analyser une date dans un format donné (par exemple, 2016-12-15) en chaîne DateTime.
- ConvertUnixTimeToDateTime(object unixTimeStamp) : cette fonction est utilisée pour convertir l’horodatage unix (par exemple, 1392267600) en chaîne datetime.
- GetObjectFromListWithKeyValuePair(Array listOfObjects, string key, string value) : étant donné une liste d’objets, cette fonction extrait l’objet d’après la paire clé (
type
)-valeur (RAIN
). Dans l’exemple ci-dessous, pour sélectionner les précipitations de"type": "RAIN"
, cette fonction est utilisée.
{
"precipitation": [
{
"type": "SNOW",
"amount": 0
},
{
"type": "RAIN",
"amount": 0.01
}
]
}
- GetValueFromObject(string jsonString, string key) : étant donné un objet json sous forme de chaîne, cette fonction obtient la valeur d’après la clé.
Remarque
Si l’extension que vous écrivez nécessite des fonctions d’assistance supplémentaires pour analyser la réponse de l’API, contactez-nous en créant un ticket de support.