File size: 3,475 Bytes
ffce005
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from functools import partial
from geopy.geocoders import Nominatim # Openstreatmaps 
import requests
import json
import pandas as pd 

class Location: 
    def __init__(self, location): 
        self.location = location
        self.df = self.jsonToDf()
        
    def jsonToDf(self):
        plz = pd.read_json('plz.json')
        plz["plz_name"] = plz['plz_name'].str.replace('\u00f6','Ö')
        plz["plz_name"] = plz['plz_name'].str.replace('\u00fc','ü')
        plz["plz_name"] = plz['plz_name'].str.replace('\u00df','ß')
        plz["plz_name"] = plz['plz_name'].str.replace('\u00e4','ä')
        plz["plz_name"] = plz['plz_name'].str.replace('\u00c4','Ä')
        plz["plz_name"] = plz['plz_name'].str.replace('\u00d6','Ö')
        plz["plz_name"] = plz['plz_name'].str.replace('\u00dc','Ü')
        plz["plz_name"] = plz['plz_name'].str.replace('Halle/ Saale','Halle (Saale)')
        
        mask = plz['plz_name'] == "Halle"
        plz.loc[mask, 'plz_name'] = "Halle (Weserbergland)"
        
        return plz
        
    def getPostalJson(self):
        # Postleitzahlen per API erzahlten 
        url = 'https://public.opendatasoft.com/api/explore/v2.1/catalog/datasets/georef-germany-postleitzahl/exports/json?select=plz_name%2C%20name&lang=de&timezone=UTC&use_labels=false&epsg=4326'  # Ersetze dies durch die tatsächliche API-URL
        response = requests.get(url)

        # Überprüfen, ob die Anfrage erfolgreich war (Status-Code 200)
        if response.status_code == 200:
            # JSON-Antwort aus der API
            json_data = response.json()

            # Speichern der JSON-Antwort in einer Datei
            with open('plz.json', 'w') as file:
                json.dump(json_data, file)

            print('Daten erfolgreich in "api_response.json" gespeichert.')
            return json_data
        else:
            print('Fehler bei der API-Anfrage.')
    
    ## return Postleitzahl
    def getPostalCode(self):
        try: 
            geolocator = Nominatim(user_agent="LocationApiPruefen")
            geocode = partial(geolocator.geocode, language="de")
            postleitzahl = geocode(self.location).raw.get("display_name")
            x_split = postleitzahl.split(", ")
            post_sub = x_split[4]
            columns = ['plz_name', 'name']
            df = pd.DataFrame(columns=columns)
            df.loc[0] = [self.location, post_sub]
            
            if post_sub.isdigit(): 
                return df
            else: 
                raise Exception 
        except: 
            # Dataframe PLZ durchsuchen
            gesuchter_wert = self.location
            ergebnisse = self.df[self.df['plz_name'] == gesuchter_wert]
            
            if ergebnisse.empty:
                gesuchter_wert_erw = gesuchter_wert+ " "
                ergebnisse = self.df[self.df['plz_name'].str.contains(gesuchter_wert_erw)]
                
                if ergebnisse.empty:
                   neue_zeile = pd.Series({'plz_name': "", 'name': ''})
                   #ergebnisse = ergebnisse.append(neue_zeile, ignore_index=True)
                   ergebnisse = pd.concat([neue_zeile, ergebnisse], ignore_index=True)
                   #ergebnisse = ergebnisse.drop(1)
                   #print(ergebnisse)
                   return ergebnisse 
            #print(ergebnisse)
            return ergebnisse
            

## Testing 
#l1 = Location("Wartenberg").getPostalCode()
#print(type(l1))