Python İle Kripto Para Birimleri İçin Fiyat Takip Uygulaması Nasıl Yapılır?

Python İle Kripto Para Birimleri İçin Fiyat Takip Uygulaması Nasıl Yapılır?
Python İle Kripto Para Birimleri İçin Fiyat Takip Uygulaması Nasıl Yapılır?

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. Kripto verilerini çekmek için requests kütüphanesini, verileri daha okunabilir kılmak için ise tabulate kütüphanesini kullanacağız. Bu kütüphaneler, HTTP istekleri göndermek ve terminalde tablo oluşturmak için endüstri standardıdır.

Gerekli paketleri kurmak için terminal veya komut satırınıza şu komutu yazın:

pip install requests tabulate

Bu paketler, harici sunucularla iletişim kurmamızı ve elde ettiğimiz JSON formatındaki verileri düzenlememizi sağlar. Kurulum tamamlandıktan sonra çalışma ortamınızın hazır olduğunu varsayarak kodlama aşamasına geçebiliriz.

Adım Adım API Bağlantısı Kurma

Kripto para piyasası verilerine erişmek için güvenilir bir veri sağlayıcısına ihtiyaç duyarız. Bu örnekte, ücretsiz ve geniş kapsamlı veriler sunan CoinGecko API'sini kullanacağız. İlk adım olarak, belirli bir kripto paranın güncel fiyatını çeken fonksiyonu yazalım.

import requests

def get_crypto_price(coin_id):
    url = f"https://api.coingecko.com/api/v3/simple/price?ids={coin_id}&vs_currencies=usd"
    response = requests.get(url)
    if response.status_code == 200:
        return response.json()
    else:
        return None

# Test: Bitcoin fiyatını çekelim
data = get_crypto_price("bitcoin")
print(data)

Yukarıdaki kod, requests kütüphanesi ile belirtilen URL'ye bir GET isteği gönderir. Eğer sunucu 200 (Başarılı) kodunu döndürürse, veriyi JSON formatında alırız. coin_id parametresi, API'nin tanıdığı benzersiz isimdir (örneğin: 'bitcoin', 'ethereum').

Verileri İşleme ve Tablolaştırma

API'den gelen ham veriyi kullanıcı için daha okunabilir hale getirmek önemlidir. tabulate kütüphanesi, Python listelerini veya sözlüklerini terminalde şık bir tabloya dönüştürür. Aşağıdaki kod, birden fazla kripto para birimini aynı anda takip etmenizi sağlar.

from tabulate import tabulate

def display_prices(prices_dict):
    table = [[coin.capitalize(), f"${price['usd']}"] for coin, price in prices_dict.items()]
    print(tabulate(table, headers=["Kripto Para", "Fiyat (USD)"], tablefmt="grid"))

# Örnek veri seti
sample_data = {"bitcoin": {"usd": 95000}, "ethereum": {"usd": 3500}}
display_prices(sample_data)

Bu kod bloğu, iç içe geçmiş sözlük yapısını (nested dictionary) ayrıştırarak liste formatına getirir. tabulate fonksiyonu, verileri hizalayarak terminalde profesyonel bir görünüm sunar.

Hata Yönetimi ve Güvenlik Önlemleri

Ağ üzerinden veri çekerken bağlantı kopmaları veya API limit aşımı gibi hatalar yaşanabilir. Bu tür durumları try-except blokları ile yönetmek, uygulamanızın çökmesini engeller. Ayrıca, API anahtarları kullanıyorsanız bunları asla kodun içine gömmemelisiniz.

import requests

def fetch_data_safely(url):
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Hata oluştu: {e}")
        return None

timeout=10 parametresi, sunucudan 10 saniye boyunca yanıt gelmezse işlemin durdurulmasını sağlar. Bu, uygulamanın sonsuz döngüye girmesini engellemek için kritik bir güvenlik önlemidir.

Kripto Takip Uygulaması Karşılaştırması

