par Gary Roberts | Mis à jour le : 03/02/2016 | Commentaires : 1
Est-il utile d'inclure des données venant d'un site externe digne de confiance à vos propres données ? Si vous avez la permission d'utiliser une autre source de données gratuitement ou par un accord, comment pouvez-vous extraire facilement les données spécifiques que vous souhaitez utiliser, sans faire beaucoup de ligne de code ?
Dans cet article, je vais vous montrer, comment vous pouvez utiliser une instruction du langage de programmation CRBasic pour récolter des données provenant d'une source sécurisée, tout en évitant beaucoup de temps et d'efforts. Par exemple, vous pouvez extraire des données à partir d'un site connue. Les données peuvent être stockées sur un serveur du gouvernement ou d'une autre source, sans frais et être offertes en plusieurs formats différents, y compris dans le langage eXtensible Markup Language (XML).
Pour mettre en évidence les six étapes analyse syntaxique, je vais vous guider à travers un exemple. Dans cet exemple, nous avons besoin de la température en degrés Fahrenheit d'une station météorologique NOAA d'un aéroport (KLGU). Nous voulons utiliser ces données de température avec les données d'une station météo qui est installée à quelques kilomètres.
Les données de la station météo de l'aéroport NOAA sont hébergées sur les serveurs Web de la NOAA et elles sont disponibles pour un usage public. En faisant une recherche rapide sur leur site web, nous avons trouvé les données de la station météorologique de l'aéroport ici : http://w1.weather.gov/xml/current_obs/KLGU.xml. Les données horaires, y compris la température, est affiché en format XML similaire à cela :
Pour voir le code XML réel, nous devons cliquer sur le bouton droit de la sourie sur la page Web et sélectionner à partir du menu Code source de la page -
Il y a beaucoup de données dans le code XML. Si nous utilisions les méthodes normales de programmation, il nous faudrait un certain temps pour écrire le code. Heureusement, CRBasic a une instruction XMLParse() que nous pouvons utiliser pour nous épargner quelques heures d'écriture.
Pour commencer avec l'instruction XMLParse() , nous avons besoin de déclarer quelques variables (constantes). L'instruction XMLParse() utilise ces variables pour savoir où elles se trouvent dans le fichier XML, en cas d'erreur et si l'analyse syntaxique est terminée .
'Valeurs de retour pour l'analyse du XML. Nous les utilisons pour garder une trace de l'endroit où nous sommes et si nous avons des erreurs. Const XML_TOO_MANY_NAMESPACES = -3 ' Trop de déclarations d'espace de noms rencontrés lors de l'analyse d'un élément Const XML_NESTED_TOO_DEEP = -2 ' Trop d'éléments XML imbriqués Const XML_SYNTAX_ERROR_OR_FAILED = -1 ' Erreur de syntaxe XML ou erreur sur XMLParse Const XML_UNRECOGNIZED_ERROR_CONDITION = 0 ' Condition d'erreur inconnue Const XML_START = 1 ' Début de l'élément XML Const XML_ATTRIBUTE_READ = 2 ' Attribut XML lu. Const XML_END_OF_ELEMENT = 3 ' Fin de l'élément XML Const XML_END_OF_DOCUMENT = 4 ' Fin du document XML rencontré. ' Paramètres max de XMLParse afin de ne pas utiliser toute la mémoire de la centrale de mesure Const XML_MAX_DEPTH = 10 Const XML_MAX_NAMESPACES = 3
Nous avons également besoin d'une variable dans lequel nous allons stocker les résultats de l'instruction XMLParse() :
Public noaa_air_temperature_f
En outre, nous avons besoin d'un peu plus de variables pour l'instruction XMLParse() à utiliser alors qu'il fait l'analyse du fichier XML. Nous pouvons utiliser l'instruction de déclaration de variables Dim, mais nous allons utiliser les variables Public pour nous aider à dépanner.
Public xml_attribute_name As String Public xml_attribute_namespace As String * 100 Public xml_data As String * 3000 Public xml_element_name As String * 50 Public xml_element_namespace As String * 30 Public xml_response_code Public xml_state Public xml_value As String * 50
Pour récupérer le fichier XML à partir du serveur, nous allons utiliser l'instruction HTTPGet(). Pour cette instruction, nous avons besoin d'ajouter un couple de variables :
Public xml_http_header As String * 300 Public xml_http_socket As Long
Pour obtenir le fichier XML à partir du serveur et le télécharger dans la variable xml_data, nous devons ajouter le code suivant quelque part dans une analyse de séquence lente :
xml_http_header = "" xml_http_socket = HTTPGet("http://w1.weather.gov/xml/current_obs/KLGU.xml", xml_data, xml_http_header) TCPClose(xml_http_socket) 'Fermez votre connexion au serveur Web.
Pour laisser l'instruction XMLParse() fonctionner, nous ajoutons une boucle while (en utilisant l'instruction While/Wend ) et nous définissons la première xml_response_code.
xml_response_code = XML_START 'Tells XMLParse that we are just starting. While ((xml_response_code > XML_UNRECOGNIZED_ERROR_CONDITION) AND (xml_response_code <> XML_END_OF_DOCUMENT)) xml_response_code = XMLParse(xml_data, xml_value, xml_attribute_name, xml_attribute_namespace, _ xml_element_name, xml_element_namespace, XML_MAX_DEPTH, XML_MAX_NAMESPACES) If xml_response_code = XML_END_OF_ELEMENT AND xml_element_name = "temp_f" Then noaa_air_temperature_f = xml_value EndIf Wend
Pendant que l'instruction XMLParse() tourne dans la boucle while, il est à la recherche de l'élément nommé temp_f. Lorsque l'instruction XMLParse() trouve cet élément, il affecte la valeur à
Nous avons maintenant la valeur que nous voulions (la température en Fahrenheit) d'une station de la NOAA, et nous pouvons l'inclure avec nos propres données de station météo.
Si vous avez une centrale d'acquisition de mesure CR1000, CR3000, CR800, CR850 ou CR6 avec une interface Ethernet, vous pouvez télécharger la copie de ce programme.
Recommandé pour vous : Pour de plus amples explications des différentes parties d'un fichier XML, consultez le site “XML Tree” cours en ligne sur le XML par w3schools.com. Ce site web pour développeur a des tutoriels de base, qui détaillent les différents éléments, namespaces et les attributs qui peuvent être utilisés en langage XML. |
J'espère que cet article vous a été utile. Si vous avez des questions, n'hésiter pas à les poster ci-dessous.
Commentaires
OnAMission | 03/29/2016 at 10:09 AM
Thanks for the great blog post! These advanced guides are very useful so please keep them comming!
Please log in or register to comment.