Python İle Basit Bir Döviz Kuru Botu Nasıl Yapılır?

Python İle Basit Bir Döviz Kuru Botu Nasıl Yapılır?
Python İle Basit Bir Döviz Kuru Botu Nasıl Yapılır?

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.txt komutu ile listeleyin.
  • Environment Variables: API anahtarınızı kodun içine doğrudan yazmak yerine, sunucu ayarlarından .env dosyası 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 crontab kullanabilirsiniz.

Ö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.

Bu yazıya tepkinizi paylaşın:
Deniz Aydın

On yıldır dijital yayıncılıkta pratik çözüm rehberleri hazırlıyorum. Karmaşık süreçleri herkesin anlayabileceği adım adım yönergelere dönüştürme konusunda uzmanım.

Yorumlar (0)

Yorum Yaz