ブログ/開発者向け

Pythonで金価格を1グラム単位で取得する(24K・22K・18K)

APIキーなしで24K、22K、18Kの1グラム当たり金価格をPythonで取得し、Decimalで安全に計算する方法。

開発者向け
Pythonで金価格を1グラム単位で取得する(24K・22K・18K)

アプリで1グラム当たりの金価格が必要なら、公開/v1/caratエンドポイントから純度別の値を直接取得できます。1回のリクエストで24K、22K、21K、20K、18K、16K、14K、10Kが返り、試用時はAPIキーも不要です。

Pythonで1グラム当たりの価格を取得する

標準ライブラリだけを使い、金額をDecimalとして読み取ります。これにより浮動小数点の誤差を避けられます。

import json
from decimal import Decimal
from urllib.parse import urlencode
from urllib.request import Request, urlopen

url = "https://api.goldprice.dev/v1/carat?" + urlencode({"currency": "JPY"})
with urlopen(Request(url, headers={"Accept": "application/json"}), timeout=10) as response:
    payload = json.load(response)

prices = {
    "currency": payload["currency"],
    "timestamp": payload["timestamp"],
    "24k": Decimal(payload["price_gram_24k"]),
    "22k": Decimal(payload["price_gram_22k"]),
    "18k": Decimal(payload["price_gram_18k"]),
}

JPYUSDEURGBPINRIDRAEDなどに変更できます。価格の観測時点を示すtimestampも保存してください。

金製品の地金価値を計算する

12.5グラムの18K製品なら、18Kのグラム単価に重量を掛け、最後に一度だけ丸めます。

from decimal import Decimal, ROUND_HALF_UP

weight = Decimal("12.5")
value = (weight * prices["18k"]).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)

エンドポイントのグラム単価は、指定通貨の最小単位の精度で返ります。この結果は金含有量の参考価値であり、小売価格や買取価格ではありません。加工費、宝石、税、プレミアム、精錬費、買取控除は別です。

グラムと純度の計算方法

APIはXAU価格を指定通貨へ換算し、トロイオンス価格を31.1034768で割り、22 / 2418 / 24などの純度比を掛けます。

本番運用チェック

  • 金額はDecimalのまま扱う。
  • 値とtimestampを一緒に保存する。
  • 必要な鮮度に合わせて成功レスポンスをキャッシュする。
  • 取得失敗をゼロや新しい時刻で置き換えない。
  • 結果を決済価格ではなく参考値と表示する。
  • アカウントキーはサーバーだけに置く。

全フィールドはcarat APIドキュメント、日次OHLCは履歴APIを参照してください。

関連ガイド

開発者向け

Google Sheetsで金のポートフォリオを作る

Google Sheetsに金のポートフォリオテンプレートを取り込み、基準価格を更新して、保有品ごとの参考評価額、購入費用、差額を計算します。

読む →
開発者向け

リアルタイム金価格チャートはどう動くのか?

現物価格、OHLCバー、UTCタイムスタンプ、制御されたポーリングを組み合わせる仕組みを、TypeScriptとSVGの実例で解説します。

読む →
開発者向け

為替のルックアヘッド・バイアスを避けて現地通貨建てゴールドをバックテストする

確定済みのXAU/USD日次バーと過去のFX観測値を組み合わせ、当時は入手できなかったレートを誤って使うことなく、現地通貨建てのゴールド戦略をテストする方法。

読む →

goldprice.dev

リアルタイムの金価格、ヒストリカルOHLC、マルチソース集計 — REST・SSE経由で提供。