Gereksinimler ve Ön Hazırlık
Projemize başlamadan önce sisteminizde Python 3.12 veya daha yeni bir sürümün yüklü olduğundan emin olmalısınız. Ayrıca, HTTP isteklerini yönetmek için en popüler kütüphanelerden biri olan requests kütüphanesini kullanacağız.
Terminal veya komut satırınızı açarak aşağıdaki komut ile gerekli kütüphaneyi yükleyin:
pip install requests
Bu komut, Python'un web servisleri ile konuşmasını sağlayan temel araç takımını ortamınıza dahil edecektir. Kurulumun başarılı olup olmadığını kontrol etmek için Python konsolunda import requests yazarak herhangi bir hata almadığınızı doğrulayın.
API Seçimi ve Veri Kaynağına Bağlanma
Döviz kuru verilerini çekmek için ücretsiz ve güvenilir bir API kaynağına ihtiyacımız var. Bu örnekte, halka açık ve kullanımı kolay olan exchangerate-api veya benzeri yapıları baz alacağız. İlk adım olarak, bir API uç noktasına (endpoint) istek göndererek veriyi almayı öğrenelim.
import requests
# API uç noktası ve temel parametreler
url = "https://api.exchangerate-api.com/v4/latest/USD"
response = requests.get(url)
data = response.json()
print(f"Güncelleme Tarihi: {data['date']}")
print(f"1 USD Kaç TRY: {data['rates']['TRY']}")
Burada requests.get() fonksiyonu ile sunucuya bir "GET" isteği gönderiyoruz. Gelen yanıtı .json() metodu ile Python sözlüğüne (dictionary) dönüştürerek veriye erişilebilir hale getiriyoruz.
Döviz Kuru Botunun Mantığını Kurma
Botumuzun sadece tek bir para birimi için değil, dinamik bir şekilde çalışması gerekir. Kullanıcıdan istediği para birimlerini alarak işlem yapacak bir fonksiyon yapısı kuralım. Bu, kodunuzun modüler olmasını sağlar.
def kur_getir(baz_birim, hedef_birim):
url = f"https://api.exchangerate-api.com/v4/latest/{baz_birim}"
response = requests.get(url)
if response.status_code == 200:
veriler = response.json()
return veriler['rates'].get(hedef_birim)
else:
return None
kur = kur_getir("USD", "TRY")
print(f"USD/TRY Kuru: {kur}")
Bu kod bloğunda, status_code == 200 kontrolü yaparak isteğin başarılı olup olmadığını denetliyoruz. Eğer sunucu hata verirse (örneğin 404 veya 500), programın çökmesini engellemiş oluyoruz.
Veri İşleme ve Hata Yönetimi
Gerçek dünya uygulamalarında internet bağlantısı kesilebilir veya API limitleri dolabilir. Bu gibi durumlar için try-except blokları kullanarak botu daha dayanıklı (robust) hale getirmeliyiz.
import requests
def güvenli_kur_al(baz, hedef):
try:
url = f"https://api.exchangerate-api.com/v4/latest/{baz}"
response = requests.get(url, timeout=5)
response.raise_for_status()
veri = response.json()
return veri['rates'][hedef]
except requests.exceptions.RequestException as e:
print(f"Bir hata oluştu: {e}")
return None
print(güvenli_kur_al("EUR", "TRY"))
timeout=5 parametresi, isteğin 5 saniye içinde sonuçlanmaması durumunda bağlantıyı keserek programın donmasını engeller. raise_for_status() ise HTTP hatalarını bir istisna olarak fırlatır.
Döviz Kuru Botu İçin Karşılaştırma Tablosu
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| Ücretsiz API | Maliyet gerektirmez, hızlı başlangıç | Günlük istek limiti kısıtlıdır |
| Web Scraping | API'ye bağımlı değildir | Site yapısı değişirse kod bozulur |
| Ücretli API | Yüksek hız ve güvenilirlik | Düzenli maliyet gerektirir |
Otomasyon: Belirli Aralıklarla Çalıştırma
Botunuzun sürekli çalışmasını istiyorsanız bir döngü kurabilirsiniz. Ancak, API'yi çok sık sorgulamak IP adresinizin engellenmesine neden olabilir. Bu nedenle time.sleep() kullanarak aralık bırakmak önemlidir.
import time
def botu_baslat():
while True:
kur = güvenli_kur_al("USD", "TRY")
print(f"Anlık USD/TRY: {kur} - {time.ctime()}")
time.sleep(60) # 60 saniyede bir çalıştır
# botu_baslat() # Test etmek için yorum satırını kaldırın
Bu döngü, programı kapatana kadar her dakika güncel kuru ekrana yazdıracaktır. Sunucularda çalıştırmak için bu yapıyı systemd servisleri veya cron job ile birleştirebilirsiniz.
Güvenlik ve Sorumluluk Reddi
Dikkat: Bu bot eğitim amaçlıdır. Finansal verileri çekerken API sağlayıcınızın kullanım koşullarına uyunuz. API anahtarlarınızı (eğer gerekiyorsa) hiçbir zaman kaynak kodunuzun içine doğrudan yazmayın; .env dosyaları veya ortam değişkenleri kullanın. Bu bot ile yapılan işlemlerden doğabilecek finansal zararlardan geliştirici sorumlu değildir.
Sıkça Sorulan Sorular
Bu bot neden çalışmıyor?
Genellikle internet bağlantısı, yanlış API uç noktası veya API'nin geçici olarak kapalı olması kaynaklıdır. response.status_code değerini yazdırarak sorunun kaynağını görebilirsiniz.
Daha fazla para birimi ekleyebilir miyim?
Evet, API'den dönen JSON verisi tüm kurları içerir. data['rates'] sözlüğünü döngüye alarak tüm listeyi ekrana yazdırabilirsiniz.
API anahtarı kullanmam gerekir mi?
Bazı ücretsiz API'ler anahtar gerektirmez, bazıları ise kayıt olup ücretsiz anahtar almanızı ister. API dokümantasyonunu mutlaka okuyun.
Botu nasıl bir web sitesine bağlarım?
Bu botun verilerini bir veritabanına (SQLite gibi) kaydedip, Flask veya Django gibi bir Python framework'ü ile web arayüzü üzerinden sunabilirsiniz.
Hız sınırı (Rate Limit) nedir?
Ücretsiz API'ler genellikle dakikada veya günde belirli bir istek sayısına izin verir. Bu sınırı aşarsanız sunucudan "429 Too Many Requests" hatası alırsınız.
Veri Görselleştirme ve Analiz İçin Pandas Entegrasyonu
Botunuzun topladığı verileri sadece anlık olarak takip etmek yerine, geçmişe dönük bir analiz yapmak istiyorsanız Pandas kütüphanesi en güçlü yardımcınız olacaktır. Verileri bir CSV dosyasında veya SQLite veritabanında biriktirdikten sonra, bu verileri Pandas DataFrame yapısına aktararak kur değişimlerini kolayca analiz edebilirsiniz.
Aşağıdaki örnek, kaydedilen verilerin ortalama kur değerini hesaplamak için nasıl kullanılacağını göstermektedir:
import pandas as pd
# Verilerinizi bir CSV dosyasından okuduğunuzu varsayalım
def analiz_et(dosya_yolu):
df = pd.read_csv(dosya_yolu)
# Kur değerlerinin ortalamasını al
ortalama_kur = df['kur_degeri'].mean()
print(f"Seçilen zaman aralığındaki ortalama kur: {ortalama_kur:.4f}")
# En yüksek ve en düşük değerleri bul
print(f"Maksimum değer: {df['kur_degeri'].max()}")
print(f"Minimum değer: {df['kur_degeri'].min()}")
# Fonksiyonu çağır
analiz_et('kur_verileri.csv')
Botunuzu Buluta Taşıma (Deployment)
Botunuzun bilgisayarınız kapalıyken de çalışmaya devam etmesini istiyorsanız, bir sunucuya veya bulut platformuna taşımanız gerekir. Küçük ölçekli Python projeleri için PythonAnywhere, Render veya Heroku gibi platformlar oldukça uygundur.
Deployment İçin İzlenmesi Gereken Adımlar:
- Gereksinimler Dosyası: Projenizin kullandığı tüm kütüphaneleri
pip freeze > requirements.txtkomutu ile listeleyin. - Environment Variables: API anahtarınızı kodun içine doğrudan yazmak yerine, sunucu ayarlarından
.envdosyası veya ortam değişkenleri ile tanımlayın. - Zamanlanmış Görevler (Cron Jobs): Sunucunuzda botun belirli aralıklarla çalışması için Linux tabanlı sistemlerde
crontabkullanabilirsiniz.
Örneğin, botunuzun her saat başı çalışması için sunucunuzda şu komutu crontab'a ekleyebilirsiniz:
# Her saat başı botu çalıştır
0 * * * * /usr/bin/python3 /home/kullanici/bot/doviz_botu.py
Hata Ayıklama (Debugging) İpuçları
Botunuzun beklenmedik anlarda durmasını engellemek için kapsamlı bir loglama (logging) mekanizması kurmalısınız. print() fonksiyonu yerine Python'un yerleşik logging modülünü kullanmak, hataların zaman damgasıyla birlikte bir dosyaya kaydedilmesini sağlar.
import logging
# Loglama ayarları
logging.basicConfig(filename='bot_hatalari.log', level=logging.ERROR,
format='%(asctime)s - %(levelname)s - %(message)s')
try:
# API isteği burada yapılır
pass
except Exception as e:
logging.error(f"API isteği sırasında hata oluştu: {e}")
Bu yöntemle, botunuzun neden çalışmadığını veya hangi saatte hata aldığını bot_hatalari.log dosyasını inceleyerek saniyeler içinde tespit edebilirsiniz.
Sonuç
Python ile basit bir döviz kuru botu yapmak, API entegrasyonu ve hata yönetimi konularında size sağlam bir temel kazandırır. Bu projeyi bir adım öteye taşımak için verileri bir veritabanına kaydedebilir veya belirli bir kur seviyesinin altına düştüğünde size e-posta/bildirim gönderen bir uyarı mekanizması ekleyebilirsiniz. Bir sonraki adım olarak, verileri görselleştirmek için matplotlib veya pandas kütüphanelerini kullanarak kur grafiklerini çizmeyi deneyebilirsiniz.


Yorumlar (0)
Yorum Yaz