Pada akhir panduan ini Anda akan memiliki penjadwal yang menggunakan produksi FXMacroData release kalender untuk menemukan berikutnya announcement_datetime Untuk indikator yang dipilih, kemudian memanggil pengumuman yang cocok titik akhir tepat ketika cetakan baru harus tersedia.
Persyaratan
- A Kunci API FXMacroData untuk mata uang non-USD; penjadwalan USD adalah publik
- Python 3.9+ atau Node.js 18+
- - Apa?
requestspaket untuk contoh Python - Keterampilan dasar dengan timestamp Unix dan jadwal UTC
Mengapa jadwal bukan jajak pendapat?
Polling setiap beberapa menit sederhana, tetapi membuang permintaan dan memperkenalkan penundaan yang dapat dihindari sekitar detik rilis yang tepat. Endpoint kalender produksi memberi Anda waktu publikasi yang dijadwalkan berikutnya secara langsung, sehingga Anda dapat tidur sampai tepat sebelum acara dan membuat satu permintaan tindak lanjut yang ditargetkan.
Alur kerja inti
- Hubungi.
/api/v1/calendar/{currency}dengan pilihanindicatorfilter. - Baca baris berikutnya
announcement_datetimeAku tidak tahu. - Tidur sampai sebelum waktu UTC.
- Ambil.
/api/v1/announcements/{currency}/{indicator}Aku tidak tahu. - Bacalah pengamatan terbaru dari yang kembali
dataarray, lalu jadwalkan acara berikutnya.
Langkah 1 - Memahami respon kalender
Kalender rilis mengembalikan objek JSON dengan data Setiap baris berisi slug rilis dan timestamp UTC yang dijadwalkan.
curl "https://fxmacrodata.com/api/v1/calendar/usd?indicator=inflation"
Bentuk respon:
{
"currency": "USD",
"indicator": "inflation",
"data": [
{
"announcement_datetime": 1773077400,
"release": "inflation"
}
]
}
Untuk mata uang non-USD, tetap rute yang sama dan menambahkan api_key Jika Anda menanyakan jadwal mata uang yang lebih luas tanpa filter indikator, beberapa baris juga dapat mencakup metadata routing seperti endpoint_family atau endpoint_path.
Langkah 2 - Cari time stamp rilis berikutnya
Pembantu di bawah ini meminta kalender produksi untuk satu indikator dan mengembalikan timestamp masa depan pertama.
import time
import requests
BASE = "https://fxmacrodata.com/api/v1"
def next_release(currency: str, indicator: str, api_key: str | None = None) -> float | None:
url = f"{BASE}/calendar/{currency}"
params = {"indicator": indicator}
if api_key:
params["api_key"] = api_key
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
now = time.time()
for row in response.json().get("data", []):
ts = row.get("announcement_datetime")
if row.get("release") == indicator and ts and float(ts) > now:
return float(ts)
return None
Langkah 3 - Dapatkan data yang dirilis pada waktu yang tepat
Ketika timestamp tiba, memanggil pengumuman yang cocok titik akhir dan membaca pengamatan terbaru dari kembali data array.
def wait_and_fetch(currency: str, indicator: str, api_key: str | None = None) -> dict | None:
release_ts = next_release(currency, indicator, api_key)
if release_ts is None:
print(f"No upcoming release found for {currency}/{indicator}.")
return None
wake_at = release_ts - 2
time.sleep(max(0.0, wake_at - time.time()))
url = f"{BASE}/announcements/{currency}/{indicator}"
params = {"api_key": api_key} if api_key else {}
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
return response.json()
Langkah 4 - Membangun loop yang terus menerus
import time
import requests
BASE = "https://fxmacrodata.com/api/v1"
API_KEY = None
CURRENCY = "usd"
INDICATOR = "inflation"
def on_release(payload: dict) -> None:
rows = payload.get("data", [])
latest = rows[-1] if rows else {}
print(
"New release:",
latest.get("date"),
"value=", latest.get("val"),
"announced_at=", latest.get("announcement_datetime"),
)
while True:
release_ts = next_release(CURRENCY, INDICATOR, API_KEY)
if release_ts is None:
print("No release found in the current calendar window. Retrying in 24 hours.")
time.sleep(86_400)
continue
sleep_seconds = max(0.0, release_ts - 2 - time.time())
print(f"Next {CURRENCY.upper()} {INDICATOR} release in {sleep_seconds / 3600:.2f}h")
time.sleep(sleep_seconds)
payload = wait_and_fetch(CURRENCY, INDICATOR, API_KEY)
if payload:
on_release(payload)
time.sleep(5)
Jeda singkat setelah rilis memberi sistem waktu untuk memutar acara yang dijadwalkan ke depan sebelum kueri kalender berikutnya.
Langkah 5 - Skala ke beberapa jam
Untuk mengikuti beberapa indikator, jalankan satu penjadwal per pasangan. Gunakan slug indikator kanonik di seluruh sehingga kalender dan rute pengumuman tetap sejajar.
WATCHES = [
{"currency": "usd", "indicator": "inflation"},
{"currency": "usd", "indicator": "gdp"},
{"currency": "aud", "indicator": "policy_rate"},
{"currency": "gbp", "indicator": "unemployment"},
]
Untuk rincian lapangan tentang pengambilan tindak lanjut, lihat Tingkat kebijakan AUDAku akan pergi. Pengangguran GBP, dan sisanya dari indeks dokumennya.
Langkah 6 - JavaScript / Node.js varian
Pola yang sama diterjemahkan langsung ke Node.js: query kalender dengan filter indikator, tidur sampai timestamp kembali, kemudian mengambil rute pengumuman yang cocok.
const BASE = "https://fxmacrodata.com/api/v1";
async function nextRelease(currency, indicator, apiKey) {
const url = new URL(`${BASE}/calendar/${currency}`);
url.searchParams.set("indicator", indicator);
if (apiKey) url.searchParams.set("api_key", apiKey);
const response = await fetch(url);
if (!response.ok) throw new Error(`Calendar request failed: ${response.status}`);
const payload = await response.json();
const now = Date.now() / 1000;
return payload.data.find((row) => row.release === indicator && row.announcement_datetime > now) ?? null;
}
async function fetchAnnouncement(currency, indicator, apiKey) {
const url = new URL(`${BASE}/announcements/${currency}/${indicator}`);
if (apiKey) url.searchParams.set("api_key", apiKey);
const response = await fetch(url);
if (!response.ok) throw new Error(`Announcement request failed: ${response.status}`);
return response.json();
}
Jika Anda perlu mendukung antrian, cron worker, atau timer serverless, tetap pola dua langkah yang sama: kalender untuk waktu, pengumuman untuk nilai.