Verbindungsfehler. Überprüfen Sie Ihre Internetverbindung. Wetterdaten nicht verfügbar.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Joe123
User
Beiträge: 2
Registriert: Mittwoch 10. Januar 2024, 09:51

Hallo, ich habe eine Fage undzwar funktioniert mein Python Script nicht, welches eine Wetterapp sein soll am Ende. Es kommt nur jedes mal die Fehlermeldung "Verbindungsfehler. Überprüfen Sie Ihre Internetverbindung. Wetterdaten nicht verfügbar." auf.
Was kann ich machen oder bzw. was muss ich ändern?
Bild-URL: https://ibb.co/jfxVfgC

P.S.: Da wo der schwarze Strich ist steht der Wetter API-Schlüssel.

Danke im Vorraus!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Bild existiert nicht. Und besser ist auch eh den Code hier im Text einzufuegen, eingefasst in die code-Tags. Das ist der </>-Knopf im vollstaendigen Editor.
Joe123
User
Beiträge: 2
Registriert: Mittwoch 10. Januar 2024, 09:51

import requests
import json
from datetime import datetime

def get_weather(api_key, city):
base_url = "https://api.openweathermap.org/data/2.5 ... appid={API KEY}"
params = {
"q": city,
"appid": api_key,
"units": "metric"
}

try:
response = requests.get(base_url, params=params)
data = response.json()

if response.status_code == 200:
return data
else:
print(f"Error: {data['message']}")
return None
except requests.ConnectionError:
print("Connection error. Check your internet connection.")
return None

def display_weather(weather_data):
if weather_data:
city = weather_data['name']
description = weather_data['weather'][0]['description']
temperature = weather_data['main']['temp']
humidity = weather_data['main']['humidity']
wind_speed = weather_data['wind']['speed']

print(f"Weather in {city}: {description}")
print(f"Temperature: {temperature}°C")
print(f"Humidity: {humidity}%")
print(f"Wind Speed: {wind_speed} m/s")
print(f"Time: {datetime.utcfromtimestamp(weather_data['dt']).strftime('%Y-%m-%d %H:%M:%S')}")
else:
print("Weather data not available.")

def main():
api_key = "API KEY"
city = "Frankfurt"

weather_data = get_weather(api_key, city)
display_weather(weather_data)

if __name__ == "__main__":
main()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das mit den Code tags hat ja schonmal nicht geklappt...

Statt den richtigen Fehler abzufangen, und daraus eine nichtsagende Fehlermeldung zu machen, und None zurueckzugeben, das einfach nur zu Folgefehlern (und einer Verschleierung der eigentlichen Ursache) fuehrt, solltest du das ty/except in get_weather entfernen. Und dann mal anschauen, was die eigentliche Fehlermeldung ist.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nachtrag: auch die restliche Fehlerbehandlung ist unbrauchbar, weil auch wieder einfach None zurueckgegeben wuerd. Ich wuerde eine Exception mit der Message schreiben.
Sirius3
User
Beiträge: 17758
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum wird die Hälfte der GET-Parameter direkt in die URL gepackt und die andere als params übergeben? Welche appid ist dann die richtige? Die Werte für lat und lon dürften auch falsch sein.
Bei requests sollte man immer response.raise_for_status() aufrufen, damit gleich eine korrekte Fehlermeldung generiert wird.
Wenn ich das recht sehe, sollte das ungefähr so sein:

WEATHER_URL = "https://api.openweathermap.org/data/2.5/weather"

Code: Alles auswählen

def get_weather(api_key, city):
    params = {
        "q": city,
        "appid": api_key,
        "units": "metric"
    }
    response = requests.get(WEATHER_URL, params=params)
    response.raise_for_status()
    return response.json()
Antworten