FinceptTerminal 宏观经济数据源完全指南:FRED、World Bank、IMF 与 OECD 等 11 大机构数据接入实战
本文以 fincept-qt/scripts/ECONOMIC_DATA_SOURCES.md 为骨架,系统讲解 FinceptTerminal 内置的 11 个国际机构经济数据源——从数据源选型、API Key 配置、Python 函数调用到命令行抓取,并结合
fincept-qt/scripts/下的真实源码(fred_data.py、worldbank_data.py、imf_data.py、oecd_data.py等)深入解析各数据源的底层实现、参数语义与错误处理机制。读完本文,你将能够独立配置密钥、按需拉取 GDP、通胀、失业率、贸易与货币政策数据,并理解这些脚本如何以 JSON 形式为 FinceptTerminal 的 Qt/C++ 前端(如FredPanel)提供数据。
概述:一套脚本覆盖全球宏观经济数据
FinceptTerminal 在 fincept-qt/scripts/ 目录下维护了一套面向国际金融机构与央行的数据抓取脚本。这些脚本统一遵循"Python 抓取 + JSON 输出 + Qt/C++ 消费"的架构:每个脚本既可被 Python 代码直接 import 调用,也可作为命令行工具运行并以 json.dumps 输出结构化结果,方便 C++ 侧通过 PythonRunner 拉起子进程解析。
全部 11 个数据源均提供宏观经济指标、贸易统计与政策数据的免费访问,其中 8 个源完全无需 API Key。脚本内部大量实现了连接池复用、并发抓取、24 小时缓存与分级错误处理(401/403 密钥无效、429 限流、超时、JSON 解析失败等),确保数据面板在实际使用中的健壮性。
数据源总览:11 个国际机构一表尽览
以下表格完整列出了文档登记的全部数据源,以及各脚本的入口文件与鉴权要求:
| 机构 | 脚本文件 | API Key | 数据覆盖 |
|---|---|---|---|
| FRED(圣路易斯联储) | fred_data.py | 🔑 必需 | 美国联邦储备经济数据,80 万+ 条时间序列 |
| World Bank(世界银行) | worldbank_data.py | ❌ 无需 | 全球发展指标,200+ 国家 |
| IMF(国际货币基金组织) | imf_data.py | ❌ 无需 | 国际金融、GDP、通胀、国际收支 |
| OECD(经合组织) | oecd_data.py | ❌ 无需 | 发达经济体,38 个成员国 |
| BEA(美国经济分析局) | bea_data.py | 🔑 必需 | 美国 GDP、贸易、产业数据 |
| BLS(美国劳工统计局) | bls_data.py | 🔑 可选 | 就业、CPI、工资数据 |
| ECB(欧洲央行) | ecb_data.py | ❌ 无需 | 欧元区货币与利率数据 |
| WTO(世界贸易组织) | wto_data.py | ❌ 无需 | 国际贸易统计 |
| WITS(世界综合贸易解决方案) | wits_trade_data.py | ❌ 无需 | 关税与贸易流量 |
| UNESCO(联合国教科文组织) | unesco_data.py | ❌ 无需 | 教育、科学、文化统计 |
| HDX(人道主义数据交换) | hdx_data.py | ❌ 无需 | 危机与人道主义数据 |
注意:表中对 WTO 的标注为"无需 API Key",但其源码 wto_data.py 支持通过
subscription_key传入Ocp-Apim-Subscription-Key请求头,说明该源在需要更高配额时可选用订阅密钥,默认匿名访问可用。
数据分类:五大宏观主题如何映射到数据源
文档将 11 个数据源按业务主题划分为五类,在 FinceptTerminal 的经济学界面中可按此分类组织面板与指标:
| 类别 | 数据源 | 示例指标 |
|---|---|---|
| 宏观经济 | FRED、World Bank、IMF、OECD | GDP、通胀、失业率、利率 |
| 贸易与商业 | WTO、WITS、BEA | 进出口、关税、贸易差额 |
| 劳动力与就业 | BLS、OECD | 就业率、工资、CPI、生产率 |
| 货币政策 | FRED、ECB、IMF | 货币供应、汇率、央行利率 |
| 发展议题 | World Bank、UNESCO、HDX | 贫困、教育、健康、基础设施 |
API Key 配置:三个密钥的环境变量方案
文档明确了三类密钥的配置方式,全部通过环境变量注入,脚本启动时通过 os.environ.get(...) 读取,不落盘、不硬编码,便于生产环境安全托管:
# 必需(Required):FRED 数据访问的前提
export FRED_API_KEY="your_key_here"
# 必需(Required):BEA 数据访问的前提
export BEA_API_KEY="your_key_here"
# 可选(Optional):提升 BLS 请求频率上限
export BLS_API_KEY="your_key_here"
结合源码,三个密钥的影响面各有不同:
FRED_API_KEY:fred_data.py 在make_fred_request中首先检查该变量,若为空直接返回{"error": "FRED API key not configured. Set FRED_API_KEY environment variable.", "error_code": "MISSING_API_KEY"};若服务端返回 401/403,则判定为INVALID_API_KEY。Qt 前端 FredPanel.cpp 也会据此在界面上提示"Set FRED_API_KEY environment variable",形成"脚本报错 → 界面提示"的闭环。BEA_API_KEY:bea_data.py 的BEAWrapper.__init__通过api_key or os.environ.get('BEA_API_KEY', '')读取,随后在每次请求中作为UserID参数与method、resultformat=JSON一并提交。BLS_API_KEY:bls_data.py 将其作为可选增强,未配置时匿名访问仍有可用配额,配置后可提高每日请求次数上限。
使用示例:四种核心数据源的 Python 调用
文档给出了四种代表性调用。结合源码中的真实函数签名,这些示例可完整展开如下:
# FRED —— 美国经济数据(需已配置 FRED_API_KEY)
from fred_data import get_series
gdp = get_series('GDP', observation_start='2020-01-01')
# 实际签名:get_series(series_id, start_date, end_date, frequency, transform)
# frequency: a/q/m/w/d(年/季/月/周/日),transform: chg/pch/log(差分/百分比/对数)
# 返回:series_id、title、units、frequency、seasonal_adjustment、observations[]
# World Bank —— 全球发展指标(无需密钥)
from worldbank_data import get_indicator
poverty = get_indicator('SI.POV.DDAY', country='all', date='2010:2020')
# 实际入口是 get_indicators(country_code, indicator, date_range, per_page)
# 常用指标常量:NY.GDP.PCAP.CD(人均GDP)、NY.GDP.MKTP.KD.ZG(GDP增速)、
# FP.CPI.TOTL.ZG(通胀)、SL.UEM.TOTL.ZS(失业率)、SP.POP.TOTL(人口)
# IMF —— 国际金融数据(无需密钥)
from imf_data import get_data
balance = get_data(database='BOP', indicator='BCA', country='USA')
# 实际入口在 IMFDataWrapper 类:get_economic_indicators()、get_direction_of_trade()
# 支持 IRFCL(国际储备)、FSI(金融稳健)、DOT(贸易方向)三大数据集
# OECD —— 发达经济体数据(无需密钥)
from oecd_data import get_dataset
unemployment = get_dataset('UNEMP', country='USA+GBR+DEU')
# 实际入口在 OECDWrapper 类:get_gdp_real()、get_consumer_price_index()、
# get_unemployment()、get_gdp_forecast()、get_interest_rates()
需要特别说明的是,文档中的函数名(get_indicator、get_data、get_dataset)在仓库中对应的是各脚本的实际实现——例如 World Bank 的公开函数为 get_indicators,IMF 与 OECD 则封装为类方法。文末的"各源源码级详解"给出了每个源的真实入口。
命令行使用:脚本即 CLI,JSON 即接口
所有脚本均支持 python xxx.py <command> <args> 形式的命令行调用,输出 indent=2 格式化的 JSON,这是 FinceptTerminal 的 C++ 侧(如 PythonRunner)拉取数据的主要方式。以下为各源的代表性命令:
# FRED:单序列 / 多序列并发 / 搜索 / 分类
python fred_data.py series GDP 2020-01-01 2024-12-31 q pch
python fred_data.py multiple GDP UNRATE CPIAUCSL 2015-01-01 2024-12-31
python fred_data.py search inflation 20
python fred_data.py categories 0
python fred_data.py category_series 10 50
python fred_data.py releases 86 10
# World Bank:国家 / 指标 / 大宗商品 / 经济快照 / 区域对比
python worldbank_data.py countries
python worldbank_data.py indicators USA NY.GDP.MKTP.KD.ZG 2015:2024
python worldbank_data.py gdp_per_capita USA,CHN,IND 20
python worldbank_data.py commodity_prices PCRUDE_BRENT 10
python worldbank_data.py economic_snapshot USA
python worldbank_data.py regional_comparison EAP NY.GDP.PCAP.CD 5
# IMF:经济指标 / 贸易方向 / 可用指标 / 综合数据
python imf_data.py economic_indicators USA irfcl_top_lines quarter
python imf_data.py direction_of_trade USA all all quarter
python imf_data.py available_indicators reserves
python imf_data.py comprehensive_economic_data USA
# OECD:实际GDP / CPI / 失业率 / 利率 / 国家清单
python oecd_data.py gdp_real united_states quarter 2015-01-01 2024-12-31
python oecd_data.py cpi united_states total monthly index
python oecd_data.py unemployment united_states quarter
python oecd_data.py interest_rates united_states monthly
python oecd_data.py country_list
# ECB / WTO / WITS / UNESCO / HDX
python ecb_data.py currency_rates
python wto_data.py timeseries_data --i TP_A_0010 --r US
python wits_trade_data.py trade-data --reporter=840 --partner=000 --year=2020
python unesco_data.py education_data
python hdx_data.py search_datasets
以 fred_data.py 为例,其 multiple 子命令会自动识别 YYYY-MM-DD 格式的参数位(长度 10 且含 -)来区分序列 ID 与起止日期,并通过 ThreadPoolExecutor 以最多 5 个并发抓取多序列(max_workers = min(5, len(series_ids))),最后按原顺序返回结果——这是文档中"Optimized with concurrent fetching"承诺的实现细节。
各数据源源码级详解
FRED(联邦储备经济数据):80 万+ 时间序列
- 鉴权:必需 API Key,读取自环境变量
FRED_API_KEY。 - API 基础地址:
https://api.stlouisfed.org/fred(见 fred_data.py 的FRED_API_BASE)。 - 核心能力:
get_series(series_id, ...):拉取序列观测值 + 元数据(标题、单位、频率、季节性调整),自动跳过值为.的缺失观测;search_series(text, limit):按热度排序搜索序列,返回popularity字段便于选热门指标;get_categories()/get_category_series():按分类树浏览;get_release_dates():获取发布日历;get_multiple_series():并发批量抓取。
- 连接池:模块级复用
requests.Session+HTTPAdapter(pool_connections=10, pool_maxsize=10, max_retries=3),降低重复建连开销。 - 限流与错误处理:429 时读取
Retry-After头计算等待秒数;401/403 归类为INVALID_API_KEY。 - 数据纵深:80 万+ 条时间序列,覆盖美国核心经济指标,历史可回溯至 1776 年,支持实时更新。
World Bank(世界银行):全球发展指标
- 鉴权:无需密钥,公开 API(worldbank_data.py)。
- API 基础地址:
https://api.worldbank.org/v2,默认请求 JSON 格式。 - 核心能力:
get_indicators():按国家 + 指标 + 年份范围抓取,per_page默认 1000;get_gdp_per_capita():人均 GDP 快捷方法;get_commodity_prices():大宗商品 Pink Sheet 数据(Brent/WTI/Dubai 原油、铜、黄金、咖啡、小麦、玉米、大米等),按月度频率返回;get_economic_snapshot():一次返回某国 GDP 增速、通胀、失业率、人口、预期寿命六项关键指标的最新值;get_regional_comparison():按区域(AFR、EAP、ECA、LAC、MENA、SAS、NAC)批量对比,因 API 单请求有国家数限制,源码按 20 国一批(batch_size = 20)自动分批。
- 响应处理:World Bank API 返回数组结构(首元素为元数据),
_make_request会剥离出data与metadata(page/pages/per_page/total),并统一捕获 HTTP、超时、连接、JSON 解码异常。
IMF(国际货币基金组织):国际金融与贸易
- 鉴权:无需密钥,封装为
IMFDataWrapper类(imf_data.py)。 - API 基础地址:
http://dataservices.imf.org/REST/SDMX_JSON.svc/,请求头声明User-Agent: Fincept-Terminal/1.0。 - 三大数据集:
- IRFCL(国际储备与外币流动性):内置
irfcl_top_lines、reserve_assets、gold_reserves等预设符号组合; - FSI(金融稳健指标):核心/潜在/鼓励集等五套预设,涵盖资本充足率(
FSI_CAPR)、不良贷款(FSI_NPL)、ROA/ROE; - DOT(贸易方向):出口
TXG_FOB_USD、进口TMG_CIF_USD、贸易差额TBG_USD。
- IRFCL(国际储备与外币流动性):内置
- 核心方法:
get_economic_indicators()、get_direction_of_trade()、get_available_indicators()、get_comprehensive_economic_data()。 - 参数语义:频率映射
annual/quarter/monthly → A/Q/M;部门映射government→S1311、central_bank→S121、monetary_authorities→S1X;内置 100+ 国名字典自动归一化为 ISO 两字母代码,支持关键词模糊匹配。 - 容错设计:每个端点独立报错,返回统一的
IMFError结构(endpoint/error/status_code/timestamp),"单个端点失败不影响其他端点"。
OECD(经合组织):SDMX v1/v2 双协议自动回退
- 鉴权:无需密钥,封装为
OECDWrapper类(oecd_data.py)。 - API 基础地址:
https://sdmx.oecd.org/public/rest/(v1)与.../v2/(v2)。 - 核心能力:
get_gdp_real()、get_consumer_price_index()、get_gdp_forecast()、get_unemployment()、get_interest_rates()、get_economic_summary()(组合式摘要,逐端点执行并记录failed_endpoints)。 - 实现亮点:
- v1/v2 自动回退:优先请求 SDMX v2 的 dataflow 结构(如 GDP 使用
OECD.SDD.NAD/DSD_NAMAIN1@DF_QNA),失败后回退 v1 端点; - 多格式解析:按
Accept头协商 SDMX-JSON / SDMX-ML(XML,经defusedxml安全解析) / SDMX-CSV; - 内置映射表:
COUNTRY_TO_CODE_GDP、COUNTRY_TO_CODE_CPI支持g7、g20、euro_area(EA20)、nafta等集团代码;CPI 的EXPENDITURE_DICT内置 25+ 支出类别(食品、住房、交通、能源等); - 历史兼容:为老版本 OpenSSL 提供
OP_LEGACY_SERVER_CONNECT自定义 SSL 适配器; - 本地缓存:默认缓存目录
~/.oecd_cache; - 诚实的降级提示:当 GDP 预测端点因 API 结构变化不可用时,返回包含
suggestion字段的错误(建议改用历史 GDP 与外部预测源),而非伪装成成功。
- v1/v2 自动回退:优先请求 SDMX v2 的 dataflow 结构(如 GDP 使用
- 数据纵深:38 个成员国 + 区域集团,标准化指标支持跨国对比与政策分析。
BEA(美国经济分析局):美国 GDP 与产业账目
- 鉴权:必需 API Key(
BEA_API_KEY),注册后获取。 - API 基础地址:
https://apps.bea.gov/api/data/,每次请求附带UserID、method、resultformat=JSON;GetData类方法缺省Year时自动补当前年份(bea_data.py)。 - 支持数据集(源码 docstring 完整列举):
NIPA(国民收入与产品账户)、NIUnderlyingDetail、FixedAssets(固定资产)、MNE(跨国企业)、GDPbyIndustry(分产业 GDP)、ITA(国际交易)、IIP(国际投资头寸)、InputOutput(投入产出表)、UnderlyingGDPbyIndustry、IntlServTrade(国际服务贸易)、Regional(区域经济账户)。 - 方法族:
GetDatasetList、GetParameterList、GetParameterValues、GetParameterValuesFiltered、GetData,统一走_make_request并对BEAAPI.Error结构做显式解析。
BLS(美国劳工统计局):就业与价格
- 鉴权:可选 API Key(
BLS_API_KEY),匿名可用、配置后配额更高。 - API 基础地址:
https://api.bls.gov/publicAPI/v2/timeseries/data/,另有 FTP 批量下载地址(bls_data.py)。 - 核心能力:
- 内置
SURVEY_CATEGORIES映射 14 类调查(cpi、pce、ppi、ip、jolts、nfp、cps、lfs、wages、ec、sla、bed、tu)及其系列前缀; - 内置
POPULAR_SERIES热门序列字典(CPIAUCSL、UNRATE、PAYEMS、CIVPART、EMRATIO等); - 24 小时进程内缓存:
_cache_timeout = 24 * 60 * 60,相同序列请求直接命中缓存,减少配额消耗。
- 内置
ECB(欧洲央行):欧元区货币数据
- 鉴权:无需密钥(ecb_data.py)。
- 核心能力:
available_categories、currency_rates(欧元参考汇率,解析eurofxref-daily.xml每日 XML)、yield_curve(AAA 评级 3 个月至 30 年期的即期/远期/平价收益率,通过--rating与--type参数)、balance_of_payments(含 US/JP/GB/CH/CN/IN 等主要国家,按--country、--frequency筛选)。 - 数据纵深:欧元区货币统计、利率、汇率与银行部门数据。
WTO(世界贸易组织):多 API 贸易数据
- 鉴权:无需密钥,可选订阅密钥(
Ocp-Apim-Subscription-Key头)(wto_data.py)。 - 四大子 API:
qrs(数量限制)、eping(SPS/TBT 通报)、timeseries/v1(贸易统计,如TP_A_0010指标 + 国家代码US)、tfad(贸易便利化协定数据库)。 - 异步实现:基于
aiohttp的fetch_data协程,统一处理 JSON/XML 响应与分页。
WITS(世界综合贸易解决方案):关税与贸易流量
- 鉴权:无需密钥,基于 World Bank WITS 平台(wits_trade_data.py)。
- API 基础地址:
https://wits.worldbank.org/API/V1。 - 核心能力:
indicators、trade-data、tariff-data、product-tariff、catalog;参数支持--reporter/--partner(ISO 三位国家码,如 840=美国、000=世界)、--year、--product(HS 编码级商品关税)。 - 数据纵深:266 个国家/地区,商品级(HS 编码)贸易与关税/非关税措施数据。
UNESCO(联合国教科文组织):教育、科学与文化
- 鉴权:无需密钥,UIS(UNESCO Institute for Statistics)公开 API(unesco_data.py),协议为 CC BY-SA 4.0。
- 数据类别:教育(入学率、完成率、识字率、师资)、科技与创新(R&D 支出、研究人员、专利)、文化(遗产、文化就业)、人口与社会经济。
- 数据纵深:200+ 国家/地区,时间序列自 1970 年代至今,10 万+ 指标,支持按性别、年龄、区域多重细分。
HDX(人道主义数据交换):危机数据
- 鉴权:无需密钥,直接实现 CKAN API(hdx_data.py),无第三方依赖(纯
urllib)。 - API 基础地址:
https://data.humdata.org/api/3,请求头User-Agent: FinceptTerminal_GeopoliticsAnalytics/3.0。 - 核心能力:
action/package_search等 CKAN 动作端点,用于搜索人道主义危机相关数据集,与 FinceptTerminal 的地缘政治分析模块联动。
技术细节与使用前提
文档对全源统一技术特征做了总结,结合源码可进一步明确各源的实现差异:
- 协议:全部为 REST API(IMF/OECD/WTO 基于 SDMX 标准,HDX 基于 CKAN);
- 格式:JSON 为主(FRED 显式传
file_type=json,World Bank 显式传format=json),部分支持 CSV/XML(OECD 支持三种 SDMX 格式协商,BLS 支持 FTP 批量下载); - 限流:因源而异,整体宽松;FRED 429 会解析
Retry-After,BLS 建议配置 Key 提升配额,FRED 多序列并发限制为 5; - 历史深度:多数源提供 10 年以上历史,FRED 可回溯至 1776 年,World Bank 大宗商品按月度返回;
- 更新频率:日度到月度不等,取决于指标类型(ECB 汇率日更,World Bank 年度指标年更)。
使用前提:上述脚本位于 fincept-qt/scripts/,需在安装依赖(requests、pandas、aiohttp 等,视具体脚本而定)的 Python 3 环境中运行;FRED 与 BEA 必须先在 shell 中导出对应 API Key 才能使用。在 FinceptTerminal 桌面端,这些能力已通过经济学界面集成——例如 FredPanel.cpp 直接以 fred_data.py 为脚本源,并在未配置密钥时于界面给出明确提示,构成"脚本错误码 → C++ 界面文案"的完整链路。
结语
从 80 万+ 序列的 FRED 到 10 万+ 指标的 UNESCO,FinceptTerminal 的 ECONOMIC_DATA_SOURCES 体系用 11 个统一风格的 Python 脚本,将全球最权威的国际经济组织数据接入统一的 JSON 管道。无论是通过 import 在 Python 中组合分析、通过 CLI 供 C++ 前端消费,还是借助 IMF 的综合方法、OECD 的组合摘要、World Bank 的经济快照做"一屏看一国",开发者都可以依据本文的参数语义与错误码约定,快速构建属于自己的宏观数据工作流。
(文中数据规模、国家数与指标数均引自原文档及对应脚本 docstring;函数签名、命令、错误处理与参数取值以仓库源码为准。)
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0631
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
video-shotcraftAI宣传片skill,使用 Remotion 制作电影级产品视频:提供106 张镜头配方卡和可复用的视频魔板。适用于 Claude Code 与 Codex以及所有其他智能体Markdown00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python09
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00