MaxGit32 commited on
Commit
10f22e0
1 Parent(s): 289125f

Create ApiCall.py

Browse files
Files changed (1) hide show
  1. pages/ApiCall.py +94 -0
pages/ApiCall.py ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Imports ##
2
+ import requests
3
+ import pandas as pd
4
+ from datetime import datetime
5
+ from datetime import timezone
6
+ from Location import *
7
+
8
+ class ApiCall:
9
+ def getData(self):
10
+ ## Api Variablen für NINA
11
+ api_variablen = {
12
+ "hochwasser": "/lhp/mapData",
13
+ "polizei": "/police/mapData",
14
+ "wetter": "/dwd/mapData",
15
+ "katwarn": "/katwarn/mapData",
16
+ "mowas": "/mowas/mapData"
17
+ }
18
+
19
+ # Dataframe Collumns definieren
20
+ columns = ['ID', 'Urgency','Area', 'Titel', 'Event', 'Datum']
21
+
22
+ # NINA Api URLs
23
+ ninaBaseUrl = "https://warnung.bund.de/api31"
24
+ ninaWarningsUrl = "https://nina.api.proxy.bund.dev/api31/warnings/"
25
+
26
+ # Einzelne NINA Warnings abfragen
27
+ def get_api_warning(meldung):
28
+ response = requests.get(ninaBaseUrl+meldung+".json")
29
+ return response.json()
30
+
31
+ # Details zu NINA Warning abfragen: Return DataFrame mit allen Ergebnissen
32
+ def get_api_details(warning):
33
+ n = 0
34
+ response = get_api_warning(warning)
35
+ df = pd.DataFrame(columns=columns)
36
+ # GetDetails for warning
37
+ for responses in response:
38
+ id = responses["id"]
39
+ warningDetails = requests.get(ninaWarningsUrl+id+".json").json()
40
+ meldungsText = warningDetails["info"][0]["headline"]+ ": "+warningDetails["info"][0]["description"]
41
+ warnung = warningDetails["info"][0]["event"]
42
+ start = warningDetails["sent"]
43
+ urgency = warningDetails["info"][0]["urgency"]
44
+ area = warningDetails["info"][0]["area"][0]["areaDesc"]
45
+ d = datetime.fromisoformat(start).astimezone(timezone.utc)
46
+ d.strftime('%Y-%m-%d %H:%M:')
47
+ time = d.replace(tzinfo=None)
48
+ df.loc[n] = [id, urgency, area, meldungsText, warnung, time]
49
+ n = n+1
50
+ return df
51
+
52
+ ## Dataframe to CSV
53
+ def df_to_csv(data, filename):
54
+ data.to_csv(filename+'.csv')
55
+
56
+ # Dataframe definieren
57
+ data = pd.DataFrame(columns=columns)
58
+
59
+ ## API abfragen für alle NINA Variablen/Warnings ##
60
+ for x in api_variablen:
61
+ data_api = get_api_details(api_variablen[x])
62
+ data = pd.concat([data, data_api])
63
+
64
+ # DataFrame df2 erstellen
65
+ data['Area'] = data['Area'].str.split(', ')
66
+ df2 = data.explode('Area')
67
+
68
+ # Neue Zeile mit Plz erstellen
69
+ def berechnung_func(row):
70
+ loca = row['Area']
71
+ ort = loca.replace("Gemeinde", "")
72
+ ort = loca.replace("Stadt", "")
73
+ ort = loca.replace("Mitgliedsgemeinde in Verwaltungsgemeinschaft", "")
74
+
75
+ ###### TODO #####
76
+ # Orte klein schreiben und filtern nach und ... #
77
+ ###### TODO #####
78
+ location = Location(ort.strip()).getPostalCode()
79
+ plz = location.iloc[0]['name']
80
+
81
+ return plz
82
+
83
+ df2['Plz'] = df2.apply(berechnung_func, axis=1)
84
+
85
+ # API Daten in CSV speichern
86
+ df_to_csv(df2, "Data")
87
+
88
+ # Return
89
+ return df2
90
+
91
+ # Testing
92
+ # l1 = ApiCall().getData()
93
+
94
+