Aşağıdaki tablo, fiyat takip uygulaması geliştirirken kullanabileceğiniz farklı yöntemlerin karşılaştırmasını sunar:

Yöntem Avantajı Dezavantajı
REST API (Polling) Basit kurulum, düşük maliyet Anlık değil, gecikmeli veri
WebSocket Gerçek zamanlı, düşük gecikme Karmaşık yapı, yüksek kaynak kullanımı
Web Scraping API kısıtlaması yok Site yapısı değişince bozulur

Döngüsel Güncelleme ve Otomasyon

Uygulamanızın sürekli çalışmasını ve fiyatları belirli aralıklarla güncellemesini istiyorsanız time.sleep() fonksiyonunu kullanabilirsiniz. Ancak, API sağlayıcılarının "Rate Limit" (Saniyede yapılan istek sınırı) kurallarına dikkat etmeniz gerekir.

import time

def start_tracker(coins):
    while True:
        # API'den veri çekme mantığı buraya gelecek
        print("Fiyatlar güncelleniyor...")
        # Verileri çek ve ekrana bas
        time.sleep(60) # 60 saniyede bir güncelle

# start_tracker(["bitcoin", "ethereum"])

Kritik Uyarı: API sağlayıcılarının kullanım koşullarını mutlaka okuyun. Çok sık istek göndermek, IP adresinizin geçici veya kalıcı olarak engellenmesine yol açabilir. Üretim ortamında (production) hata loglarını bir dosyaya kaydetmeyi unutmayın.

Sıkça Sorulan Sorular

API'den gelen veriler neden bazen boş dönüyor?

API'den boş veri dönmesinin en yaygın sebebi, gönderdiğiniz kripto para ID'sinin hatalı olması veya API sağlayıcısının o anlık yoğunluk yaşamasıdır. İstek öncesi URL'yi kontrol etmek ve hata kodlarını loglamak bu sorunu çözmenize yardımcı olur.

Kendi API anahtarımı kodun içinde saklamalı mıyım?

Hayır, asla. API anahtarlarınızı .env dosyalarında saklamalı ve python-dotenv kütüphanesi ile projenize dahil etmelisiniz. Bu, kodunuzu GitHub gibi platformlarda paylaştığınızda anahtarlarınızın çalınmasını önler.

Uygulamayı nasıl daha profesyonel hale getirebilirim?

Verileri bir veritabanına (SQLite veya PostgreSQL) kaydederek geçmiş fiyat analizleri yapabilir veya bir grafik kütüphanesi (Matplotlib veya Plotly) kullanarak fiyat değişimlerini görselleştirebilirsiniz.

Ücretsiz API limitleri dolarsa ne yapmalıyım?

Farklı ücretsiz API sağlayıcılarına geçiş yapabilir (CoinGecko, CoinCap gibi) veya verileri önbelleğe alarak (caching) gereksiz istekleri azaltabilirsiniz.

Bu uygulama ile otomatik alım-satım yapabilir miyim?

Bu rehber sadece fiyat takibi üzerinedir. Otomatik alım-satım (bot) yapmak, karmaşık güvenlik protokolleri ve borsa API'leri ile entegrasyon gerektirir; bu da ciddi finansal riskler taşır.

Finansal Sorumluluk Reddi: Bu makalede paylaşılan bilgiler tamamen yazılım eğitimi amaçlıdır. Hiçbir şekilde yatırım tavsiyesi değildir. Kripto para piyasaları yüksek volatilite içerir ve finansal kayıp riski taşır. Uygulamanızda kullanacağınız verilerin doğruluğunu her zaman birden fazla kaynaktan teyit edin.

Veri Görselleştirme ile Fiyat Trendlerini Analiz Etme

Uygulamanızdan aldığınız ham verileri görselleştirmek, piyasa hareketlerini anlık olarak yorumlamanızı sağlar. Python'un güçlü kütüphanelerinden biri olan matplotlib kullanarak, takip ettiğiniz kripto paraların fiyat değişimlerini grafik üzerinde gösterebilirsiniz. Bu, veriyi sadece bir tablo olarak değil, bir trend olarak görmenize olanak tanır.

