TutorialKode

Cara mendapatkan harga emas terkini di Python

Panggil API goldprice.dev dari Python dengan requests, perhitungan Decimal, percobaan ulang saat 429, dan cache TTL 60 detik.

27 Apr 2026 · 3 menit baca

Untuk mendapatkan harga emas terkini di Python, kirim GET ke api.goldprice.dev/v1/spot/XAU-USD-SPOT melalui requests dengan kunci API di header X-API-Key. Gunakan cachetools.TTLCache untuk cache 60 detik dan Decimal untuk perhitungan harga. Paket gratis mencakup 5.000 panggilan/bulan tanpa kartu kredit. Diuji pada Oktober 2026 dengan Python 3.15 + requests 2.34.

Dapatkan kunci API goldprice.dev Anda

Daftar akun gratis di goldprice.dev/onboarding. Setelah konfirmasi email, dasbor Anda menampilkan kunci berawalan ga_live_. Simpan sebagai variabel lingkungan:

Shell
export GOLDPRICE_API_KEY=ga_live_replace_with_your_key_here

Paket gratis mencakup 5.000 panggilan/bulan dan harga spot emas dalam 31 mata uang. Tidak perlu kartu kredit.

Instal dependensi

Anda membutuhkan tiga paket: requests untuk panggilan HTTP, cachetools untuk cache TTL dalam proses, dan tenacity untuk mencoba ulang saat 429. Instal dengan pip atau uv:

shell
# pippip install requests cachetools tenacity# or uv (recommended)uv add requests cachetools tenacity

Tulis klien goldprice

Simpan sebagai goldprice.py. Fungsi spot() menyimpan cache per simbol selama 60 detik, mencoba ulang hingga 3 kali saat 429 dengan jeda eksponensial, dan mengembalikan harga sebagai Decimal agar perhitungan berikutnya tidak meleset akibat ketidakpresisian float.

goldprice.py
# python: goldprice.py# curl-equivalent: https://api.goldprice.dev/v1/spot/XAU-USD-SPOTimport osfrom decimal import Decimalfrom typing import TypedDictimport requestsfrom cachetools import TTLCache, cachedfrom tenacity import (    retry,    retry_if_exception_type,    stop_after_attempt,    wait_exponential,)API_BASE = "https://api.goldprice.dev"API_KEY = os.environ["GOLDPRICE_API_KEY"]TIMEOUT = 5  # secondsclass SpotResponse(TypedDict):    symbol: str    quote_currency: str    price: Decimal    bid: Decimal | None  # only on plans that include bid and ask    ask: Decimal | None    is_stale: bool    computed_at: strclass RateLimited(Exception):    """Raised on HTTP 429 so tenacity retries with backoff."""@cached(cache=TTLCache(maxsize=128, ttl=60))@retry(    retry=retry_if_exception_type(RateLimited),    wait=wait_exponential(multiplier=1, min=2, max=30),    stop=stop_after_attempt(3),    reraise=True,)def spot(symbol: str = "XAU-USD-SPOT") -> SpotResponse:    """Fetch live spot price. Cached 60s per symbol, retries 3x on 429."""    resp = requests.get(        f"{API_BASE}/v1/spot/{symbol}",        headers={"X-API-Key": API_KEY},        timeout=TIMEOUT,    )    if resp.status_code == 429:        raise RateLimited(resp.text)    resp.raise_for_status()    data = resp.json()    return {        "symbol": data["symbol"],        "quote_currency": data["quote_currency"],        "price": Decimal(data["price"]),        "bid": Decimal(data["bid"]) if data.get("bid") else None,        "ask": Decimal(data["ask"]) if data.get("ask") else None,        "is_stale": data["is_stale"],        "computed_at": data["computed_at"],    }if __name__ == "__main__":    r = spot("XAU-USD-SPOT")    print(f"{r['symbol']}-{r['quote_currency']}: {r['price']} (computed {r['computed_at']})")

Jalankan

Jalankan file dari shell tempat Anda mengekspor GOLDPRICE_API_KEY. Panggilan pertama mengakses API; panggilan dalam 60 detik langsung memakai cache. Menjalankan proses baru tidak memakai cache sebelumnya karena cache hanya ada dalam proses; simpan di Redis jika perlu berbagi cache antarproses.

shell
python goldprice.py# XAU-USD: 4012.75 (computed 2026-10-23T07:00:18.221118+00:00)

Ganti mata uang atau logam

Format simbol adalah METAL-CURRENCY-SPOT. Berikan simbol dari 31 mata uang spot ke spot(). Setiap simbol memiliki cache terpisah dalam TTLCache, jadi dasbor yang mengambil 5 simbol setiap 60 detik mengirim 5 panggilan API/menit tanpa cache dan 0 saat dilayani cache.

goldprice.py · multivaluta
# USD spot, defaultspot("XAU-USD-SPOT")spot("XAU-INR-SPOT")spot("XAU-EUR-SPOT")# Silver in USDspot("XAG-USD-SPOT")

Hasil yang diharapkan

