diff --git a/.gitignore b/.gitignore index 6ddbc03..fe65b4a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ angebote_traegerMail_iteration/dict_*.json +openAI_validate_data/2024-12 gpt-4o-mini/*.csv diff --git a/README.md b/README.md index c2af996..c571348 100644 --- a/README.md +++ b/README.md @@ -7,4 +7,12 @@ This script is related to FileMaker script "OptOut: Mailadressen sammeln - simpl The Python3 script generates two JSON files from that. One holds the relation `{ trägermail1@test.de : [ "Angebot A", "Angebot B" ] }` and the other `{ angebotsmail@test.de : [ "Angebot A", "Angebot C" ] }`. This input can be used to generate mails for the "opt-out method" (people can delete their offer from the MUT-ATLAS). ### Output -tbd \ No newline at end of file +tbd + +## openAI_validate_data +### Processing +These scripts aim to see what ChatGPT can do to validate your offers (Angebote). + +## scrape_GoogleMaps +### Processing +Scenario: 'find offers (Angebote) with "Psychotherpeut" in a radius of 1000m around these coordinates..' \ No newline at end of file diff --git a/angebote_traegerMail_iteration/iterate.py b/angebote_traegerMail_iteration/saveMailToJsonDicts.py similarity index 100% rename from angebote_traegerMail_iteration/iterate.py rename to angebote_traegerMail_iteration/saveMailToJsonDicts.py diff --git a/openAI_validate_data/2024-12 gpt-4o-mini/request.py b/openAI_validate_data/2024-12 gpt-4o-mini/request.py new file mode 100644 index 0000000..05b1fa7 --- /dev/null +++ b/openAI_validate_data/2024-12 gpt-4o-mini/request.py @@ -0,0 +1,28 @@ +from openai import OpenAI +client = OpenAI() + +completion = client.chat.completions.create( + model="gpt-4o-mini", + messages=[ + {"role": "system", "content": "You are a helpful assistant."}, + { + "role": "user", + "content": """Ich hab hier 5 unvalidierte Daten zu psychologischen Einrichtungen oder Angeboten, die ich gerne validiert und ggf. korrigiert hätte. Folgende Probleme hab ich mit den Daten: + Einige "Angebote" sind eher Träger und kein Angebot. Bitte recherchiere das eigentliche Angebot, die korrekten Adresse zu ebenselbigem und gib eine spezifische URL zum Angebot mit, gerne im Feld "Homepage". + Das Ergebnis kannst du gerne als CSV (wie den Input) zurückgeben. Hier die Daten: + + Name,Firma,Straße,StraßeNrEingabe,StraßeEingabe,PLZ,Ort,Bundesland,DRV Gebiet,Landkreis,Telefon,Themen,Telefon mobil,Email,HomePage,URL_AngebotKurz,Themen + Regionaldienste des Jugendamtes Lichtenberg,Bezirksamt Lichtenberg,Große Leege-Straße 103,103,Große Leege-Straße,13055,Berlin,Berlin,Berlin-Brandenburg,,030 90296-7031,,030 90296-7031,juginfo@lichtenberg.berlin.de,,http://www.berlin.de, + Allgemeiner Sozialer Dienst (ASD) Jugendamt Rhein-Pfalz-Kreis Lageplan,Rhein-Pfalz-Kreis,Europaplatz 5,5,Europaplatz,67063,Ludwigshafen,Rheinland-Pfalz,Rheinland-Pfalz,,0621 5909-1400,,0621 5909-1400,silvia.burre@rheinpfalzkreis.de,,http://www.rhein-pfalz-kreis.de, + Drogenhilfe Stadt Ludwigshafen Lageplan,Stadt Ludwigshafen am Rhein,Goethestraße 12,12,Goethestraße,67063,Ludwigshafen,Rheinland-Pfalz,Rheinland-Pfalz,,0621 504-2870,,0621 504-2870,drogenhilfe@ludwigshafen.de,,http://www.ludwigshafen.de, + Plan B gGmbH Jugend-und Drogenberatungsstelle,Plan B gGmbH,Schießhausstraße 6,6,Schießhausstraße,75173,Pforzheim,Baden-Württemberg,Baden-Württemberg,,07231 92277-0,,07231 92277-0,beratung@planb-pf.de,,http://www.planb-pf.de, + Queer Space Pforzheim Beratung von LSBTTIQA-Menschen,AIDS-Hilfe Pforzheim e.V.,Goldschmiedeschulstraße 6,6,Goldschmiedeschulstraße,75173,Pforzheim,Baden-Württemberg,Baden-Württemberg,,07231 44 1110,,07231 44 1110,queerspace@ah-pforzheim.de,,http://www.ah-pforzheim.de/queer-space/, + """ + } + ] +) + +response = completion.choices[0].message + +print("Response: \n'"+ response.content + "'") +print("\n\nFull response: ", response) \ No newline at end of file diff --git a/openAI_validate_data/2025-07/request.py b/openAI_validate_data/2025-07/request.py new file mode 100644 index 0000000..c64620e --- /dev/null +++ b/openAI_validate_data/2025-07/request.py @@ -0,0 +1,35 @@ +from openai import OpenAI +from copy import deepcopy +client = OpenAI() + +startQuestion = """Ich hab hier unvalidierte Daten zu psychologischen Einrichtungen oder Angeboten, die ich gerne validiert und ggf. korrigiert hätte. +Checke bitte, ob die Angebote die korrekte Adresse und Webseite haben. Ggf kannst du ja noch passende Themen in Kürze auflisten. +Sag mir, was du an den Daten ändern würdest. Halte dich kurz. + +Name,Firma,Straße,StraßeNrEingabe,StraßeEingabe,PLZ,Ort,Bundesland,DRV Gebiet,Landkreis,Telefon,Themen,Telefon mobil,Email,HomePage,Themen +Regionaldienste des Jugendamtes Lichtenberg,Bezirksamt Lichtenberg,Große Leege-Straße 103,103,Große Leege-Straße,13055,Berlin,Berlin,Berlin-Brandenburg,,030 90296-7031,,030 90296-7031,juginfo@lichtenberg.berlin.de,,http://www.berlin.de, +""" +choice = "start" + +while (choice != ""): + choice2 = input("Press 'Enter' to call ChatGPT now.. ") + if (choice2 == ""): + completion = client.chat.completions.create( + model="gpt-4o-mini", + messages=[ + {"role": "system", "content": "You are a helpful assistant."}, + { + "role": "user", + "content": startQuestion if choice == "start" else choice + } + ] + ) + + response = completion.choices[0].message + + print("Response: \n'"+ response.content + "'") + del response.content + + print("\nEnveloped response content: ", response) + choice = input("Ask something or leave blank to exit.. ").strip() +print("Ok ciao") diff --git a/scrape_GoogleMaps/places.csv b/scrape_GoogleMaps/places.csv new file mode 100644 index 0000000..1780eaa --- /dev/null +++ b/scrape_GoogleMaps/places.csv @@ -0,0 +1,21 @@ +Name,Adresse,Bewertung,Anzahl Bewertungen,Typ +Frau Dr. med. Susanne Schmitz,"Kölner Str. 79, Leverkusen",4.6,10,"doctor, health, point_of_interest, establishment" +Dipl. Psych. Erika Toussaint (geb. Benz),"Uhlandstraße 1, Leverkusen",5.0,1,"health, point_of_interest, establishment" +marianna ozerova,"Bonner Str. 4, Leverkusen",3.9,11,"health, point_of_interest, establishment" +Invictus Physiotherapie Leverkusen,"An d. Fuchskuhl 9b, Leverkusen",4.8,221,"physiotherapist, health, point_of_interest, establishment" +Dr. med. Werner Ott Facharzt für Psychosomat. Med. und Psychotherapie,"Kölner Str. 79, Leverkusen",4.3,14,"doctor, health, point_of_interest, establishment" +Physiotherapie am Fürstenbergplatz,"Fürstenbergpl. 4, Leverkusen",5.0,82,"health, point_of_interest, establishment" +Physiotherapie Leverkusen-Quettingen - PhysioSport 360°,"Quettinger Str. 220, Leverkusen",4.9,111,"physiotherapist, health, point_of_interest, establishment" +Dipl. Psych. Marlet Sina Klingauf,"Kölner Str. 79, Leverkusen",3.0,4,"health, point_of_interest, establishment" +FZKL - Fortbildungszentrum Köln Leverkusen,"Entenpfuhl 25, Leverkusen",4.8,13,"physiotherapist, health, point_of_interest, establishment" +Dr. Diana Enke Psychotherapeutische Praxis,"Kölner Str. 20A, Leverkusen",0.0,0,"health, point_of_interest, establishment" +Psychotherapeutische Praxis für Kinder und Jugendliche | Svenja Lessing | Leverkusen,"Kölner Str. 20A, Leverkusen",0.0,0,"health, point_of_interest, establishment" +Psychotherapie Valerie Stein,"Gisbert-Cremer-Straße 69, Leverkusen",0.0,0,"health, point_of_interest, establishment" +Herr Dr. Khalil Al-Jaar,"Kölner Str. 36, Leverkusen",4.4,25,"health, point_of_interest, establishment" +Praxis für Psychologische Psychotherapie,"Wilhelmstraße 12, Leverkusen",5.0,1,"health, point_of_interest, establishment" +Privatpraxis Psychotherapie,"Talstraße 49, Leverkusen",0.0,0,"health, point_of_interest, establishment" +Dipl.-Psych. Claudia Droste-Schmeißer,"Birkenbergstraße 14, Leverkusen",5.0,1,"health, point_of_interest, establishment" +Praxis Stock Ergotherapie | Physiotherapie | Logopädie,"Kölner Str. 60, Leverkusen",4.2,17,"health, point_of_interest, establishment" +Frau Dipl.-Psych. Monika Gfrörer,"Birkenbergstraße 14, Leverkusen",5.0,1,"health, point_of_interest, establishment" +"Dr. Dipl.-Psych. Trientje Helbing, Praxis für Verhaltenstherapie","Kölner Str. 126, Leverkusen",5.0,5,"health, point_of_interest, establishment" +Praxisgemeinschaft Ingrid Broch & Gisela Jachertz,"Düsseldorfer Str. 14, Leverkusen",5.0,2,"health, point_of_interest, establishment" diff --git a/scrape_GoogleMaps/scrape.py b/scrape_GoogleMaps/scrape.py new file mode 100644 index 0000000..5a8ea65 --- /dev/null +++ b/scrape_GoogleMaps/scrape.py @@ -0,0 +1,66 @@ +import requests +import pandas as pd + +# Google API Key (ersetzen durch deinen Schlüssel) +API_KEY = 'ENTER HERE' + +# Base URL für die Google Places API +BASE_URL = "https://maps.googleapis.com/maps/api/place/nearbysearch/json" + +def search_places(query, location, radius=5000): + """ + Sucht Orte basierend auf Query und Standort. + + :param query: Suchbegriff (z. B. 'Therapeuten') + :param location: Standort als 'latitude,longitude' + :param radius: Suchradius in Metern (Standard: 5000) + :return: Liste von Orten + """ + params = { + 'key': API_KEY, + 'keyword': query, + 'location': location, + 'radius': radius + } + response = requests.get(BASE_URL, params=params, verify=False) + if response.status_code == 200: + return response.json().get('results', []) + else: + print(f"Error: {response.status_code}, {response.text}") + return [] + +def save_to_csv(data, filename): + """ + Speichert die Daten in einer CSV-Datei. + + :param data: Liste von Orten + :param filename: Name der CSV-Datei + """ + df = pd.DataFrame(data) + df.to_csv(filename, index=False) + print(f"Datei gespeichert: {filename}") + +def main(): + query = input("Gib den Suchbegriff ein (z. B. 'Therapeuten'): ") + location = input("Gib den Standort ein (z. B. '52.5200,13.4050' für Berlin): ") + radius = int(input("Gib den Suchradius in Metern ein (z. B. 5000): ")) + + places = search_places(query, location, radius) + + if places: + formatted_data = [ + { + 'Name': place.get('name'), + 'Adresse': place.get('vicinity'), + 'Bewertung': place.get('rating', 'N/A'), + 'Anzahl Bewertungen': place.get('user_ratings_total', 'N/A'), + 'Typ': ', '.join(place.get('types', [])) + } + for place in places + ] + save_to_csv(formatted_data, 'places.csv') + else: + print("Keine Ergebnisse gefunden.") + +if __name__ == "__main__": + main() \ No newline at end of file