bars エンドポイントへの 1 回のリクエストで、商品の日次の始値・高値・安値・終値が返ります。短いスクリプトでそれを CSV に書き出せます。2026年10月1日から23日までの金には、日次の行が 17 行あります。週末のバーはありません。
API で日次の金バーを取得する
USD建ての金には GET /v1/commodities/spot/XAU/USD/bars を使います。各バーには timestamp と、open、high、low、close の 10 進数文字列が含まれます。スクリプトはこれらの価格フィールドをそのまま CSV に書き出し、日付はタイムスタンプから取ります。出力の列は date、open、high、low、close です。
- APIキーを環境変数に設定する 無料の API キーを取得し、環境変数
NARWHAL_API_KEYに保存します。スクリプトはこの変数を読み取り、Authorization: Bearer YOUR_KEYヘッダーでキーを送信します。 - 日付と間隔を設定する
startとendはどちらも必須の ISO タイムスタンプです。この例では2026-10-01T00:00:00Zから2026-10-24T00:00:00Zまでを指定し、intervalを1dにして、2026年10月1日から23日の日次の金バーを取得します。 - スクリプトを bars.py として保存する CSV のヘッダーとバーのフィールドは同じ順序のままにしてください。スクリプトは
https://api.narwhalapi.comにリクエストを送り、返された行を標準出力に書き出すため、次の手順のコマンドでそれをファイルにできます。import csv, os, sys import requests H = {"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"} params = { "start": "2026-10-01T00:00:00Z", "end": "2026-10-24T00:00:00Z", "interval": "1d", "limit": 500, } out = csv.writer(sys.stdout) out.writerow(["date", "open", "high", "low", "close"]) cursor = None while True: if cursor: params["cursor"] = cursor body = requests.get( "https://api.narwhalapi.com/v1/commodities/spot/XAU/USD/bars", params=params, headers=H, timeout=15, ).json() for b in body["bars"]: out.writerow([b["timestamp"][:10], b["open"], b["high"], b["low"], b["close"]]) cursor = body.get("next_cursor") if not cursor: break - gold.csv を書き出す CSV ファイルを書き出すには
python bars.py > gold.csvを実行します。2026年10月1日から23日の場合、出力はヘッダー行の下に日次のデータ行が 17 行並びます。
ループの前の out.writerow がヘッダーを作ります。ループ内では、out.writerow を呼ぶたびに、そのヘッダーの順序でバーが 1 行追加されます。価格フィールドはレスポンスの 10 進数文字列のままで、日付は b["timestamp"][:10] から取ります。シートやモデルで日次の終値を使うには、必要な日付の行から close の値を取ってください。同じ行にそのバーの始値・高値・安値もあります。1 時間足や 1 分足で書き出す場合も、このスクリプトが書くのは各タイムスタンプの日付部分だけです。
履歴テーブルを使う、またはシートに取り込む
スクリプトを書かずに表を使うには、金のコモディティページで価格履歴を開いてください。ログイン済みのアカウントは、コモディティのページから履歴をCSVでダウンロードすることもできます。
スクリプトの CSV を Excel に取り込むには、データ > テキストまたは CSV から を使います。Google スプレッドシートでは、ファイル > インポート を使います。ファイルには日付と各バーの始値・高値・安値・終値が入っているので、書き出した同じ履歴をシートでもモデルの入力でも使えます。行を取り込むときは、日付列を価格と一緒に残してください。
ダウンロード方法と間隔を選ぶ
| 状況 | 適した方法 | 理由 |
|---|---|---|
| ざっと確認する | ウェブサイトのチャート | 商品ページで金価格の履歴を見る |
| 繰り返し使えるダウンロード、またはモデルの入力 | スクリプト | リクエストしたバーを CSV に書き出す |
| 1 時間足または 1 分足のデータ | interval を 1h または 1m にしたスクリプト | 必要な間隔を指定し、期間を短くする |
bars エンドポイントの interval は 1m、1h、1d を受け付けます。日次の履歴には 1d のままにしてください。1 時間足や 1 分足のデータが必要なら、このパラメーターを変更し、リクエストする期間を短くします。サンプルの日付と CSV の例は日次バーのものです。
金価格の履歴に週末がないのはなぜですか?
現物の金は、週末の休場中はバーがありません。2026年10月1日から23日は暦の上で 23 日間ですが、日次バーは 17 本で、すべて平日です。CSV の日付は、返されたバーの日付として読んでください。日次の間隔では、週末の行はファイルに追加されません。
1 回のリクエストで何本のバーが返りますか?
各リクエストは最大 limit 本のバーを返し、スクリプトでは 500 です。ループは next_cursor が null になるまでたどり、各レスポンスのバーを同じ CSV に書き込みます。日付や間隔を変えるときも、後続のページまで書き出せるように、このループは残してください。長い期間では、カーソルが次のページを選ぶ間も start、end、interval は維持します。スクリプトは次のリクエストの前に、そのカーソルを params に追加します。ヘッダーはループの外にあるので、全ページが同じ列名を共有します。
409 cursor_expired は、カーソルなしでやり直す必要があるという意味です。スクリプトの冒頭と同じく cursor = None で書き出しを最初からやり直し、その新しいリクエストからファイルを書いてください。
開始日が系列の開始より前の場合はどうなりますか?
すべてのアカウントで全履歴を取得できます。CSVがどこから始まるかは、最初に返された日付で確認してください。系列はリクエストの開始日より後に始まることがあります。
実例:2026年10月の金
サンプルの 2026年10月の日次リクエストから始めます。返される日付は 2026-10-01 から 2026-10-23 までで、データ行は 17 行です。CSV のヘッダーを書き、続けて各バーの日付と価格フィールドをそのヘッダーの順に書きます。最初の終値は 2026年10月1日の 4177.4458 です。これは最初のデータ行の close 列に入り、日付、始値、高値、安値の後に来ます。
| 日付 | 次を開き | 最高 | 最低 | 閉じる |
|---|---|---|---|---|
| 2026-10-01 | 4156.8352 | 4192.5215 | 4139.7787 | 4177.4458 |
| 2026-10-02 | 4177.2183 | 4225.6497 | 4125.9232 | 4141.5280 |
公開。