6 étapes pour analyser facilement les données d'une source fiable

par Gary Roberts | Mis à jour le : 03/02/2016 | Commentaires : 1

Les thèmes principaux du Blog


Recherche sur le Blog


Langages du blog

English
Français (French)


Abonnez-vous au Blog

Recevez un courriel lorsqu'un nouvel article est posté. Choisissez les sujets qui vous intéressent le plus.


Entrez votre adresse courriel :



Suggérer un article

Y a-t-il un sujet que vous souhaiteriez nous voir aborder ? Laissez-nous un message.

Leave this field empty

analyse d'un programme

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).

Un exemple de analyse syntaxique des données

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 :

KLGU Airport weather data

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 - View page source . Ce que nous voyons ressemble à ceci :

Code XML des données météo de l'aéroport  KLGU

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.

#1 - Déclaration des variables

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

#2 - Utilisez une variable pour stocker les résultats

Nous avons également besoin d'une variable dans lequel nous allons stocker les résultats de l'instruction XMLParse() :


Public noaa_air_temperature_f

#3 - Ajouter des variables pour l'analyse

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

#4 - Ajouter des variables pour la récupération de fichiers

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

#5 - Ajoutez le code pour charger le fichier

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.

#6 - Ajouter une boucle While

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 à noaa_air_temperature_f.

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.

Information pratique

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.


Partagez cet article


A propos de l'auteur

gary roberts Gary Roberts est le responsable produit communications et des produits logiciels chez Campbell Scientific, Inc. Il passe ses journées à rechercher de nouvelles technologies, à trouver des solutions aux problèmes pour les produits phares, à faire du support de second niveau pour les équipements Campbell. La formation et l'expérience de Gary sont en technologie de l'information et informatique. Lorsqu'il n'est pas au travail, il jouit du grand air avec ses Scouts, lutte contre le feu / EMS, pratique la radio en tant qu'amateur, ou la programmation des ordinateurs.

Voir tous les articles de cet auteur.


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.