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

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.

ERexchangerate.dev·Sep 8, 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.

Key points
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 modelcopy
from decimal import Decimal

def 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 writecopy
import json
import os
import tempfile
from pathlib import Path

def 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 itcopy
chmod 700 python-exchange-rate-alerts.py
export 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.

ER
exchangerate.dev
Geliştiriciler için entegrasyon rehberleri.

Okumaya devam edin

TutorialPython ile döviz kurlarını almaOku Referencesource ve market_session okumaOku GuideTek istekte geçmiş kurlarOku
Daha Fazla KarşılaştırmaFixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
ÖğrenReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
Canlı KurlarEUR/USDGBP/USDUSD/JPY