Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce bilgisayarınızda Python 3.12 veya daha yeni bir sürümün kurulu olduğundan emin olmalısınız. API isteklerini yönetmek için Python dünyasının standart haline gelmiş olan requests kütüphanesini kullanacağız. Ayrıca, hava durumu verilerini alabilmek için ücretsiz bir API anahtarına (API Key) ihtiyacınız olacak.
Ön hazırlık adımları şunlardır:
- Python'ın yüklü olduğunu
python --versionkomutu ile doğrulayın. - Proje klasörünüzü oluşturun ve sanal ortam (virtual environment) kurun.
pip install requestskomutu ile gerekli kütüphaneyi yükleyin.- OpenWeatherMap veya benzeri bir servisten ücretsiz bir API anahtarı alın.
Sanal ortam kullanmak, projeye özel bağımlılıkları sisteminizden izole etmenizi sağlar. Bu, farklı projeler arasında kütüphane çakışmalarını önlemek için profesyonel bir zorunluluktur.
API İsteği Göndermek İçin Temel Kurulum
İlk adımda, API'ya basit bir GET isteği göndererek sunucudan gelen yanıtı inceleyeceğiz. RESTful API'lar, genellikle HTTP protokolü üzerinden JSON formatında veri döndürür. Aşağıdaki kod bloğu, belirli bir şehir için hava durumu verisini çekmek üzere tasarlanmıştır.
import requests
def hava_durumunu_getir(sehir, api_key):
url = f"http://api.openweathermap.org/data/2.5/weather?q={sehir}&appid={api_key}&units=metric"
yanit = requests.get(url)
return yanit.json()
# Kullanım örneği
api_anahtarim = "BURAYA_KENDI_ANAHTARINIZI_YAZIN"
sonuc = hava_durumunu_getir("Istanbul", api_anahtarim)
print(sonuc)
Bu kod bloğunda requests.get() fonksiyonu ile API uç noktasına (endpoint) bir istek gönderiyoruz. units=metric parametresi, sıcaklığın Celsius cinsinden gelmesini sağlar. Dönen veri .json() metodu ile Python sözlüğüne (dictionary) dönüştürülür.
API Verilerini İşleme ve Hata Yönetimi
API'dan gelen veriler her zaman beklediğimiz gibi olmayabilir. Örneğin, hatalı bir şehir ismi girildiğinde veya API anahtarınız geçersiz olduğunda sunucu hata kodu döndürür. Sağlam bir yazılım, bu durumları try-except blokları ve HTTP durum kodları ile kontrol etmelidir.
import requests
def hava_durumu_sorgula(sehir, api_key):
url = f"http://api.openweathermap.org/data/2.5/weather?q={sehir}&appid={api_key}&units=metric"
try:
yanit = requests.get(url, timeout=5)
yanit.raise_for_status() # Hata kodlarını kontrol eder (4xx, 5xx)
veri = yanit.json()
print(f"{sehir} için sıcaklık: {veri['main']['temp']}°C")
except requests.exceptions.HTTPError as e:
print(f"HTTP Hatası oluştu: {e}")
except Exception as e:
print(f"Bir hata meydana geldi: {e}")
# Fonksiyonu çağırma
hava_durumu_sorgula("Ankara", "API_KEY_BURAYA")
Burada raise_for_status() metodu, isteğin başarılı olup olmadığını kontrol eder. Eğer sunucu bir hata döndürürse, programın çökmesini engellemek için hata yakalama mekanizması devreye girer. timeout=5 parametresi, sunucudan 5 saniye içinde yanıt gelmezse bağlantıyı keser; bu, uygulamanızın donmasını engeller.
Veri Formatlama ve Kullanıcı Dostu Çıktılar
API'dan gelen karmaşık JSON verisini, kullanıcıya anlamlı bir metin olarak sunmak önemlidir. Aşağıdaki örnekte, verinin içindeki belirli alanları (sıcaklık, nem, hava durumu açıklaması) çekip düzenli bir şekilde ekrana yazdırıyoruz.
def detayli_rapor(veri):
sicaklik = veri['main']['temp']
nem = veri['main']['humidity']
durum = veri['weather'][0]['description']
print("-" * 30)
print(f"Hava Durumu Raporu")
print(f"Sıcaklık: {sicaklik}°C")
print(f"Nem Oranı: %{nem}")
print(f"Durum: {durum.capitalize()}")
print("-" * 30)
# Önceki veriyi buraya gönderin
# detayli_rapor(sonuc)
Bu yaklaşım, veriyi ham halinden çıkarıp okunabilir bir formata dönüştürür. .capitalize() metodu, API'dan gelen İngilizce veya Türkçe açıklamaların ilk harfini büyük yaparak estetik bir görünüm sağlar.
Güvenlik: API Anahtarlarını Saklama
API anahtarlarınızı asla doğrudan kodunuzun içine yazmamalısınız. Kodunuzu GitHub gibi platformlarda paylaştığınızda, anahtarınız başkaları tarafından kullanılabilir. Bunun yerine .env dosyalarını kullanmak en güvenli yoldur.
# .env dosyası içeriği:
# API_KEY=sizin_gizli_anahtariniz_buraya
import os
from dotenv import load_dotenv
load_dotenv() # .env dosyasını yükler
api_anahtarim = os.getenv("API_KEY")
if not api_anahtarim:
print("Hata: API anahtarı bulunamadı!")
python-dotenv kütüphanesini kullanarak anahtarınızı ortam değişkenlerine taşıyabilirsiniz. Bu yöntem, üretim ortamında (production) güvenliği sağlamak için standart bir uygulamadır.
Kritik Güvenlik Uyarısı: API anahtarlarınızı hiçbir zaman versiyon kontrol sistemlerine (Git vb.) yüklemeyin.
.gitignoredosyanıza.envdosyasını eklediğinizden emin olun. Aksi takdirde API kotanız kötü niyetli kişilerce tüketilebilir.
API Yöntemlerinin Karşılaştırılması
Hava durumu verisi çekerken kullanabileceğiniz farklı yöntemlerin avantaj ve dezavantajlarını aşağıda görebilirsiniz.
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| Requests Kütüphanesi | Basit, hızlı, okunabilir | Senkron çalışır, büyük veride yavaşlar |
| Aiohttp (Asenkron) | Yüksek performans, çoklu istek | Daha karmaşık kod yapısı |
| SDK Kullanımı | Hazır fonksiyonlar, kolay entegrasyon | Kütüphaneye bağımlılık artar |
Sıkça Sorulan Sorular
API'dan gelen veriler neden hatalı görünüyor?
Genellikle şehir isminin yanlış yazılması veya API anahtarının aktif olmaması kaynaklıdır. API dokümantasyonunu kontrol ederek gönderdiğiniz parametrelerin doğruluğunu teyit edin.
Neden requests yerine asenkron kütüphaneler öneriliyor?
Eğer aynı anda 100 farklı şehrin hava durumunu sorgulayacaksanız, requests ile bu işlem çok uzun sürer. aiohttp gibi kütüphaneler aynı anda çok sayıda isteği yönetebilir.
Ücretsiz API limitleri dolarsa ne olur?
API sağlayıcıları genellikle limit dolduğunda 403 veya 429 hata kodlarını döndürür. Uygulamanızda bu durumları kontrol eden bir mantık kurmanız gerekir.
Hava durumu verisini veritabanına kaydedebilir miyim?
Evet, SQLite veya PostgreSQL kullanarak çektiğiniz verileri zaman damgasıyla kaydedebilir, böylece geçmiş hava durumu istatistikleri oluşturabilirsiniz.
API anahtarımı başkası görürse ne yapmalıyım?
Hemen API sağlayıcınızın paneline girerek anahtarı iptal edin ve yeni bir tane oluşturun. Ardından kodunuzdaki eski anahtarı güncelleyin.
Hava Durumu Verilerini Görselleştirme: Matplotlib ile Analiz
API üzerinden çektiğiniz veriler sadece metin tabanlı bir çıktıdan ibaret olmak zorunda değildir. Python'ın güçlü veri görselleştirme kütüphanesi olan matplotlib kullanarak, belirli bir şehir için önümüzdeki saatlik veya günlük sıcaklık değişimlerini grafiksel olarak raporlayabilirsiniz. Bu, özellikle veri analitiği projelerinde hava durumu verilerini anlamlı kılmak için kritik bir adımdır.
Aşağıdaki örnek, API'dan gelen sıcaklık verilerini bir liste olarak alıp, basit bir çizgi grafiğine dönüştürme sürecini göstermektedir:
import matplotlib.pyplot as plt
# API'den gelen örnek sıcaklık verileri (Celsius)
saatler = ["08:00", "10:00", "12:00", "14:00", "16:00"]
sicakliklar = [15, 18, 22, 24, 21]
plt.figure(figsize=(10, 5))
plt.plot(saatler, sicakliklar, marker='o', linestyle='-', color='b')
plt.title("Günlük Sıcaklık Değişimi")
plt.xlabel("Saat")
plt.ylabel("Sıcaklık (°C)")
plt.grid(True)
plt.show()
API Entegrasyonlarında Performans Optimizasyonu
Uygulamanızın ölçeklenebilir olması için API isteklerini verimli yönetmek gerekir. Özellikle aynı veriyi sürekli sorgulamak hem API limitlerinizi tüketir hem de uygulamanızın yavaşlamasına neden olur. Bu noktada Caching (Önbellekleme) mekanizması devreye girer.
Önbellekleme Stratejileri
- Süreli Önbellek: Verileri bir sözlük (dictionary) yapısında veya yerel bir dosyada, belirli bir süre (örneğin 10 dakika) saklayın.
- Zaman Damgası Kontrolü: İstek gönderilmeden önce verinin ne zaman çekildiğini kontrol edin. Eğer süre dolmadıysa API'ye gitmek yerine yerel veriyi kullanın.
Aşağıda, basit bir zaman damgalı önbellekleme mantığı örneği yer almaktadır:
import time
cache = {}
CACHE_EXPIRATION = 600 # 10 dakika
def get_weather_data(city):
current_time = time.time()
if city in cache and (current_time - cache[city]['timestamp'] < CACHE_EXPIRATION):
print("Veri önbellekten getiriliyor...")
return cache[city]['data']
# API isteği burada yapılır (requests.get...)
print("API'den yeni veri çekiliyor...")
new_data = {"temp": 22} # Örnek API yanıtı
cache[city] = {'data': new_data, 'timestamp': current_time}
return new_data
Hata Ayıklama (Debugging) İpuçları
API ile çalışırken karşılaşılan hataların çoğu ağ kaynaklı veya yanlış parametre gönderiminden kaynaklanır. Hata ayıklama sürecini hızlandırmak için şu adımları izleyin:
- HTTP Durum Kodlarını Denetleyin:
response.status_codedeğerini her zaman kontrol edin. 401 hatası anahtarın geçersiz olduğunu, 429 hatası ise limit aşıldığını gösterir. - Ham Yanıtı İnceleyin: Veri işlenmeden önce
response.textveyaresponse.json()çıktısını bir dosyaya yazdırarak yapıyı gözlemleyin. - Timeout Kullanın: İsteklerinizin sonsuza kadar beklemesini önlemek için
requests.get(url, timeout=5)gibi bir zaman aşımı parametresi ekleyin.
Sonuç
Python ile RESTful API üzerinden hava durumu sorgulama işlemi, temel HTTP isteklerinden başlayıp hata yönetimi ve güvenlik önlemlerine kadar geniş bir yelpazeyi kapsar. Bu rehberde öğrendiğiniz requests kullanımı, JSON işleme ve ortam değişkenleri ile güvenlik sağlama becerileri, tüm API entegrasyon projelerinizde temel teşkil edecektir.
Yasal Uyarı: Bu rehberdeki kod örnekleri eğitim amaçlıdır. API kullanımı sırasında ilgili servisin kullanım şartlarına (Terms of Service) uymak ve veri gizliliği kurallarını ihlal etmemek kullanıcının sorumluluğundadır. Yazılım güvenliği, geliştiricinin sürekli takip etmesi gereken bir süreçtir.
Bir sonraki adım olarak, çektiğiniz bu verileri Flask veya FastAPI kullanarak basit bir web arayüzünde göstermeyi deneyebilirsiniz. Başarılar dilerim.


Yorumlar (0)
Yorum Yaz