Oui, cette opération est très simple. L’exemple suivant vous le montre.
Préparation
Les demandes Web dans l’outil de géolocalisation à l’aide de Python nécessitent :
- Éditeur ou EDI (environnement de développement intégré) pour écrire le script
- Python - Python.org
- Demandes de la bibliothèque Python
- Bibliothèque Python Pandas (facultatif)
Effectuer une demande Web de l’outil de géolocalisation Dlubal nécessite des informations associées à l’outil de géolocalisation Dlubal. Cette opération est expliquée dans l’article suivant à l’aide de l’exemple de la structure URL d’une demande :
→
Contrôle des services Web (API)
Dans cet exemple, les informations suivantes sont utilisées, remplacez-les par les vôtres dans le script :
- Langue : fr (français)
- Connexion : max [email protected]
- Hachage : 123456ABCD
- Carte : vent-DIN-EN-1991-1-4 (charge de vent selon l’Annexe allemande de l’EC1)
- Lieu : Dlubal, Tiefenbach (siège social de Dlubal GmbH)
- Position : 49,4353975, 12,5894907 (Latitude, longitude)
Exécution de la demande Web et lecture des données
Le script suivant effectue la demande au service Web de l’outil de géolocalisation et documente la durée et le contenu.
...
#%% Import
# Bibliothèque pour la lecture des horodatages (bibliothèque standard, facultative)
import datetime as dt
# Bibliothèque pour exécuter la demande Web
import requests
#%% Définir les paramètres
# URL Service Web Outil de géolocalisation
urlgz = 'https://external-crm.dlubal.com/loadzones/data.aspx'
# Paramètres de la demande (remplacer avec vos propres valeurs)
pargz = {
'language': 'fr',
'login': '[email protected]',
'hash': '123456ABCD',
'map': 'wind-DIN-EN-1991-1-4',
'place': 'Dlubal, Tiefenbach',
'position': '49.4353975,12.5894907'
}
# Définir le délai d’annulation de la demande
reto=10 # s
#%% Exécuter la demande
# Horodatage avant annulation
cdt1 = dt.datetime.now()
# Recherche sur le Web via des demandes
rgz = requests.get(urlgz, params=pargz, timeout=reto)
# Horodatage après annulation
cdt2 = dt.datetime.now()
# Durée de la demande en secondes
dur=(cdt2-cdt1).total_seconds()
# Code du statut HTTP de la demande
sgz=rgz.status_code
# Description du contenu de la demande
hgz=rgz.headers['content-type']
# Contenu de la demande Web sous forme de texte
tgz = rgz.text
#%% Sortie de la console de la demande Web
txt=[]
txt.append(f"Timestamp: {cdt1}") # Temps YYYY-MM-DD HH:MM:SS.SSSSSS
txt.append(f"Duration: {dur} s") # Durée de la demande
txt.append(f"Status code: {rgz.status_code}") # HTTP-Statuscode (normal: 200)
txt.append(f"Header: {hgz}") # Description du contenu (normal: text/html; charset=utf-8)
txt.append(f"Text output of request:\n{tgz}") # Sortie de l’outil de géolocalisation
print('\n'.join(txt))
...
On obtient ainsi par exemple les résultats suivants :
Timestamp: 2024-08-22 13:24:32.727006
Duration: 2.214527
Status code: 200
Header: text/html; charset=utf-8
Text output of request:
Result 1,Result 2,Zone,Latitude,Longitude,Elevation,Street,ZIP,City,Standard,Annex,Note(s),Legal notice
22.5 m/s,0.32 kN/m2,1,49.4353975,12.5894907,520.69384765625,Am Zellweg 2,93464,Tiefenbach,EN 1991-1-4,DIN EN 1991-1-4,,Données non garanties
Complément : Préparation du contenu de la demande Web
Le script suivant convertit le texte obtenu à partir du service Web de l’outil de géolocalisation sous forme de tableau. De plus, les valeurs de résultats sont séparées de leurs unités et enregistrées sous forme de fichier CSV et Excel.
...
#%% Import
# Fonctions de chaîne de la bibliothèque standard pour l’importation et l'exportation
from io import StringIO
# Bibliothèque pour le traitement des données
import pandas as pd
#%% Fonctionnalités
def rsep_val_unit(indf, cnstart='Result',):
"""
Seperates Dlubal Geo-Zone-Tool request Dataframe columns with results by value and unit.
Paramètres
----------
indf : pandas.DataFrame
Input data.
cnstart: string, optional
Identifier at start of column name containing results.
Returns
-------
outdf : pandas.DataFrame
Output data.
"""
tmp2 = indf.loc(axis=1)[indf.columns.str.startswith(cnstart)]
tmp3 = pd.DataFrame()
for i in tmp2.columns:
tmp3[[(i, 'value'), (i, 'unit')]] = tmp2[i].str.split(
' ', n=1, expand=True)
outdf = pd.concat(
[tmp3, indf.loc(axis=1)[~indf.columns.str.startswith(cnstart)]], axis=1)
return outdf
#%% Effectuer la conversion
# Convertir la sortie de l’outil de géolocalisation en données « tabulées »
dfgz=pd.read_csv(StringIO(rgz.text))
# Cadre de données avec résultats séparés par valeur et unité
dfgz_rs=rsep_val_unit(dfgz)
#%% Sauvegarde
# sous forme de fichier CSV
dfgz_rs.to_csv("Dlubal_GZT_request.csv")
# comme fichier Excel
dfgz_rs.to_excel("Dlubal_GZT_request.xlsx")
#%% Sortie de la conversion de la console
print(f"Original Dataframe:\n{dfgz.to_string()}")
print(f"Manipulated Dataframe:\n{dfgz_rs.to_string()}")
print("Exemplary Output:\n"
+ f" The first result has the value {dfgz_rs.iloc[0,0]}."
+ f" (in {dfgz_rs.iloc[0,1]})")
...
Par exemple, on obtient les résultats suivants :
Original Dataframe:
Result 1 Result 2 Zone Latitude Longitude Elevation Street ZIP City Standard Annex Note(s) Legal notice
0 22.5 m/s 0.32 kN/m2 1 49.435398 12.589491 520.693848 Am Zellweg 2 93464 Tiefenbach EN 1991-1-4 DIN EN 1991-1-4 NaN Données non garanties
Manipulated Dataframe:
(Result 1, value) (Result 1, unit) (Result 2, value) (Result 2, unit) Zone Latitude Longitude Elevation Street ZIP City Standard Annex Note(s) Legal notice
0 22.5 m/s 0.32 kN/m2 1 49.435398 12.589491 520.693848 Am Zellweg 2 93464 Tiefenbach EN 1991-1-4 DIN EN 1991-1-4 NaN Données non garanties
Exemple de sortie :
Le premier résultat a la valeur 22,5. (m/s)