RehberlerEğitimler

Python ile USD/IDR kur uyarısı oluşturma

Python standart kütüphanesiyle eşiği bir kez aşınca uyarı veren, durumu güvenle saklayan ve API limitlerine uyan bir izleyici oluşturun.

8 Eyl 2026 · 8 dk okuma

Uyarı, iki HTTP yoklamasının zamanını değil yeni geçerli USD/IDR gözlemini önceki gözlemle karşılaştırmalıdır. İlk gözlem temel oluşturur; eski veri ve hatalar durumu değiştirmez.

  • IDR için sources["IDR"] ve effective_at["IDR"] kullanın; genel source tüm para birimlerinin muhafazakâr özetidir.
  • İlk geçerli gözlem temeldir. Eşik aşılınca bir kez uyarın, yalnızca geçerli veri tekrar eşik altına dönünce yeniden kurun.
  • JSON’u geçici dosyaya yazın, 0600 yapın ve os.replace ile değiştirin; kesinti yarım durum bırakmasın.
  • 10 saniye timeout, EXCHANGERATE_API_KEY ve en az60 saniye polling kullanın.429 sonrası durumu koruyup Retry-After süresine uyun.
  • Tam scripti indirin, eşik ve durum yolunu repo dışında ayarlayın; yalnızca yerel konsola yazdırın.

Para birimi gözlemini modelleyin

IDR için sources["IDR"] ve effective_at["IDR"] kullanın; genel source tüm para birimlerinin muhafazakâr özetidir.

python · observation model
from decimal import Decimaldef idr_observation(payload: dict) -> dict:    return {        "rate": Decimal(str(payload["rates"]["IDR"])),        "source": payload["sources"]["IDR"],        "effective_at": payload["effective_at"]["IDR"],        "market_session": payload["market_session"],    }

Aşım politikasını tanımlayın

İlk geçerli gözlem temeldir. Eşik aşılınca bir kez uyarın, yalnızca geçerli veri tekrar eşik altına dönünce yeniden kurun.

DurumDurum değişimiUyarı
İlk geçerli gözlemTemeli kaydetHayır
Eşik altındaki gözlemarmed=trueHayır
Armed iken eşik aşımıarmed=falseBir
Tekrar/eski veri veya hataDurumu koruHayır

Durumu güvenle saklayın

JSON’u geçici dosyaya yazın, 0600 yapın ve os.replace ile değiştirin; kesinti yarım durum bırakmasın.

python · atomic state write
import jsonimport osimport tempfilefrom pathlib import Pathdef save_state(path: Path, state: dict) -> None:    path.parent.mkdir(parents=True, exist_ok=True)    fd, temporary = tempfile.mkstemp(prefix=f".{path.name}.", dir=path.parent, text=True)    try:        os.fchmod(fd, 0o600)        with os.fdopen(fd, "w") as handle:            json.dump(state, handle, sort_keys=True)            handle.write("\n")        os.replace(temporary, path)    except Exception:        try:            os.unlink(temporary)        except OSError:            pass        raise

Ağ ve kotayı sınırlayın

10 saniye timeout, EXCHANGERATE_API_KEY ve en az60 saniye polling kullanın.429 sonrası durumu koruyup Retry-After süresine uyun. Varsayılan beş dakika aralık 30 günde yaklaşık 8.640 çağrı kullanır; 60 saniye yaklaşık 43.200 çağrıya çıkar ve ortak aylık kotayı aşabilir.

Hatalar sahte uyarı üretemez

10 saniye timeout, EXCHANGERATE_API_KEY ve en az60 saniye polling kullanın.429 sonrası durumu koruyup Retry-After süresine uyun.

İzleyiciyi çalıştırın

Tam scripti indirin, eşik ve durum yolunu repo dışında ayarlayın; yalnızca yerel konsola yazdırın. Varsayılan maksimum veri yaşı bir saattir. Günlük referans veya kapalı piyasa kabul ediyorsanız FX_ALERT_MAX_AGE_SECONDS ayarlayın. python-exchange-rate-alerts.py

shell · run it
chmod 700 python-exchange-rate-alerts.pyexport EXCHANGERATE_API_KEY="your-key"export FX_ALERT_THRESHOLD_PCT="1.0"export FX_ALERT_POLL_SECONDS="300"export FX_ALERT_STATE_PATH="$HOME/.local/state/fx-alert.json"python3 python-exchange-rate-alerts.py

Piyasayı beklemeden test edin

Baseline, crossing, tekrar eden timestamp, eski veri, rearm ve ikinci crossing durumlarını ağ mockuyla test edin.

Sorular

İlk çalışma neden uyarmaz?

Karşılaştırılacak önceki geçerli gözlem yoktur; yalnızca temel kaydedilir.

Neden effective_at?

IDR gözleminin yazıldığı zamanı gösterir ve eski yanıtın tekrar uyarı üretmesini önler.

Piyasa kapalı verisi her zaman geçersiz mi?

Hayır. source ve market_session alanlarını saklayıp referans bağlamı olarak yorumlayın.

Script dışarıya mesaj gönderir mi?

Hayır, yalnızca yerel konsola yazar.

Okumaya devam edin

Ücretsiz bir API anahtarıyla başlayın

Ücretsiz planda ayda 5.000 istek. Kredi kartı gerekmez.

Ücretsiz anahtar alın