Sì, puoi farlo molto facilmente. L'esempio seguente mostra questo.
Preparazione
Per effettuare richieste web allo strumento Geo-Zone Tool utilizzando Python, è necessario:
- Editor o IDE (Integrated Development Environment) per la scrittura dello script
- Python - python.org
- Richieste della libreria Python
- Libreria Python Panda (opzionale)
Per eseguire una richiesta web dello strumento Geo-Zone, le informazioni sono necessarie per lo strumento Geo-Zone. Utilizzando l'esempio della struttura dell'URL della query, questo è spiegato nel seguente articolo:
→
Contolling WebService (API)
Per questo esempio, vengono utilizzate le seguenti informazioni, che è necessario sostituire nello script con le proprie:
- Lingua: it (Tedesco)
- Accesso: john [email protected]
- linea hash: 123456ABCD
- Mappa: wind-DIN-EN-1991-1-4 (carico del vento secondo l'Appendice tedesca EC1)
- Dove: Dlubal, Tiefenbach (sede di Dlubal GmbH)
- Posizione: 49.4353975, 12.5894907 (latitudine, longitudine)
Esegui la richiesta web e leggi i dati
Il seguente script interroga il servizio web del Geo-Zone Tool e documenta i tempi e il contenuto richiesti.
…
#%% Importazione
# Libreria per la lettura del timestamp (libreria standard, opzionale)
Importa datetime come dt
# Esegui libreria tramite richiesta web
Richieste di importazione
#%% Imposta parametri
# URL Webservice Geo-Zone Tool
urlgz = ' https://external-crm.dlubal.com/loadzones/data.aspx'
# Parametri per la query (sostituire con i propri valori)
parz = {
'lingua': 'it',
'accesso': '[email protected]',
' hash': '123456ABCD',
'mappa': 'vento-DIN-EN-1991-1-4',
'posto': 'Dlubal, Tiefenbach, Germania',
'elemento': '49.4353975,12.5894907'
}
# Imposta il tempo per l'annullamento della richiesta
reto=10 #p
Esegui query #%%.
# Timestamp prima del recupero
cdt1 = dt.datetime.now ()
# Query web utilizzando Richieste
rgz = request.get(urlgz, params=pargz, timeout=reto)
# Timestamp dopo il recupero
cdt2 = dt.datetime.now ()
# Durata della query in secondi
dur=(cdt2-cdt1).total_seconds()
# Codice di stato HTTP della richiesta
sgz=rgz.status_code
# Descrizione del contenuto della query
hgz=rgz.headers['Tipo di contenuto']
# Contenuto della richiesta web come testo
tgz = rgz.text
#%% Output della console della richiesta web
txt=[]
txt.append(f"Timestamp: {cdt1}") #Ora AAAA-MM-GG HH:MM:SS.SSSSSS
txt.append(f"Durata: {dur} s") #Durata della query
txt.append(f"Codice di stato: {rgz.status_code}"), codice di stato #HTTP (normale: 200)
txt.append(f"Intestazione: {hgz}"), #descrizione del contenuto (normale: testo/html; set di caratteri=utf-8)
txt.append(f"Testo di output della richiesta:\n{tgz}") #Output dello strumento Geo-Zone Tool
print ('\n'.join(txt))
…
Ciò porta ai seguenti risultati, ad esempio:
Timestamp: 2024-08-22 13:24:32.727006
Durata: 2,214527
Codice di stato: 200
Intestazione: testo/html; setcaratteri=utf-8
Testo della richiesta:
Risultato 1, Risultato 2, Zona, Latitudine, Longitudine, Elevazione, Via, CAP, Città, Norma, Allegato, Nota(i), Note legali
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
Aggiunta: preparazione del contenuto della richiesta web
Il seguente script converte il testo ottenuto dal servizio web Geo-Zone Tool in una forma tabellare. Inoltre, i valori dei risultati sono separati dalle loro unità e infine salvati come file CSV ed Excel.
…
#%% Importazione
# Funzioni di stringa della libreria standard per l'importazione e l'esportazione
da io import StringIO
# Libreria per l'elaborazione dei dati
Importa i panda come pd
#%% Funzioni
di rsep_val_unit(indf, cnstart='Risultato',):
"''"
Separa le colonne del dataframe di richiesta Dlubal Geo-Zone Tool con risultati per valore e unità.
Parametri
----------
indf panda.DataFrame
Dati di input.
Cninizio: stringa, opzionale
Identificatore all'inizio del nome della colonna contenente i risultati
Resi
-------
outdf : panda.DataFrame
Dati di output.
"''"
tmp2 = indf.loc(axis=1)[indf.columns.str.startswith(cnstart)]
tmp3 = pd.DataFrame ()
per i in tmp2.columns:
tmp3[[(i, 'valore'), (i, 'unità')]] = tmp2[i].str.split(
' ', n=1, espandi=Vero)
outdf = pd.concat(
[tmp3, indf.loc(axis=1)[~indf.columns.str.startswith(cnstart)]], axis=1)
ritorno outdf
#%% Esegui conversione
# Converti l'output dello strumento Geo-Zone Tool in un dataframe "tabulare".
dfgz=pd.read_csv(StringIO(rgz.text))
# DataFrame con risultati separati per valore e unità
dfgz_rs=rsep_val_unit(dfgz)
#%% Risparmio
# come file CSV
dfgz_rs.to_csv("Dlubal_ULS_request.csv")
# come file Excel
dfgz_rs.to_excel("Dlubal_ULS_request.xlsx")
#%% Output della conversione della console
print(f"Frame dati originale:\n{dfgz.to_string()}")
print(f"Frame dati manipolato:\n{dfgz_rs.to_string()}")
print("Esempio di output:\n"
+ f"Il primo risultato ha il valore {dfgz_rs.iloc[0,0]}."
+ f" (in {dfgz_rs.iloc[0,1]})")
…
Ciò si traduce nei seguenti risultati, ad esempio:
Dataframe originale:
Risultato 1, Risultato 2, Zona, Latitudine, Longitudine, Elevazione, Via, CAP, Appendice alla norma cittadina Nota(i)
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
Frame di dati manipolato:
(Risultato 1, valore) (Risultato 1, unità) (Risultato 2, valore) (Risultato 2, unità) Zona Latitudine Longitudine Elevazione Via CAP Città Norma Appendice Nota(i)
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
Esempio di output:
Il primo risultato ha il valore 22.5. (m/s)