JSON
{  "symbol": "XAU",  "quote_currency": "USD",  "unit": "troy_ounce",  "contract_type": "spot",  "price": "4012.75",  "is_stale": false,  "computed_at": "2026-10-23T07:00:18.221118+00:00"}

Stdout menampilkan satu baris: symbol, quote_currency, price sebagai Decimal, dan penanda waktu computed_at berformat ISO 8601. Kode Anda selanjutnya memakai respons TypedDict tersebut.

Kesalahan umum

KodeGejalaSolusi
401requests.exceptions.HTTPError: 401 Client ErrorKunci API tidak ada atau tidak valid. Periksa GOLDPRICE_API_KEY: echo $GOLDPRICE_API_KEY. Jika kosong, ekspor ulang dari dasbor Anda. Klien memunculkan kesalahan variabel lingkungan saat impor, bukan saat pemanggilan, sehingga kegagalan muncul pada import goldprice pertama.
429Tiga percobaan ulang RateLimited dengan jeda gagal, lalu exception diteruskanBatas per menit sudah habis. Cache 60 detik mencegahnya saat pengambilan berkala stabil; jika banyak simbol berbeda dipanggil bersamaan, naikkan TTLCache.maxsize atau beri jeda antarpanggilan. Untuk volume tinggi berkelanjutan, lihat paket berbayar di /pricing.
N/AKesalahan presisi float menumpuk saat banyak harga dijumlahkanSelalu gunakan Decimal dalam perhitungan, jangan float. Klien mengembalikan harga sebagai Decimal; untuk serialisasi JSON, gunakan str(price) alih-alih mengubahnya ke float agar presisi tetap terjaga saat dikirim.

Langkah berikutnya

  • Simpan cache lintas proses dengan mengganti TTLCache menjadi cache berbasis Redis agar beberapa worker berbagi satu harga dalam memori
  • Tambahkan pembungkus bars() untuk /v1/bars?symbol=XAU-USD-SPOT&interval=1d&from=...&to=... dengan konversi pandas DataFrame untuk uji historis
  • Ganti requests dengan httpx.AsyncClient jika layanan Anda asinkron; bentuk respons tetap sama
  • Hubungkan klien ke endpoint FastAPI dan sediakan secara internal untuk layanan non-Python
  • Sediakan metrik Prometheus untuk rasio cache hit, latensi p50/p95, dan jumlah percobaan ulang 429

Pertanyaan

Seberapa sering harga diperbarui?

Endpoint spot diperbarui setiap 60 detik dengan data spot langsung; Free/tanpa kunci terlambat 15 menit, paket berbayar mendapat harga langsung. TTLCache di atas mengikuti interval tersebut: panggilan spot() berulang dalam 60 detik mengembalikan Decimal dari cache tanpa permintaan HTTP.

Apakah paket gratis cukup untuk pembaruan otomatis?

Tergantung pemakaiannya. Bot yang memanggil setiap menit = 1.440 panggilan/hari = ~43.000/bulan, melebihi kuota gratis 5.000/bulan. Maksimalkan cache dan panggil sesuai kebutuhan. Pengambilan rutin 1 panggilan/jam = 720/bulan, masih dalam kuota gratis. Untuk volume tinggi berkelanjutan, lihat paket berbayar di /pricing.

Bolehkah digunakan untuk keperluan komersial?

Penggunaan komersial diizinkan pada semua paket. Paket berbayar tidak memerlukan tautan atribusi; untuk Free, Anda wajib menampilkan tautan ke goldprice.dev yang terlihat di dekat harga emas.

Mengapa memakai Decimal, bukan float?

Decimal menjaga ketepatan perhitungan. Float dapat meleset saat penjumlahan: 0.1 + 0.2 == 0.30000000000000004. Menjumlahkan ribuan transaksi dengan float dapat menimbulkan kesalahan basis poin seiring waktu. API mengembalikan harga sebagai string dengan 2 angka desimal, misalnya "4012.75", agar klien dapat memakai Decimal.

Logam apa saja yang didukung?

Emas (XAU), perak (XAG), dan tembaga (HG) didukung. Platinum dan paladium tidak tersedia pada paket mana pun. Ganti kode logam dalam simbol, misalnya spot("XAG-USD-SPOT") untuk harga perak.

Apakah paket gratis benar-benar gratis?

Ya, 5.000 panggilan/bulan, tanpa kartu kredit dan tanpa kedaluwarsa. Dapatkan kuncinya di /onboarding.

Bisakah Claude menuliskannya untuk saya?

Ya. Buka Claude Desktop dengan server MCP goldprice.dev terpasang, lalu minta: Buat klien Python untuk endpoint goldprice.dev /v1/spot. Gunakan requests, Decimal, cachetools TTLCache 60 detik, dan tenacity untuk mencoba ulang saat 429 dengan jeda eksponensial. Baca kunci API dari GOLDPRICE_API_KEY. Server MCP memberi Claude skema terkini agar kode memakai nama kolom yang tepat sejak percobaan pertama.

Baca selanjutnya

Mulai dengan kunci API gratis

5.000 permintaan per bulan pada paket gratis. Tanpa kartu kredit.

Dapatkan kunci gratis