Partager via


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.

Capture d’écran du flux de modèle.

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.