Aşağıdaki kod bloğu, belirli bir zaman dilimindeki fiyat verilerini basit bir çizgi grafiğine dönüştürmek için kullanılabilir:

import matplotlib.pyplot as plt

def grafik_olustur(fiyat_listesi, zaman_damgalari):
    plt.figure(figsize=(10, 5))
    plt.plot(zaman_damgalari, fiyat_listesi, marker='o', linestyle='-', color='b')
    plt.title('Kripto Para Fiyat Değişimi')
    plt.xlabel('Zaman')
    plt.ylabel('Fiyat (USD)')
    plt.grid(True)
    plt.show()

# Örnek kullanım:
# fiyatlar = [45000, 45200, 44900, 45500]
# zamanlar = ['10:00', '10:05', '10:10', '10:15']
# grafik_olustur(fiyatlar, zamanlar)

Uygulamanın Performansını Artırmak İçin Asenkron Programlama

Uygulamanız aynı anda onlarca farklı kripto parayı takip etmeye başladığında, standart requests kütüphanesi senkron çalıştığı için darboğaz oluşturabilir. Bir istek tamamlanmadan diğeri başlamaz, bu da uygulamanın yavaşlamasına neden olur. aiohttp kütüphanesi ile asenkron (eşzamansız) istekler göndererek bu süreci hızlandırabilirsiniz.

Asenkron yapı, özellikle çok sayıda API çağrısı yapmanız gereken durumlarda uygulamanın yanıt süresini ciddi oranda düşürür:

import aiohttp
import asyncio

async def fetch_price(session, url):
    async with session.get(url) as response:
        return await response.json()

async def main():
    urls = ["https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd",
            "https://api.coingecko.com/api/v3/simple/price?ids=ethereum&vs_currencies=usd"]
    
    async with aiohttp.ClientSession() as session:
        tasks = [fetch_price(session, url) for url in urls]
        fiyatlar = await asyncio.gather(*tasks)
        print(fiyatlar)

if __name__ == "__main__":
    asyncio.run(main())

İleri Düzey İpuçları ve Optimizasyon

  • Caching (Önbellekleme): API limitlerine takılmamak için verileri 60 saniyelik periyotlarla önbelleğe alın. cachetools kütüphanesi bu iş için oldukça uygundur.
  • Loglama: Hataları konsola yazdırmak yerine logging modülünü kullanarak bir dosyaya kaydedin. Bu, uygulamanızın geçmişte neden hata verdiğini anlamanızı sağlar.
  • Çevre Değişkenleri: API anahtarlarınızı asla kod içinde tutmayın. python-dotenv kütüphanesi ile .env dosyalarından güvenli bir şekilde okuma yapın.
  • Modülerlik: Uygulamanızı tek bir dosya yerine; api_client.py, data_processor.py ve main.py gibi parçalara bölerek yönetilebilirliği artırın.

Sonuç

Python ile bir kripto para fiyat takip uygulaması geliştirmek, API etkileşimi ve veri işleme süreçlerini öğrenmek için mükemmel bir başlangıç projesidir. Bu rehberde, istek gönderme, veriyi temizleme, tablo oluşturma ve hata yönetimi gibi temel yazılım becerilerini adım adım uyguladık. Bir sonraki adım olarak, çektiğiniz verileri bir SQLite veritabanına kaydederek kendi geçmiş fiyat arşivinizi oluşturmayı deneyebilirsiniz. Kod yazarken her zaman modüler yapıyı korumaya ve hata yönetimine önem vermeyi unutmayın.

Bu yazıya tepkinizi paylaşın:
Selin Yılmaz

Kişisel gelişim ve zaman yönetimi odaklı pratik teknikler üzerine çalışıyorum. Günlük rutinleri iyileştiren, zaman kazandıran yöntemleri bilimsel temellere dayandırarak editöryal bir dille paylaşıyorum.

Yorumlar (0)

Yorum Yaz