We're Hiring!
Whitepaper
Docs
Sign In
@baefthde
·
a year ago
·
a year ago
tool
Wetter
Get
Last Updated
a year ago
Created
a year ago
Tool
v0.1.1
Name
Wetter
Downloads
107+
Saves
0+
Description
Holen Sie sich das Wetter für eine bestimmte Stadt. Erfordert keinen API-Schlüssel.
Tool Code
Show
""" title: Wetter Deutsch author: baefthde author_url: https://github.com/baefthde/ funding_url: https://github.com/baefthde/OpenWebUI_De_Mods/ version: 0.1.1 """ import os import requests import urllib.parse import datetime def get_city_info(city: str): url = f"https://geocoding-api.open-meteo.com/v1/search?name={urllib.parse.quote(city)}&count=1&language=de&format=json" response = requests.get(url) if response.status_code == 200: try: data = response.json()["results"][0] return data["latitude"], data["longitude"], data["timezone"] except (KeyError, IndexError): print(f"City '{city}' not found") return None else: print(f"Daten für die Stadt konnten nicht abgerufen werden '{city}': {response.status_code}") return None wmo_weather_codes = { "0": "Klarer Himmel", "1": "Überwiegend klar, teilweise bewölkt und bewölkt", "2": "Überwiegend klar, teilweise bewölkt und bewölkt", "3": "Überwiegend klar, teilweise bewölkt und bewölkt", "45": "Nebel und Raureifnebel", "48": "Nebel und Raureifnebel", "51": "Nieselregen: Leichte, mäßige und dichte Intensität", "53": "Nieselregen: Leichte, mäßige und dichte Intensität", "55": "Nieselregen: Leichte, mäßige und dichte Intensität", "56": "Eisiger Nieselregen: Leichte und dichte Intensität", "57": "Eisiger Nieselregen: Leichte und dichte Intensität", "61": "Regen: Leichte, mäßige und starke Intensität", "63": "Regen: Leichte, mäßige und starke Intensität", "65": "Regen: Leichte, mäßige und starke Intensität", "66": "Gefrierender Regen: Leichte und starke Intensität", "67": "Gefrierender Regen: Leichte und starke Intensität", "71": "Schneefall: leichte, mäßige und starke Intensität", "73": "Schneefall: leichte, mäßige und starke Intensität", "75": "Schneefall: leichte, mäßige und starke Intensität", "77": "Schneekörner", "80": "Regenschauer: Leicht, mäßig und heftig", "81": "Regenschauer: Leicht, mäßig und heftig", "82": "Regenschauer: Leicht, mäßig und heftig", "85": "Leichte und heftige Schneeschauer", "86": "Leichte und heftige Schneeschauer", "95": "Gewitter: Leicht oder mäßig", "96": "Gewitter mit leichtem und starkem Hagel", "99": "Gewitter mit leichtem und starkem Hagel", } def fetch_weather_data(base_url, params): try: response = requests.get(base_url, params=params) response.raise_for_status() data = response.json() if "error" in data: return f"Fehler beim Abrufen der Wetterdaten: {data['message']}" return data except requests.RequestException as e: return f"Fehler beim Abrufen der Wetterdaten: {str(e)}" def format_date(date_str, date_format="%Y-%m-%dT%H:%M", output_format="%I:%M %p"): dt = datetime.datetime.strptime(date_str, date_format) return dt.strftime(output_format) class Tools: def __init__(self): self.citation = True pass def get_future_weather_week(self, city: str) -> str: """ Holen Sie sich das Wetter für die nächste Woche für eine bestimmte Stadt. :param city: Der Name der Stadt, für die das Wetter ermittelt werden soll. :return: Die aktuellen Wetterinformationen oder eine Fehlermeldung. """ if not city: return """Der Standort wurde vom Benutzer nicht definiert, daher kann das Wetter nicht bestimmt werden.""" city_info = get_city_info(city) if not city_info: return """Fehler beim Abrufen der Wetterdaten""" lat, lng, tmzone = city_info print(f"Latitude: {lat}, Longitude: {lng}, Timezone: {tmzone}") base_url = "https://api.open-meteo.com/v1/forecast" params = { "latitude": lat, "longitude": lng, "daily": [ "weather_code", "temperature_2m_max", "temperature_2m_min", "uv_index_max", "precipitation_probability_max", "wind_speed_10m_max", ], "current": "temperature_2m", "timezone": tmzone, "temperature_unit": "celsius", "wind_speed_unit": "kmh", "precipitation_unit": "mm", "forecast_days": 7, } data = fetch_weather_data(base_url, params) if isinstance(data, str): return data formatted_timestamp = format_date(data["current"]["time"]) data["daily"]["time"][0] += " (Today)" mapped_data = { date: { "weather_description": wmo_weather_codes[ str(data["daily"]["weather_code"][i]) ], "temperature_max_min": f'{data["daily"]["temperature_2m_max"][i]} {data["daily_units"]["temperature_2m_max"]} / {data["daily"]["temperature_2m_min"][i]} {data["daily_units"]["temperature_2m_min"]}', "uv_index_max": f'{data["daily"]["uv_index_max"][i]} {data["daily_units"]["uv_index_max"]}', "precipitation_probability_max": f'{data["daily"]["precipitation_probability_max"][i]} {data["daily_units"]["precipitation_probability_max"]}', "max_wind_speed": f'{data["daily"]["wind_speed_10m_max"][i]} {data["daily_units"]["wind_speed_10m_max"]}', } for i, date in enumerate(data["daily"]["time"]) } return f""" Geben Sie eine Wetterbeschreibung für die nächste Woche an und geben Sie den Zeitpunkt der Daten an ({formatted_timestamp} {data['timezone_abbreviation']} in {city}): Zeigen Sie für jeden dieser Tage ein Standard-Tabellenlayout an: {mapped_data} Fügen Sie am Ende eine Zusammenfassung der Woche in einem Satz hinzu.""" def get_current_weather(self, city: str) -> str: """ Holen Sie sich das aktuelle Wetter für eine bestimmte Stadt. :param city: Der Name der Stadt, für die das Wetter ermittelt werden soll. :return: Die aktuellen Wetterinformationen oder eine Fehlermeldung. """ if not city: return """Der Standort wurde vom Benutzer nicht definiert, daher kann das Wetter nicht bestimmt werden.""" city_info = get_city_info(city) if not city_info: return """Fehler beim Abrufen der Wetterdaten""" lat, lng, tmzone = city_info print(f"Latitude: {lat}, Longitude: {lng}, Timezone: {tmzone}") base_url = "https://api.open-meteo.com/v1/forecast" params = { "latitude": lat, "longitude": lng, "current": [ "temperature_2m", "relative_humidity_2m", "apparent_temperature", "wind_speed_10m", "weather_code", ], "timezone": tmzone, "temperature_unit": "celsius", "wind_speed_unit": "kmh", "precipitation_unit": "mm", "forecast_days": 1, } data = fetch_weather_data(base_url, params) if isinstance(data, str): return data formatted_timestamp = format_date(data["current"]["time"]) data["current"]["weather_code"] = wmo_weather_codes[ str(data["current"]["weather_code"]) ] formatted_data = ", ".join( [ f"{x} ({data['current_units'][x]}) = '{data['current'][x]}'" for x in data["current"].keys() ] ).replace("weather_code", "weather_description") return f""" Geben Sie eine Wetterbeschreibung an und geben Sie den Zeitpunkt der Daten an ({formatted_timestamp} {data['timezone_abbreviation']} in {city}): Fügen Sie diese Daten hinzu: [{formatted_data}] Stellen Sie sicher, dass Sie die tatsächliche Temperatur und die gefühlte Temperatur (apparent_temperature) angeben. Wandeln Sie alle Zahlen in ganze Zahlen um. Halten Sie die Antwort so kurz wie möglich."""
Sponsored by Open WebUI Inc.
We are hiring!
Shape the way humanity engages with
intelligence
.