AKTools
AKTools exposes AKShare's financial data interfaces as an HTTP API, so you can fetch data from any programming language.
AKTools 是一款用于快速搭建 AKShare HTTP API 的工具。只需一行命令即可启动 HTTP 服务,让原本只服务于 Python 用户的开源财经数据接口库 AKShare 突破编程语言的限制:无论您使用的是 C/C++、Java、Go、Rust、Ruby、PHP、JavaScript、R、MATLAB、Stata 等编程语言或软件,都可以快速、轻松地获取财经数据,助力您更好地展开研究和开发工作。
AKTools 中文文档 | AKShare 数据字典 | 版本说明
目录
特性
- 零配置:
python -m aktools一行命令启动服务,无需编写任何代码 - 接口全覆盖:AKShare 的每个数据接口都可以通过
/api/public/<接口名>直接访问,AKShare 新增接口后升级即可使用 - 跨语言:返回标准 JSON,任何能发送 HTTP 请求的语言或软件都可以调用
- 接口自查:
/api/interfaces列出全部接口并支持按关键词搜索,每个接口的参数、默认值和说明都能直接查询 - 表格下载:加上
_format=csv或_format=xlsx即可把数据下载为 CSV 或 Excel 文件 - 自带文档:基于 FastAPI,启动后访问
/docs即可在线查看和调试接口 - 便于部署:提供 Dockerfile,支持 Gunicorn + Uvicorn 多进程部署
安装
AKTools 要求 Python 3.11 及以上(64 位),运行环境要求与 AKShare 安装指导 一致。
pip install aktools
AKShare 的数据接口会随上游网站的变化频繁更新,遇到问题时请先把两者都升级到最新版:
pip install akshare aktools --upgrade -i https://pypi.org/simple
快速开始
-
启动服务:
python -m aktools
-
浏览器打开以下地址:
地址 说明 http://127.0.0.1:8080/主页,展示简要的使用说明 http://127.0.0.1:8080/docs接口导览,可在线调试 http://127.0.0.1:8080/version当前与最新的 AKShare、AKTools 版本 http://127.0.0.1:8080/api/interfaces?q=历史行情按关键词搜索接口 http://127.0.0.1:8080/api/interfaces/stock_zh_a_hist查看接口的参数、默认值和说明 http://127.0.0.1:8080/api/public/tool_trade_date_hist_sina连通性测试(新浪交易日历,无需参数且较为稳定) http://127.0.0.1:8080/api/public/stock_zh_a_hist?symbol=600000带参数获取数据
启动参数:
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--host |
-H |
127.0.0.1 |
监听地址,需要局域网或其他机器访问时设置为 0.0.0.0 |
--port |
-P |
8080 |
监听端口 |
--auto |
-A |
关闭 | 启动后自动打开浏览器 |
--version |
-v |
— | 查看 AKTools 版本 |
例如:python -m aktools --port 8888 --auto 会在 8888 端口启动并自动打开浏览器。需要让局域网内的其他机器访问时,加上 --host 0.0.0.0,其他机器通过 http://<本机 IP>:8888 访问;0.0.0.0 只表示监听所有网卡,不能当作访问地址在浏览器中打开。
调用规则
AKTools 本身不加工数据,只负责把 HTTP 请求翻译成对 AKShare 接口的调用:
GET /api/public/{接口名}?{参数1}={值1}&{参数2}={值2}
↓
akshare.{接口名}(参数1="值1", 参数2="值2")
- 接口名与 AKShare 的函数名完全一致。可以通过
/api/interfaces?q=关键词搜索接口,通过/api/interfaces/{接口名}查看参数说明,详细的数据说明请查阅 AKShare 数据字典。 - 参数以查询字符串传递,值不需要加引号,例如
?symbol=600000&period=weekly;不传的参数使用 AKShare 接口的默认值。 - 返回值默认是由 DataFrame 按行转换得到的 JSON 数组,日期时间字段为 ISO 8601 格式,例如
"2024-01-25T00:00:00.000"。 - 下载表格:加上保留参数
_format=csv或_format=xlsx,数据会以{接口名}.csv或{接口名}.xlsx文件下载,例如/api/public/stock_zh_a_hist?symbol=000001&_format=xlsx。CSV 为带 BOM 的 UTF-8 编码,可以直接用 Excel 打开。
请求失败时返回 {"error": "错误信息"},状态码含义如下:
| 状态码 | 含义 | 处理建议 |
|---|---|---|
200 |
成功 | — |
400 |
_format 取值不支持,或数据行数超过 Excel 上限 |
改用 json、csv 或 xlsx;数据过大时改用 csv |
404 |
接口名不存在,或接口调用出错(如参数错误) | 升级 AKShare,并对照 /api/interfaces/{接口名} 检查接口名和参数 |
502 |
无法访问上游数据源 | 检查网络和代理设置,见 常见问题 |
多语言调用示例
以下示例均假设服务运行在 http://127.0.0.1:8080,请按实际地址和端口修改。
curl
curl "http://127.0.0.1:8080/api/public/stock_zh_a_hist?symbol=000001&period=daily&start_date=20240101&end_date=20240131&adjust=qfq"
Python
import pandas as pd
import requests
url = "http://127.0.0.1:8080/api/public/stock_zh_a_hist"
params = {
"symbol": "000001",
"period": "daily",
"start_date": "20240101",
"end_date": "20240131",
"adjust": "qfq",
}
r = requests.get(url, params=params, timeout=30)
r.raise_for_status()
df = pd.DataFrame(r.json())
print(df)
R
library(RCurl) # 需要先安装该包
library(jsonlite) # 需要先安装该包
options(warn = -1) # 去掉无参数请求时的 warning 信息
temp_df <- getForm(
uri = "http://127.0.0.1:8080/api/public/stock_zh_a_hist",
symbol = "000001",
period = "daily",
start_date = "20211109",
end_date = "20211209",
adjust = "hfq",
.encoding = "utf-8"
)
inner_df <- fromJSON(temp_df)
inner_df
MATLAB
api = 'http://127.0.0.1:8080/api/public/';
url = [api 'stock_zh_a_hist'];
options = weboptions('ContentType', 'json', 'CharacterEncoding', 'utf-8');
data = webread(url, 'symbol', '000001', 'period', 'daily', ...
'start_date', '20211109', 'end_date', '20211209', 'adjust', 'hfq', options);
data % MATLAB 无法显示中文字段名,可自行改为英文字段
Rust
依赖:reqwest(启用 blocking 与 json 特性)和 serde_json。
use reqwest::blocking;
use serde_json::Value;
const URL: &str = "http://127.0.0.1:8080/api/public";
fn main() -> Result<(), Box<dyn std::error::Error>> {
let params = [
("symbol", "000001"),
("period", "daily"),
("start_date", "20240125"),
("end_date", "20240126"),
("adjust", ""),
];
let resp = blocking::Client::new()
.get(format!("{URL}/stock_zh_a_hist"))
.query(¶ms)
.send()?;
if resp.status().is_success() {
let data: Value = resp.json()?;
println!("{data:#?}");
} else {
eprintln!("请求失败,状态码为:{}", resp.status());
}
Ok(())
}
更多示例及运行结果,请见 AKTools 中文文档。
部署
Docker
使用仓库中的 Dockerfile 构建镜像,镜像默认以 Gunicorn 管理多个 Uvicorn worker 运行:
docker build -t aktools .
docker run -d -p 8080:8080 aktools
国内网络环境下可以指定 PyPI 镜像源加速构建:
docker build --build-arg PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ -t aktools .
镜像升级等更多说明,请见 Docker 部署文档。
生产环境
python -m aktools 适合本地使用。生产环境建议直接用 Gunicorn 启动 aktools.main:app:
pip install gunicorn uvicorn-worker
gunicorn aktools.main:app --bind 0.0.0.0:8080 --workers 4 --worker-class uvicorn_worker.UvicornWorker
AKTools 不带鉴权功能。如果服务需要暴露到公网,请在前面加一层带鉴权的反向代理(如 Nginx)。
常见问题
返回 502,提示“访问上游数据源失败”
运行 AKTools 的机器无法访问东方财富、新浪财经等上游网站,通常是代理配置导致的。报错中如果出现 ProxyError 或 Unable to connect to proxy,请检查或清除代理相关的环境变量后重启服务:
# Linux / macOS
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
# Windows PowerShell
Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY
部分接口要求在境内网络环境下访问,详见 AKShare 文档中对应接口的说明。
返回 404,提示“未找到该接口”或“调用接口出错”
先升级 AKShare 到最新版,然后对照 AKShare 数据字典 检查接口名和参数是否正确。也可以在 Python 中直接调用同名的 AKShare 接口,确认问题是否出在 AKShare。
数据有误或接口报错,应该去哪里反馈?
AKTools 只负责转发请求,数据内容由 AKShare 提供。如果在 Python 中直接调用 AKShare 也有同样的问题,请到 AKShare Issues 反馈;只有 AKTools 自身的问题(启动、路由、序列化等)才需要到 AKTools Issues 反馈。
参与贡献
欢迎提交 Issue 和 Pull Request!开发环境的搭建、代码检查与提交规范请见 贡献指南。参与本项目即表示您同意遵守 贡献者行为准则。
免责声明
AKTools 与 AKShare 提供的数据仅供学术研究使用,不构成任何投资建议。数据均来自公开的网络数据源,请在使用前自行核实,并遵守相关数据源的使用条款。因使用本项目造成的任何直接或间接损失,项目作者及贡献者不承担任何责任。
许可证
本项目基于 MIT 许可证 开源。
Metadata
Release files for aktools 0.0.96
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aktools-0.0.96.tar.gz | 34.1 kB | With provenance | Details for aktools-0.0.96.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aktools-0.0.96-py3-none-any.whl | Python 3 | none | any | Details for aktools-0.0.96-py3-none-any.whl |
Total release size: 59.3 kB
Release files / aktools-0.0.96.tar.gz
| Download URL | aktools-0.0.96.tar.gz |
|---|---|
| Size | 34.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f8db5a275adce25c07ecfe8d9e0dcc662560ec0854a317684e1b7f27ff9e8cc7
|
|
BLAKE2b-256 checksum How to use checksums |
5ca3c174817d173e2c6ef39125b577c94709aaf5b85a8b2b8539502f7b0ee0e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logRelease files / aktools-0.0.96-py3-none-any.whl
| Download URL | aktools-0.0.96-py3-none-any.whl |
|---|---|
| Size | 25.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f049b0102fb43e42b826d5f0ee29b8e02cb71ddfca1d62d68a6ecbb175830df6
|
|
BLAKE2b-256 checksum How to use checksums |
b8bd2e91db2c3848d6da14dcb808fb4fb4d7acca617da5d71d26214397391214
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logSecurity for aktools 0.0.96
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for aktools-0.0.96.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.