Open-Meteo API Kullanarak Anlık Hava Durumu Bilgisi Alma -umut aşık

Open-Meteo API ile Şehir Bazlı Hava Durumu Sorgulama Uygulaması
Giriş
Günümüzde hava durumu uygulamaları, günlük yaşantımızda önemli bir yer tutmaktadır. Bu çalışmada, Open-Meteo API kullanılarak gerçek zamanlı hava durumu bilgisi (sıcaklık ve rüzgar hızı) sunan basit ve etkileşimli bir Python uygulaması geliştirilmiştir. Kullanıcıdan şehir ismi alınıp, bu şehir için sıcaklık ve rüzgar verileri gösterilmekte ve kullanıcı programı kapatmadan başka şehirlerin bilgilerini de sorgulayabilmektedir.
Kullanılan Teknolojiler ve Kütüphaneler
-
Python 3
-
requests
kütüphanesi (API ile veri alışverişi için) -
OpenStreetMap Nominatim API (şehir ismini koordinata çevirme)
-
Open-Meteo API (hava durumu verisi sağlama)
Programın Çalışma Mantığı
-
Kullanıcıdan şehir adı alınır.
-
Şehir adı, Nominatim API kullanılarak enlem ve boylam (latitude, longitude) bilgisine dönüştürülür.
-
Bu koordinatlar ile Open-Meteo API sorgulanır.
-
Kullanıcıya, anlık sıcaklık ve rüzgar hızı bilgileri gösterilir.
-
Kullanıcı programı kapatmadan başka şehirleri sorgulamaya devam edebilir.
-
Eğer girilen şehir adı geçersizse, kullanıcıya "şehir bulunamadı" uyarısı verilir.
Kod Açıklaması
Kod iki ana işlev içerir:
1. get_coordinates(city)
:
-
Kullanıcının girdiği şehir adını alır.
-
OpenStreetMap Nominatim servisine istek göndererek şehrin koordinatlarını alır.
-
Eğer şehir bulunamazsa,
None
döner.
2. get_weather(lat, lon)
:
-
Şehrin koordinatlarını alır.
-
Open-Meteo API'den sıcaklık ve rüzgar hızı bilgilerini çeker.
-
JSON verisi çözümlenir ve sonuç kullanıcıya sunulur.
Ana Döngü:
-
Kullanıcıdan tekrar tekrar şehir adı alınır.
-
q
girilene kadar program çalışmaya devam eder.
Hatalar ve Kontroller
-
Geçersiz şehir adı girildiğinde kullanıcı bilgilendirilir.
-
API verisi eksikse kullanıcıya uygun hata mesajı gösterilir.
-
Program, kullanıcı dostu bir şekilde yazılmıştır ve sürekli etkileşimlidir.
import requests
def get_coordinates(city):
# Nominatim API ile şehir adından koordinat bulma
url = f"https://nominatim.openstreetmap.org/search?format=json&q={city}"
response = requests.get(url)
data = response.json()
if data:
lat = data[0]['lat']
lon = data[0]['lon']
return float(lat), float(lon)
else:
return None, None
def get_weather(lat, lon):
# Open-Meteo API'den sıcaklık ve rüzgar verisi çekme
url = (
f"https://api.open-meteo.com/v1/forecast"
f"?latitude={lat}&longitude={lon}"
f"¤t=temperature_2m,wind_speed_10m"
)
response = requests.get(url)
data = response.json()
try:
temperature = data["current"]["temperature_2m"]
wind_speed = data["current"]["wind_speed_10m"]
return temperature, wind_speed
except KeyError:
return None, None
print(" Hava Durumu Sorgulama Programına Hoş Geldiniz!\nÇıkmak için 'q' yazın.")
while True:
city = input("\nŞehir adı girin: ").strip()
if city.lower() == 'q':
print("Programdan çıkılıyor...")
break
lat, lon = get_coordinates(city)
if lat is None or lon is None:
print(" Şehir veya konum bulunamadı.")
continue
temperature, wind_speed = get_weather(lat, lon)
if temperature is not None:
print(f" Sıcaklık: {temperature}°C")
print(f" Rüzgar Hızı: {wind_speed} km/s")
else:
print(" Hava durumu verisi alınamadı.")