PythonでUSD/IDRの為替アラートを作る
標準ライブラリだけで、閾値を一度だけ通知し、安全に状態を保存し、鮮度とAPI制限を守るPythonモニターを作る。
アラートはHTTPの呼び出し時刻ではなく、新しく有効になったUSD/IDR観測値を前回の観測値と比較する。初回は基準値だけを保存し、古いデータやエラーでは状態を変えない。
Key points
IDRの判定には
sources["IDR"] と effective_at["IDR"] を使う。全体のsourceは要求した通貨の保守的な要約である。最初の有効な観測は基準値だけ。閾値を越えたら一度だけ通知して解除し、後の観測が閾値未満に戻ったとき再武装する。
同じディレクトリの一時ファイルにJSONを書き、0600にしてから
os.replace で置き換える。10秒のタイムアウトを使い、キーは
EXCHANGERATE_API_KEY に置く。最小60秒間隔にし、429では状態を保って Retry-After を守る。完全なスクリプトをダウンロードし、閾値と状態パスをソース管理外で設定する。通知はローカルコンソールだけに出す。
通貨ごとの観測をモデル化する
IDRの判定には sources["IDR"] と effective_at["IDR"] を使う。全体のsourceは要求した通貨の保守的な要約である。
クロスポリシーを決める
最初の有効な観測は基準値だけ。閾値を越えたら一度だけ通知して解除し、後の観測が閾値未満に戻ったとき再武装する。
状態を安全に保存する
同じディレクトリの一時ファイルにJSONを書き、0600にしてから os.replace で置き換える。
ネットワークとクォータを制限する
10秒のタイムアウトを使い、キーは EXCHANGERATE_API_KEY に置く。最小60秒間隔にし、429では状態を保って Retry-After を守る。 5分間隔の既定値は30日で約8,640回、60秒間隔は約43,200回で、共有クォータを超える可能性がある。
エラーで誤ったアラートを作らない
10秒のタイムアウトを使い、キーは
EXCHANGERATE_API_KEY に置く。最小60秒間隔にし、429では状態を保って Retry-After を守る。完全なモニターを実行する
完全なスクリプトをダウンロードし、閾値と状態パスをソース管理外で設定する。通知はローカルコンソールだけに出す。 既定の最大経過時間は1時間。日次参照や市場休場を使う場合はFX_ALERT_MAX_AGE_SECONDSを設定する。 python-exchange-rate-alerts.py
市場を待たずにポリシーをテストする
初回、閾値未満、クロス、同じeffective_at、古い観測、再武装、二回目のクロスをネットワークモックでテストする。
ER
exchangerate.dev
FXデータを扱う開発者向けの統合ガイド。