本サイトは中国からの輸出向けです。
API
The same data and calculations as the site, as a read-only JSON API. Every tool computes through the same code as its page, so an answer here is the page's answer, and the datasets are the ones the site shows, with their versions and sources.
It is for people who build their own tools or checks around export quotes, freight volume and tax refunds, and for software that needs the figures without scraping a page. Nothing here writes anything: you send inputs and get a result.
ベースURLhttps://chukoudan.com/v1/
エンドポイント
すべてのエンドポイントは /v1/ 以下にあり、JSONを返します。
| メソッド | アドレス | 内容 | 任意のパラメータ |
|---|---|---|---|
| GET | /v1/datasets | サイトが表示できるデータセットと、その現行バージョン。 | ?lang |
| GET | /v1/datasets/{id} | 1つのデータセットとそのすべてのバージョン(新しい順)。 | ?lang |
| GET | /v1/datasets/{id}/current | 現行バージョンのデータ行(ページ単位)。 | ?offset ?limit ?lang |
| GET | /v1/datasets/{id}/{version} | 指定バージョンのデータ行(ページ単位)。公開済みのバージョンは変更されません。 | ?offset ?limit ?lang |
| GET | /v1/refund-rate | 税関コード(HS)1件の輸出還付率:ライブラリにあるすべての期間と、適用される期間。輸出日を指定すればその日、指定しなければ今日(北京時間)で判定し、使った日は in_force_on に入ります。 | ?code ?export_date ?lang |
| GET | /v1/tools | すべてのツール:ID、名称、参照するデータ。 | ?lang |
| GET | /v1/tools/{id} | 1つのツール:名称、入力項目、参照するデータセット。 | ?lang |
| POST | /v1/tools/{id}/compute | 入力を与えてツールを実行します。結果はサイトのページと同じです。入力はJSONで本文に入れます。 | ?lang |
| GET | /v1/openapi.json | このAPIのOpenAPI 3.1ドキュメント。 | – |
| POST | /v1/quote | 見積計算(baojia)の入力と売主の条件から、買主に送る見積書を作ります。quote は構造化データ(https://chukoudan.com/schemas/quote/v1.json:価格と条件のみ、digest と根拠の為替レート付きで、買主が確認できます)、text はそのまま送れるプレーンテキスト、internal は売主自身の原価と利益で、買主には送りません。pricing.fxRate を省くとその日の人民元基準値を使います。当サイトは何も保存しません。 | ?lang |
No key, no account
There is nothing to sign up for: send a request. The API sets no cookie and does not store what you send to a calculation. A limit for each sender takes the place of a key.
The limit
Each sender may make a burst of up to 60 requests, refilled at 60 a minute. A sender is an IP address (for IPv6, its /64 network). Every answer says where you stand in its headers: RateLimit-Limit is the size of a full bucket, RateLimit-Remaining what is left, RateLimit-Reset the seconds until it is full again. When it is empty the answer is 429 with a Retry-After header: the seconds to wait before asking again.
A page of rows counts as more than one request: one for each 1000 rows it asks for. A request may ask for at most 5000 rows (limit), and offset skips rows. The body of a calculation may be up to 256 KB and must be JSON.
バケットに1回分しかない利用者が2回目のリクエストで受け取る応答:
curl 'https://chukoudan.com/v1/tools'
HTTP 429
access-control-allow-origin: *
cache-control: no-store
content-type: application/json
ratelimit-limit: 1
ratelimit-remaining: 0
ratelimit-reset: 60
retry-after: 60
{
"issues": [
{
"path": "",
"code": "api.rate_limited",
"values": {},
"message": "请求太频繁;请按响应头 Retry-After 给出的秒数之后再试。 / Too many requests; try again after the number of seconds in the Retry-After header."
}
],
"provenance": {
"api": "v1",
"site": "chukoudan.com",
"generated_at": "2026-10-07T04:00:00.000Z",
"language": "zh-CN",
"source_line": "来源:出口单 chukoudan.com · 生成于 2026-10-07",
"notice": "本站非官方渠道,仅供参考,以官方公布为准。",
"datasets": [],
"license": {
"status": "approved",
"ours": "dataset.license.ours",
"underlying": "dataset.license.underlying"
}
}
}キャッシュ
保存してよい応答には ETag と Cache-Control が付きます。データセットの一覧、バージョン一覧、現行バージョンの行は 1 分、ツールの説明は 5 分、現行でないバージョンの行は 1 日です。If-None-Match を付けて送り、内容に変更がなければ本文なしの 304 が返ります(制限には数えられます)。エラーと計算結果はすべて no-store です。
From a browser
Any website may call these routes from a visitor's browser (GET and POST, no credentials). Calculations accept JSON only: a request of another content type is refused with 415.
What an answer looks like
A calculation returns tool (its id), outputs (each figure by name), steps (the worked example, line by line), warnings and provenance. An input that is refused returns 400 with issues instead of outputs. Each step and warning carries its copy key (like cbm.more_than_20gp) and the values that fill it. For every tool (tuishui, baojia, fx-cost, cbm, container-load, fx-convert, unit-convert and maitou) each also carries a message: one ready sentence with the figures filled in, in the language chosen with lang. Where there is a message, use it as it is and do not work the figures out again; where there is none (a sentence that cannot be made whole), write from the key and the values.
Figures
Every figure is tagged so you know how to write it, and numbers are exact decimal strings, never floating point. A quantity has value, unit and sometimes places (keep that many decimals: pad with zeros to it, do not round again); money has amount and currency; ratio is a fraction (0.13 is 13 %); rate says per units of base cost value units of quote; count, code (a token from a fixed list) and date complete the set.
Where the figures come from
Every answer, errors included, carries provenance: api (the version, v1), site, generated_at, language, source_line (one credit line to quote as it is: this site, and the day of the data), datasets (each dataset version the answer drew on, with its published_at day, its origin and a source line you can cite) and license. Adding lang=zh-CN, en, ja or ko to any request chooses the language of each message, of source_line and of the source lines, and changes no figure; without lang they are in Chinese. The license holds its status and copy keys, not words: the words are on the data sources and licence page.
Errors
An error answer has issues (each with path, code, values and a message: one sentence in Chinese and English together, whatever lang says) and provenance. 400: the input was refused (path says which field, code why; codes are copy keys); 404: no such tool, dataset or version; 413: the body is too big; 415: it is not JSON; 429: over the limit; 500: something failed on our side, and the answer says nothing more about the cause.
A calculation
POST a tool's inputs to /v1/tools/ID/compute. This example asks for the cubic metres of 450 cartons of 60 × 40 × 50 cm at 18 kg, shipped LCL. The same inputs on the CBM page give the same figures.
リクエスト
curl -X POST 'https://chukoudan.com/v1/tools/cbm/compute' -H 'content-type: application/json' -d '{"inputs":{"cartons":[{"length":"60","width":"40","height":"50","grossWeight":"18","quantity":"450"}],"lengthUnit":"cm","weightUnit":"kg","mode":"lcl"}}'レスポンス
HTTP 200
access-control-allow-origin: *
cache-control: no-store
content-type: application/json
ratelimit-limit: 60
ratelimit-remaining: 59
ratelimit-reset: 1
{
"tool": "cbm",
"outputs": {
"totalVolume": {
"kind": "quantity",
"value": "54",
"unit": "m3"
},
"totalGrossWeight": {
"kind": "quantity",
"value": "8100",
"unit": "kg"
},
"perCartonVolume": {
"kind": "quantity",
"value": "0.12",
"unit": "m3"
},
"airVolumetric": {
"kind": "quantity",
"value": "9000",
"unit": "kg"
},
"airChargeable": {
"kind": "quantity",
"value": "9000",
"unit": "kg"
},
"airBy": {
"kind": "code",
"value": "volume"
},
"expressVolumetric": {
"kind": "quantity",
"value": "10800",
"unit": "kg"
},
"expressChargeable": {
"kind": "quantity",
"value": "10800",
"unit": "kg"
},
"expressBy": {
"kind": "code",
"value": "volume"
},
"lclChargeable": {
"kind": "quantity",
"value": "54",
"unit": "m3"
},
"lclBy": {
"kind": "code",
"value": "volume"
},
"chargeable": {
"kind": "quantity",
"value": "54",
"unit": "m3"
}
},
"steps": [
{
"id": "cbm.row",
"values": {
"row": {
"kind": "count",
"value": "1"
},
"length": {
"kind": "quantity",
"value": "60",
"unit": "cm"
},
"width": {
"kind": "quantity",
"value": "40",
"unit": "cm"
},
"height": {
"kind": "quantity",
"value": "50",
"unit": "cm"
},
"quantity": {
"kind": "count",
"value": "450"
},
"cartonVolume": {
"kind": "quantity",
"value": "120000",
"unit": "cm3"
},
"perCartonVolume": {
"kind": "quantity",
"value": "0.12",
"unit": "m3"
},
"volume": {
"kind": "quantity",
"value": "54",
"unit": "m3"
},
"airVolumetric": {
"kind": "quantity",
"value": "9000",
"unit": "kg"
},
"airDivisor": {
"kind": "count",
"value": "6000",
"grouping": false
},
"expressVolumetric": {
"kind": "quantity",
"value": "10800",
"unit": "kg"
},
"expressDivisor": {
"kind": "count",
"value": "5000",
"grouping": false
},
"grossWeight": {
"kind": "quantity",
"value": "18",
"unit": "kg"
},
"weight": {
"kind": "quantity",
"value": "8100",
"unit": "kg"
}
},
"message": "箱规 1:60 cm × 40 cm × 50 cm = 0.12 m3 × 450 箱 = 54 m3\n18 kg × 450 = 8100 kg\n120000 cm3 ÷ 6000 × 450 = 9000 kg(空运),÷ 5000 = 10800 kg(快递)"
},
{
"id": "cbm.total",
"values": {
"totalVolume": {
"kind": "quantity",
"value": "54",
"unit": "m3"
},
"totalGrossWeight": {
"kind": "quantity",
"value": "8100",
"unit": "kg"
},
"gp20Share": {
"kind": "ratio",
"value": "1.6307"
}
},
"message": "合计:总体积 54 m3,总毛重 8100 kg"
},
{
"id": "cbm.lcl",
"values": {
"volume": {
"kind": "quantity",
"value": "54",
"unit": "m3"
},
"weight": {
"kind": "quantity",
"value": "8.1",
"unit": "t",
"places": 3
},
"chargeable": {
"kind": "quantity",
"value": "54",
"unit": "m3"
},
"by": {
"kind": "code",
"value": "volume"
}
},
"message": "拼箱计费吨 W/M:较大值(54 m3,8.100 t)= 54 m3,按体积"
},
{
"id": "cbm.air",
"values": {
"volumetric": {
"kind": "quantity",
"value": "9000",
"unit": "kg"
},
"weight": {
"kind": "quantity",
"value": "8100",
"unit": "kg"
},
"chargeable": {
"kind": "quantity",
"value": "9000",
"unit": "kg"
},
"by": {
"kind": "code",
"value": "volume"
}
},
"message": "空运计费重:较大值(8100 kg,9000 kg)= 9000 kg,按体积"
},
{
"id": "cbm.express",
"values": {
"volumetric": {
"kind": "quantity",
"value": "10800",
"unit": "kg"
},
"weight": {
"kind": "quantity",
"value": "8100",
"unit": "kg"
},
"chargeable": {
"kind": "quantity",
"value": "10800",
"unit": "kg"
},
"by": {
"kind": "code",
"value": "volume"
}
},
"message": "快递计费重:较大值(8100 kg,10800 kg)= 10800 kg,按体积"
}
],
"warnings": [
{
"code": "cbm.more_than_20gp",
"values": {
"totalVolume": {
"kind": "quantity",
"value": "54",
"unit": "m3"
},
"gp20Volume": {
"kind": "quantity",
"value": "33.115",
"unit": "m3"
}
},
"level": "hint",
"next": "zhuanggui",
"message": "总体积 54 m3,超过一个 20GP 的容积(约 33.115 m3),看看用什么柜、要几个柜。"
}
],
"links": {
"page": "https://chukoudan.com/cbm/?cartons=60x40x50x18x450&lengthUnit=cm&weightUnit=kg&mode=lcl"
},
"provenance": {
"api": "v1",
"site": "chukoudan.com",
"generated_at": "2026-10-07T04:00:00.000Z",
"language": "zh-CN",
"source_line": "来源:出口单 chukoudan.com · 数据 2026-09-24",
"notice": "本站非官方渠道,仅供参考,以官方公布为准。",
"datasets": [
{
"id": "divisors",
"version": "2026-09-24-2",
"published_at": "2026-09-24",
"origin": "chukoudan-divisors",
"source": "体积重系数:常用系数(2026-09-24 整理),以承运商为准"
},
{
"id": "containers",
"version": "2026-09-24-2",
"published_at": "2026-09-24",
"origin": "chukoudan-container-reference",
"source": "柜型尺寸和最大载重:常用参考值(2026-09-24 整理),以承运商为准"
}
],
"license": {
"status": "approved",
"ours": "dataset.license.ours",
"underlying": "dataset.license.underlying"
}
}
}The warning is a hint (cbm.more_than_20gp): 54 m³ does not fit one 20GP, and next is the slug of a page that carries on from there.
A dataset
GET /v1/datasets lists the datasets the site shows; /v1/datasets/ID lists a dataset's versions; /v1/datasets/ID/current gives the rows of the current version and /v1/datasets/ID/VERSION a named one, which never changes once published. Each version has a content_hash, so you can tell whether what you hold is the same. Dataset answers link the CSV and JSON downloads.
リクエスト
curl 'https://chukoudan.com/v1/datasets/ports/current?limit=2&lang=en'レスポンス
HTTP 200
access-control-allow-origin: *
cache-control: public, max-age=60
content-type: application/json
etag: W/"5b2ec780f1e15a548c7a9f6a14a7b02d"
ratelimit-limit: 60
ratelimit-remaining: 59
ratelimit-reset: 1
{
"dataset": "ports",
"version": "2026-09-25",
"published_at": "2026-09-25",
"fetched_at": "2026-09-24T19:59:07Z",
"content_hash": "sha256:a222c1be3c0bd7146efc3a2b6a5f9ac0d246edfd4570b6075cfd6b0494eb37af",
"rows": 38,
"columns": [
"id",
"name.zh-CN",
"name.en",
"name.ja",
"name.ko",
"region",
"search.zh",
"search.pinyin",
"search.en"
],
"current": true,
"links": {
"self": "/v1/datasets/ports/2026-09-25",
"csv": "/data/ports/2026-09-25.csv",
"json": "/data/ports/2026-09-25.json"
},
"license": {
"ours": "dataset.license.ours",
"underlying": "dataset.license.underlying.free",
"draft": false
},
"offset": 0,
"limit": 2,
"next": 2,
"data": [
{
"id": "shanghai",
"name": {
"zh-CN": "上海",
"en": "Shanghai",
"ja": "上海",
"ko": "상하이"
},
"region": "上海",
"search": {
"zh": [
"上海港",
"洋山"
],
"pinyin": [
"sh",
"shg"
],
"en": [
"Yangshan"
]
}
},
{
"id": "ningbo",
"name": {
"zh-CN": "宁波",
"en": "Ningbo",
"ja": "寧波",
"ko": "닝보"
},
"region": "浙江",
"search": {
"zh": [
"宁波舟山",
"北仑",
"舟山"
],
"pinyin": [
"nb",
"nbzs"
],
"en": [
"Ningbo-Zhoushan",
"Beilun"
]
}
}
],
"provenance": {
"api": "v1",
"site": "chukoudan.com",
"generated_at": "2026-10-07T04:00:00.000Z",
"language": "en",
"source_line": "Source: 出口单 (Chukoudan), chukoudan.com · data 2026-09-25",
"notice": "This site is not an official channel. It is for reference only; the official publication prevails.",
"datasets": [
{
"id": "ports",
"version": "2026-09-25",
"published_at": "2026-09-25",
"origin": "chukoudan-port-list",
"source": null
}
],
"license": {
"status": "approved",
"ours": "dataset.license.ours",
"underlying": "dataset.license.underlying"
}
}
}A row keeps the stored strings exactly as published. Page with offset and limit; next is null on the last page.
これらの例は、APIのコード自体を2026-10-07に実行して取得したもので、編集していません。
The full description
GET /v1/openapi.json is the machine-readable description (OpenAPI 3.1) of every path, answer and tool input. It is generated from the tools themselves, so it cannot differ from what the API does. The tables of each tool's inputs below come from it.
OpenAPI 3.0 までしか読めないインポート用ツール(たとえば Coze(扣子))のために、同じ内容の 3.0 版も提供しています。
ツールと入力項目
各ツールのアドレスは /v1/tools/ にIDと /compute を付けたものです。以下に、入力項目、返す数値、参照するデータを示します。
FOB/CIF/CFR見積baojia
原価から3つの貿易条件の見積と利益を計算
- アドレス
POST /v1/tools/baojia/compute- サイト上のページ
- FOB/CIF/CFR見積
- 参照するデータ
central-parity@current, ports@current, refund-rates@current- 返す数値
priceFob, totalFob, commissionPriceFob*, commissionTotalFob*, profitFob, marginFob*, marginAltFob*, breakEvenFob, priceCfr*, totalCfr*, commissionPriceCfr*, commissionTotalCfr*, profitCfr*, marginCfr*, marginAltCfr*, breakEvenCfr*, priceCif*, totalCif*, commissionPriceCif*, commissionTotalCif*, profitCif*, marginCif*, marginAltCif*, breakEvenCif*, refundTotal, costTotal* (常に含まれるとは限りません)
| 入力 | 型 | 必須 |
|---|---|---|
mode | choice | 任意 |
price | decimal | 必須 |
quantity | decimal | 必須 |
unit | choice | 任意 |
taxRate | decimal | 必須 |
refundRate | decimal | 必須 |
domestic | decimal | 任意 |
domesticBasis | choice | 任意 |
currency | currency | 任意 |
fxRate | decimal | 必須 |
fxPer | choice | 任意 |
freight | decimal | 任意 |
freightBasis | choice | 任意 |
containers | integer | 任意 |
volume | decimal | 任意 |
insuranceRate | decimal | 任意 |
markup | decimal | 任意 |
commission | decimal | 任意 |
margin | decimal | 任意 |
marginBasis | choice | 任意 |
term | choice | 任意 |
quotedPrice | decimal | 任意 |
port | text | 任意 |
CBM / 容積重量cbm
CBM・総重量と、航空便・国際宅配便の請求重量を計算
- アドレス
POST /v1/tools/cbm/compute- サイト上のページ
- CBM / 容積重量
- 参照するデータ
divisors@current, containers@current- 返す数値
totalVolume, lclChargeable*, perCartonVolume*, totalGrossWeight*, airChargeable*, expressChargeable*, airVolumetric, expressVolumetric, chargeable*, airBy*, expressBy*, lclBy** (常に含まれるとは限りません)
| 入力 | 型 | 必須 |
|---|---|---|
cartons | rows | 必須 |
lengthUnit | choice | 任意 |
weightUnit | choice | 任意 |
mode | choice | 任意 |
airDivisor | integer | 任意 |
expressDivisor | integer | 任意 |
コンテナ積載計算ツールcontainer-load
1本に何箱入るか、何本必要か、どう積むか
- アドレス
POST /v1/tools/container-load/compute- サイト上のページ
- コンテナ積載計算ツール
- 参照するデータ
containers@current- 返す数値
perContainer20GP*, containers20GP*, lastContainer20GP*, rows20GP*, columns20GP*, layers20GP*, along20GP*, across20GP*, up20GP*, volumeUse20GP*, weightUse20GP*, limit20GP*, rank20GP*, spareLength20GP*, spareWidth20GP*, spareHeight20GP*, spareLengthIn20GP*, spareWidthIn20GP*, spareHeightIn20GP*, perContainer40GP*, containers40GP*, lastContainer40GP*, rows40GP*, columns40GP*, layers40GP*, along40GP*, across40GP*, up40GP*, volumeUse40GP*, weightUse40GP*, limit40GP*, rank40GP*, spareLength40GP*, spareWidth40GP*, spareHeight40GP*, spareLengthIn40GP*, spareWidthIn40GP*, spareHeightIn40GP*, perContainer40HQ*, containers40HQ*, lastContainer40HQ*, rows40HQ*, columns40HQ*, layers40HQ*, along40HQ*, across40HQ*, up40HQ*, volumeUse40HQ*, weightUse40HQ*, limit40HQ*, rank40HQ*, spareLength40HQ*, spareWidth40HQ*, spareHeight40HQ*, spareLengthIn40HQ*, spareWidthIn40HQ*, spareHeightIn40HQ*, perContainer45HQ*, containers45HQ*, lastContainer45HQ*, rows45HQ*, columns45HQ*, layers45HQ*, along45HQ*, across45HQ*, up45HQ*, volumeUse45HQ*, weightUse45HQ*, limit45HQ*, rank45HQ*, spareLength45HQ*, spareWidth45HQ*, spareHeight45HQ*, spareLengthIn45HQ*, spareWidthIn45HQ*, spareHeightIn45HQ*, best** (常に含まれるとは限りません)
| 入力 | 型 | 必須 |
|---|---|---|
lengthUnit | choice | 任意 |
weightUnit | choice | 任意 |
length | decimal | 必須 |
width | decimal | 必須 |
height | decimal | 必須 |
grossWeight | decimal | 任意 |
quantity | integer | 任意 |
fill | boolean | 任意 |
upright | boolean | 任意 |
maxLayers | integer | 任意 |
containerType | choice | 任意 |
単位換算unit-convert
長さ・重さ・体積を、国際的に定義された係数で換算
- アドレス
POST /v1/tools/unit-convert/compute- サイト上のページ
- 単位換算
- 参照するデータ
- なし(レートなどは入力として渡します)
- 返す数値
result
| 入力 | 型 | 必須 |
|---|---|---|
value | decimal | 必須 |
from | choice | 必須 |
to | choice | 必須 |
輸出還付計算ツールtuishui
貿易会社の免税・還付、製造企業の免・抵・退
- アドレス
POST /v1/tools/tuishui/compute- サイト上のページ
- 輸出還付計算ツール
- 参照するデータ
refund-rates@current, central-parity@current- 返す数値
refund*, basis*, inputVat*, costAddition*, nonCreditableOffset*, nonCreditable*, taxPayable*, endCredit*, exemptionOffset*, exemption*, exempted*, carriedForward*, taxDue** (常に含まれるとは限りません)
| 入力 | 型 | 必須 |
|---|---|---|
enterpriseType | choice | 必須 |
mode | choice | 任意 |
exports | rows | 必須 |
outputTax | decimal | 任意 |
inputTax | decimal | 任意 |
carriedCredit | decimal | 任意 |
declaredEndCredit | decimal | 任意 |
決済為替レートfx-convert
人民元の対外為替仲値と、あなたの銀行レートで見積もる両替額
- アドレス
POST /v1/tools/fx-convert/compute- サイト上のページ
- 決済為替レート
- 参照するデータ
central-parity@current- 返す数値
midpoint, bankRate*, gap*, gapShown*, estimated*, atMidpoint*, atBank*, difference** (常に含まれるとは限りません)
| 入力 | 型 | 必須 |
|---|---|---|
currency | currency | 必須 |
amount | decimal | 任意 |
bankRate | decimal | 任意 |
keptRate | decimal | 任意 |
keptMidpoint | decimal | 任意 |
keptOn | text | 任意 |
両替コスト計算ツールfx-cost
銀行とほかの方法で、1年間に手元に残る人民元を比較
- アドレス
POST /v1/tools/fx-cost/compute- サイト上のページ
- 両替コスト計算ツール
- 参照するデータ
central-parity@current- 返す数値
annualBank, feesBank, costBank, gainBank, rankBank, annualB*, feesB*, costB*, gainB*, rankB*, annualC*, feesC*, costC*, gainC*, rankC*, annualMidpoint, best* (常に含まれるとは限りません)
| 入力 | 型 | 必須 |
|---|---|---|
receipts | rows | 必須 |
bankFee | decimal | 任意 |
useB | boolean | 任意 |
nameB | text | 任意 |
feePercentB | decimal | 任意 |
feePerReceiptB | decimal | 任意 |
useC | boolean | 任意 |
nameC | text | 任意 |
feePercentC | decimal | 任意 |
feePerReceiptC | decimal | 任意 |
荷印作成maitou
メイン・サイドマークをA4用紙または 100×150 mm ラベルにそのまま印刷
- アドレス
POST /v1/tools/maitou/compute- サイト上のページ
- 荷印作成
- 参照するデータ
- なし(レートなどは入力として渡します)
- 返す数値
- –
| 入力 | 型 | 必須 |
|---|---|---|
cartons | integer | 必須 |
length | decimal | 必須 |
width | decimal | 必須 |
height | decimal | 必須 |
grossWeight | decimal | 必須 |
netWeight | decimal | 必須 |
lines | rows | 任意 |
capitals | boolean | 任意 |
ファイルが必要な場合は、各データセットの引用可能なページからCSVとJSONをダウンロードできます:データの出典とライセンス