Tak, można to zrobić bardzo łatwo. Pokazuje to poniższy przykład.
Przygotowanie
Aby przesyłać zapytania internetowe do Geo-Zone Tool za pomocą Pythona, potrzebne są:
- Edytor lub IDE (Integrated Development Environment) do pisania skryptu
- Python - python.org
- Żądania biblioteki Python
- Biblioteka Python Pandas (opcjonalnie)
Aby przesłać zapytanie online o narzędzie do geolokalizacji, wymagane są informacje dla narzędzia do geolokalizacji. Wyjaśnimy to na przykładzie struktury adresu URL w zapytaniu:
→
Controlling WebService (API)
W tym przykładzie wykorzystane zostały następujące informacje, które należy zastąpić w skrypcie własnymi:
- Język: pl (niemiecki)
- Logowanie: jan [email protected]
- linia krzyżująca: 123456ABCD
- Mapa: wiatr-DIN-EN-1991-1-4 (obciążenie wiatrem zgodnie z niemieckim załącznikiem EC1)
- Położenie: Dlubal, Tiefenbach (siedziba Dlubal GmbH)
- Pozycja: 49.4353975, 12.5894907 (szerokość i długość geograficzna)
Wykonaj żądanie sieciowe i odczytaj dane
Poniższy skrypt wysyła zapytanie do usługi sieciowej Narzędzia do geolokalizacji i dokumentuje wymagane czasy oraz zawartość.
...
#%% Import
# Biblioteka do odczytywania znacznika czasu (biblioteka standardowa, opcjonalna)
Importuj datę/czas jako dt
# Uruchom bibliotekę za pomocą żądania internetowego
Żądania importu
#%% Zdefiniuj parametry
# Narzędzie geolokalizacji URL Webservice
urlgz = ' https://external-crm.dlubal.com/loadzones/data.aspx'
# Parametry zapytania (zastąp własnymi wartościami)
parz = {
'język': 'pl',
'logowanie': '[email protected]',
Hash '': '123456ABCD',
'mapa': 'wiatr-DIN-PL-1991-1-4',
'miejsce': 'Dlubal, Tiefenbach, Niemcy',
'przedmiot': '49.4353975,12.5894907'
}
# Ustaw czas anulowania żądania
reto=10 #p
Wykonaj #%% zapytanie
# Znacznik czasu przed pobraniem
cdt1 = dt.datetime.now ()
# Zapytanie sieciowe za pomocą zapytań
rgz = query.get(urlgz, params=pargz, timeout=reto)
# Znacznik czasu po pobraniu
cdt2 = dt.datetime.now ()
# Czas trwania zapytania w sekundach
dur=(cdt2-cdt1).całkowita_sekunda ()
# Kod statusu HTTP żądania
sgz=rgz.status_code
# Opis treści zapytania
hgz=rgz.headers['Content-Type']
# Treść żądania internetowego jako tekst
tgz = rgz.text
#%% Dane wyjściowe konsoli dla żądania internetowego
txt=[]
txt.append(f"Znacznik czasowy: {cdt1}") #Time RRRR-MM-DD GG:MM:SS.SSSSSS
txt.append(f"Czas trwania: {dur} s") #Czas trwania zapytania
txt.append(f"Kod stanu: {rgz.status_code}"), #Kod statusu HTTP (zwykły: 200)
txt.append(f"Nagłówek: {hgz}"), #opis treści (normalnie: text/html; charset=utf-8)
txt.append(f"Tekstowe dane wyjściowe żądania:\n{tgz}") #Dane wyjściowe narzędzia do geolokalizacji
drukuj ('\n'.join(txt))
...
Prowadzi to na przykład do następujących wyników:
- kod.wyjście#
Znacznik czasu: 2024-08-22 13:24:32.727006
Długość: 2,214527
Kod statusu: 200
Nagłówek: text/html; charset=utf-8
Tekst wniosku:
Wynik 1, Wynik 2, Strefa, Szerokość, Długość geograficzna, Wysokość, Ulica, Kod pocztowy, Miasto, Norma, Załącznik, Notatka(i), Nota prawna
22,5 m/s,0,32 kN/m2,1,49.4353975,12.5894907,520.69384765625,Am Zellweg 2,9346,Tiefenbach,EN 1991-1-4,DIN EN 1991-1-4
#/code#
Dodanie: Przygotowywanie treści żądania internetowego
Poniższy skrypt konwertuje tekst uzyskany z usługi sieciowej Geo-Zone Tool do postaci tabelarycznej. Ponadto wartości wyników są oddzielane od ich jednostek i ostatecznie zapisywane jako plik CSV i Excel.
...
#%% Import
# Funkcje ciągów znaków z biblioteki standardowej dla importu i eksportu
z io importuj StringIO
# Biblioteka do przetwarzania danych
Importuj pandy jako pd
#%% Funkcje
of rsep_val_unit(indf, cnstart='Wynik',):
"''"
Oddzielne kolumny Dataframe żądania narzędzia Dlubal Geo-Zone Tool z wynikami według wartości i jednostek.
Parametry
----------
indf pandas.DataFrame
Dane wejściowe.
Cnpoczątek: ciąg znaków, opcjonalny
Identyfikator na początku nazwy kolumny zawierającej wyniki
Zwroty
-------
outff : pandas.DataFrame
Dane wyjściowe.
"''"
tmp2 = indf.loc(oś=1)[indf.columns.str.startswith(cnstart)]
tmp3 = pd.DataFrame ()
for i w tmp2.columns:
tmp3[[(i, 'value'), (i, 'unit')]] = tmp2[i].str.split(
' ', n=1, expand=prawda)
outdf = pd.concat (
[tmp3, indf.loc(axis=1)[~indf.columns.str.startswith(cnstart)]], oś=1)
powrót outdf
#%% Wykonaj konwersję
# Konwertuj dane wyjściowe narzędzia Geo-Zone Tool na "tabelaryczną" ramkę danych
dfgz=pd.read_csv(StringIO(rgz.text))
# Ramka DataFrame z wynikami oddzielonymi od siebie wartością i jednostką
dfgz_rs=rsep_val_unit(dfgz)
#%% Oszczędność
# jako plik CSV
dfgz_rs.to_csv("Wniosek_Dlubal_ULS.csv")
# jako plik Excel
dfgz_rs.to_excel("Wniosek_Dlubal_ULS.xlsx")
#%% Dane wyjściowe konwersji konsoli
print(f"Oryginalna ramka danych:\n{dfgz.to_string()}")
print(f"Manipulowana ramka danych:\n{dfgz_rs.to_string()}")
print("Przykładowe dane wyjściowe:\n"
+ f"Pierwszy wynik ma wartość {dfgz_rs.iloc[0,0]}."
+ f" (in {dfgz_rs.iloc[0,1]})")
...
Daje to na przykład następujące wyniki:
- kod.wyjście#
Oryginalny Dataframe:
- Wynik 1, Wynik 2, Strefa, szerokość, długość geograficzna, wysokość, ulica, kod pocztowy, kod pocztowy, norma miejska Załącznik Uwagi
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
Manipulowana ramka danych:
- (Wynik 1, wartość) (Wynik 1, jednostka) (Wynik 2, wartość) (Wynik 2, jednostka) Strefa Szerokość Długość Wysokość Ulica ZIP Miasto Standard Załącznik Uwagi
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
Przykładowe dane wyjściowe:
- Pierwszy wynik ma wartość 22,5. (m/s)