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!
Verbindungsfehler. Überprüfen Sie Ihre Internetverbindung. Wetterdaten nicht verfügbar.
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()
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()
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.
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.
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"
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()