Puede hacerlo muy fácilmente. El siguiente ejemplo se lo muestra.
Preparación
Las solicitudes web para la herramienta de zonas geográficas (Geo-Zone Tool) utilizando Python requieren:
- Editor o IDE (Entorno de Desarrollo Integrado) para escribir la secuencia de comandos (script)
- Python - python.org
- Solicitudes de la biblioteca de Python
- Pandas de la biblioteca de Python (opcional)
Para ejecutar una solicitud web de la herramienta de zonas geográficas, necesita la información para esta herramienta. Usando el ejemplo de la estructura de la URL de consulta, esto se explica en el siguiente artículo:
→
Servicio web de control (API)
En este ejemplo, se utiliza la siguiente información, que puede reemplazar con la suya propia en la secuencia de comandos:
- Idioma: es (español)
- Inicio de sesión: [email protected]
- Función hash: 123456ABCD
- Mapa: wind-DIN-EN-1991-1-4 (carga de viento según el anexo alemán EC1)
- Ubicación: Dlubal, Tiefenbach (sede central de Dlubal GmbH)
- Posición: 49.4353975, 12.5894907 (Latitud, Longitud)
Ejecutar solicitud web y leer datos
La siguiente secuencia de comandos consulta el servicio web de la herramienta Geo-Zone Tool y documenta los tiempos y el contenido requeridos.
…
#%% Importar
# Biblioteca para leer la marca de tiempo (biblioteca estándar, opcional)
import datetime as dt
# Biblioteca para ejecutar la solicitud web
import requests
#%% Establecer parámetros
# URL Webservice Geo-Zone Tool
urlgz = 'https://external-crm.dlubal.com/loadzones/data.aspx'
# Parámetros para la consulta (reemplazar con sus propios valores)
pargz = {
'language': 'es',
'login': '[email protected]',
'hash': '123456ABCD',
'map': 'wind-DIN-EN-1991-1-4',
'place': 'Dlubal, Tiefenbach',
'position': '49.4353975,12.5894907'
}
# Definir el tiempo para cancelar la solicitud
reto=10 # s
#%% Ejecutar consulta
# Marca de tiempo antes de la recuperación
cdt1 = dt.datetime.now()
# Consulta web mediante solicitudes
rgz = requests.get(urlgz, params=pargz, timeout=reto)
# Marca de tiempo después de la recuperación
cdt2 = dt.datetime.now()
# Duración de la consulta en segundos
dur=(cdt2-cdt1).total_seconds()
# Código de estado HTTP de la solicitud
sgz=rgz.status_code
# Descripción del contenido de la consulta
hgz=rgz.headers['content-type']
# Contenido de la solicitud web como texto
tgz = rgz.text
#%% Salida de la consola de la solicitud web
txt=[]
txt.append(f"Timestamp: {cdt1}") #Hora AAAA-MM-DD HH:MM:SS.SSSSSS
txt.append(f"Duration: {dur} s") # Duración de la consulta
txt.append(f"Status code: {rgz.status_code}") # HTTP status code (normal: 200)
txt.append(f"Header: {hgz}") # Descripción del contenido (normal: text/html; charset=utf-8)
txt.append(f"Text output of request:\n{tgz}") # Salida de la herramienta de zonas geográficas
print('\n'.join(txt))
…
Esto conduce a los siguientes resultados, por ejemplo:
Marca de tiempo: 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/m²,1,49.4353975,12.5894907,520.69384765625,Am Zellweg 2,93464,Tiefenbach,EN 1991-1-4,DIN EN 1991-1-4,,Todos los datos sin garantía
Suplemento: preparación del contenido de la solicitud web
La siguiente secuencia de comandos (script) convierte el texto obtenido del servicio web de la herramienta Geo-Zone en una forma tabular. Además, los valores de los resultados se separan de sus unidades y finalmente se guardan como un archivo CSV y Excel.
…
#%% Importa
# Funciones de cadenas de caracteres de la biblioteca estándar para importar y exportar
from io import StringIO
# Biblioteca para el procesamiento de datos
import pandas as pd
#%% Funciones
def rsep_val_unit(indf, cnstart='Result',):
"""
Separa las columnas del marco de datos de solicitud de la herramienta de Geo-Zone de Dlubal con resultados por valor y unidad.
Parámetros
----------
indf : pandas.DataFrame
Input data.
cnstart: string, optional
Identificador al inicio del nombre de la columna que contiene los resultados.
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
#%% Ejecutar conversión
# Convertir la salida de la herramienta Geo-Zone en un marco de datos "tabular"
dfgz=pd.read_csv(StringIO(rgz.text))
# DataFrame con resultados separados por valor y unidad
dfgz_rs=rsep_val_unit(dfgz)
#%% Guardando
# como archivo CSV
dfgz_rs.to_csv("Dlubal_GZT_request.csv")
# como archivo de Excel
dfgz_rs.to_excel("Dlubal_GZT_request.xlsx")
#%% Salida de consola de la conversión
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]})")
…
Esto da como resultado, por ejemplo, lo siguiente:
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/m² 1 49.435398 12.589491 520.693848 Am Zellweg 2 93464 Tiefenbach EN 1991-1-4 DIN EN 1991-1-4 NaN Todos los datos sin garantía
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/m² 1 49.435398 12.589491 520.693848 Am Zellweg 2 93464 Tiefenbach EN 1991-1-4 DIN EN 1991-1-4 NaN Todos los datos sin garantía
Salida de resultados de ejemplo:
El primer resultado tiene el valor 22,5. (en m/s)