# api
**Repository Path**: finanalyzer/api
## Basic Information
- **Project Name**: api
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: AGPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-07
- **Last Updated**: 2026-06-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Finanalyzer API
> Finanalyzer 后端 API - 为个人用户打造的金融分析工作台
## 📖 项目简介
Finanalyzer API 是 Finanalyzer 项目的后端组件,是一个基于 Python / FastAPI 构建的金融分析 API。它完全兼容 OpenBB Workspace 架构标准,为个人用户提供更自由、更开放的选择。
后端利用 OpenBB Platform 进行数据获取,支持多种数据源,包括 AkShare、Tushare、通达信和 YFinance,实现全面的市场数据覆盖。
### 🎯 核心特性
- ✅ **完全开源** - 代码透明,自由定制
- ✅ **专注中国市场** - 原生支持 A 股和港股
- ✅ **多数据源** - AkShare、Tushare、通达信、YFinance 备用
- ✅ **投资组合管理** - 全面的股票和交易记录跟踪
- ✅ **仪表板 API** - 基于 Widget 的仪表板管理
- ✅ **AI 整合** - 支持 Claude Code / OpenCode 集成
- ✅ **Vibe-Trading 就绪** - 内置 AI 分析和回测支持
## 🏗️ 技术架构
Finanalyzer 后端采用与 OpenBB backends-for-openbb 相同的技术栈:
- **Python 3.13+** - 最新 Python 完整类型提示支持
- **FastAPI** - 高性能异步 API 框架
- **OpenBB Platform** - 官方数据平台集成
- **SQLite (WAL 模式)** - 轻量级持久化存储
- **uv** - 超快速 Python 包管理器
- **Pydantic** - 数据验证和配置管理
## 📦 安装指南
### 前置要求
- **Python**: 版本 3.13 或更高
- **uv**: uv 包管理器(推荐)
- **Git**: 版本 2.30 或更高
- **Docker**: (可选)用于容器化部署
验证环境:
```bash
# 检查 Python 版本
python --version # 应 >= 3.13
# 检查 uv 版本(如已安装)
uv --version
# 检查 Git 版本
git --version
```
### 安装步骤
1. **克隆仓库**
```bash
git clone https://github.com/finanalyzer/api.git openbb-app
cd openbb-app
```
1. **安装依赖**
```bash
# 使用 uv(推荐)
uv pip install -e .
# 或使用 pip
pip install -e .
```
1. **配置环境变量**
在项目根目录创建 `.env` 文件:
```env
# Tushare API 密钥(可选,但推荐用于增强中国市场的数据)
TUSHARE_API_KEY=your_tushare_api_key_here
# Agent 主机 URL(可选,用于 AI 功能)
AGENT_HOST_URL=http://localhost:7778
# 应用 API 密钥(可选)
APP_API_KEY=your_app_api_key_here
# OpenRouter API 密钥(可选,用于 AI 功能)
OPENROUTER_API_KEY=your_openrouter_api_key_here
```
**环境变量说明**:
| 变量 | 必需 | 说明 |
| -------------------- | -- | ------------------------- |
| `TUSHARE_API_KEY` | 否 | Tushare API 密钥(增强中国市场的数据) |
| `AGENT_HOST_URL` | 否 | AI Agent 服务的 URL |
| `APP_API_KEY` | 否 | 用于认证的应用 API 密钥 |
| `OPENROUTER_API_KEY` | 否 | AI 功能的 OpenRouter API 密钥 |
**注意**:Tushare API 密钥可从 获取。虽然是可选的,但它提供了增强的中国市场数据。
1. **验证安装**
```bash
# 检查包是否已安装
uv pip list | grep openbb-app
# 运行帮助命令
openbb-app --help
```
## 🚀 快速开始
### 启动服务器
启动后端服务器:
```bash
# 使用已安装的脚本
openbb-app
# 或使用 uv
uv run openbb-app
# 或直接使用 uvicorn
uvicorn openbb_app.main:app --host 0.0.0.0 --port 8001 --reload
```
预期输出:
```
🚀 Starting OpenBB Backend on http://0.0.0.0:8001
INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
INFO: Started reloader process [pid] using StatReload
openbb-app version: 1.5.7
```
### 访问 API 文档
服务器运行后,你可以访问交互式 API 文档:
- **Swagger UI**:
- **Redoc**:
- **OpenAPI JSON**:
这两个文档界面让你可以:
- 探索所有 API 端点
- 直接在浏览器中试用 API 调用
- 查看请求/响应示例
- 查看 Pydantic 模型结构
### 测试健康检查
测试服务器是否正常运行:
```bash
# 使用 curl
curl http://localhost:8001/api/v1/health
# 使用 httpie
http http://localhost:8001/api/v1/health
```
预期响应:
```json
{
"status": "healthy",
"service": "openbb-app-builder-agent",
...
}
```
## 📚 API 端点概览
所有 API 端点前缀为 `/api/v1`。
### 健康检查
| 端点 | 方法 | 说明 |
| ------------ | --- | --------- |
| `/v1/health` | GET | 检查服务器是否健康 |
### 投资组合管理
| 端点 | 方法 | 说明 |
| --------------------------------- | ------ | ----------- |
| `/v1/portfolio/stocks` | GET | 获取所有投资组合股票 |
| `/v1/portfolio/stocks/{symbol}` | GET | 按代码获取单个股票 |
| `/v1/portfolio/stocks` | POST | 添加新股票到投资组合 |
| `/v1/portfolio/stocks/{symbol}` | PUT | 更新投资组合中的股票 |
| `/v1/portfolio/stocks/{symbol}` | DELETE | 从投资组合中移除股票 |
| `/v1/portfolio/transactions` | GET | 获取所有交易记录 |
| `/v1/portfolio/transactions/{id}` | GET | 获取单个交易记录 |
| `/v1/portfolio/transactions` | POST | 添加新交易记录 |
| `/v1/portfolio/transactions/{id}` | PUT | 更新交易记录 |
| `/v1/portfolio/transactions/{id}` | DELETE | 删除交易记录 |
| `/v1/portfolio/validate` | GET | 验证投资组合数据一致性 |
### 中国股票数据
| 端点 | 方法 | 说明 |
| -------------------------------- | --- | ------------ |
| `/v1/cn/equity/price/historical` | GET | 获取历史价格数据 |
| `/v1/cn/equity/quote` | GET | 获取实时报价(即将推出) |
| `/v1/cn/equity/search` | GET | 搜索股票(即将推出) |
### 仪表板管理
| 端点 | 方法 | 说明 |
| ---------------------------------------- | ------ | ------------- |
| `/v1/dashboard` | GET | 获取所有仪表板 |
| `/v1/dashboard/{id}` | GET | 获取单个仪表板 |
| `/v1/dashboard` | POST | 创建新仪表板 |
| `/v1/dashboard/{id}` | PUT | 更新仪表板 |
| `/v1/dashboard/{id}` | DELETE | 删除仪表板 |
| `/v1/dashboard/{id}/widgets` | POST | 向仪表板添加 Widget |
| `/v1/dashboard/{id}/widgets/{widget_id}` | PUT | 更新 Widget |
| `/v1/dashboard/{id}/widgets/{widget_id}` | DELETE | 删除 Widget |
### AI Agent
| 端点 | 方法 | 说明 |
| ------------------------- | ---- | --------------- |
| `/v1/agent/query` | POST | 向 AI Agent 发送查询 |
| `/v1/agent/sessions` | GET | 获取聊天会话 |
| `/v1/agent/sessions/{id}` | GET | 获取特定会话 |
| `/v1/agent/analyze` | POST | 请求投资组合分析 |
| `/v1/agent/insights` | GET | 获取 AI 生成的洞察 |
### Widget 注册表
| 端点 | 方法 | 说明 |
| ------------------ | --- | --------------- |
| `/v1/widgets.json` | GET | 获取所有已注册的 Widget |
| `/v1/apps.json` | GET | 获取所有已注册的应用 |
| `/v1/agents.json` | GET | 获取所有已注册的 Agent |
## 🔐 认证
### 认证概述
openbb-app 后端使用灵活的认证系统:
- **无内置认证**:核心后端默认不需要认证
- **基于 Header 的认证**:支持自定义认证头
- **基于查询参数的认证**:支持通过 URL 参数认证
- **Cloudflare Access**:推荐用于生产部署
### 基于 Header 的认证
对于受 Cloudflare Access 保护的远程部署:
```python
import requests
headers = {
"CF-Authorization": "your_cloudflare_access_token",
"Content-Type": "application/json"
}
response = requests.get(
"https://api.yourcompany.com/api/v1/portfolio/stocks",
headers=headers
)
```
### 基于查询参数的认证
通过 URL 参数进行简单认证:
```python
import requests
params = {
"access_token": "your_access_token",
"api_key": "your_api_key"
}
response = requests.get(
"https://api.yourcompany.com/api/v1/portfolio/stocks",
params=params
)
```
## 💻 集成示例
### 示例 1:获取投资组合股票
**Python (requests)**:
```python
import requests
BASE_URL = "http://localhost:8001"
response = requests.get(f"{BASE_URL}/api/v1/portfolio/stocks")
if response.status_code == 200:
stocks = response.json()
for stock in stocks:
print(f"{stock['symbol']} - {stock['name']}: {stock['current_price']}")
else:
print(f"Error: {response.status_code} - {response.text}")
```
**cURL**:
```bash
curl -X GET http://localhost:8001/api/v1/portfolio/stocks \
-H "Content-Type: application/json"
```
### 示例 2:添加交易记录
**Python (requests)**:
```python
import requests
from datetime import datetime
BASE_URL = "http://localhost:8001"
transaction = {
"date": datetime.now().strftime("%Y-%m-%d"),
"symbol": "000001.SZ",
"name": "平安银行",
"price": 16.20,
"quantity": 50,
"transaction_type": "买入",
"total_value": 810.00
}
response = requests.post(
f"{BASE_URL}/api/v1/portfolio/transactions",
json=transaction
)
if response.status_code == 201:
created = response.json()
print(f"Transaction created: {created['id']}")
```
### 示例 3:获取历史价格数据
**Python (requests)**:
```python
import requests
from datetime import datetime, timedelta
BASE_URL = "http://localhost:8001"
end_date = datetime.now()
start_date = end_date - timedelta(days=90)
params = {
"symbol": "000001.SZ",
"start_date": start_date.strftime("%Y-%m-%d"),
"end_date": end_date.strftime("%Y-%m-%d"),
"interval": "1d"
}
response = requests.get(
f"{BASE_URL}/api/v1/cn/equity/price/historical",
params=params
)
if response.status_code == 200:
data = response.json()
print(f"Symbol: {data['symbol']}")
print(f"Data points: {len(data['data'])}")
```
## 🐳 Docker 部署
### 前置要求
- 已安装 [Docker](https://docs.docker.com/get-docker/)
- 已安装 [Docker Compose](https://docs.docker.com/compose/install/)
### 快速开始
```bash
# 构建 Docker 镜像
docker build -t openbb-app .
# 启动服务(分离模式)
docker compose up -d
# 查看日志
docker compose logs -f
# 停止服务
docker compose down
```
### 访问应用
容器运行后,可通过以下地址访问 API:
- API:
- 健康检查:
### 环境配置
在项目根目录创建 `.env` 文件,配置你的 API 密钥:
```env
TUSHARE_API_KEY=your_tushare_api_key
AGENT_HOST_URL=your_agent_host_url
APP_API_KEY=your_app_api_key
OPENROUTER_API_KEY=your_openrouter_api_key
```
### 热重载开发
Docker 配置支持热代码重载。对源代码的更改会立即反映,无需重新构建镜像。
### 容器安全
容器以非 root 用户(`appuser`)运行以增强安全性。应用在容器内监听 8001 端口,映射到主机的同一端口。
## 🛠️ 开发命令
```bash
# 以开发模式安装
uv pip install -e .
# 运行服务器
openbb-app
# 或使用 uvicorn
uvicorn openbb_app.main:app --host 0.0.0.0 --port 8001 --reload
# 运行测试
uv run pytest
# 运行特定测试文件
uv run pytest tests/test_data_source.py
# 格式化代码
make format-backend
```
## 🔧 故障排除
### 常见问题
#### 问题 1:服务器无法启动
**症状**:
- 端口 8001 已被占用
- 启动时导入错误
**解决方案**:
1. 检查是否有其他进程使用该端口:
```bash
# Windows
netstat -ano | findstr :8001
# Linux/Mac
lsof -i :8001
```
2. 重新安装依赖:
```bash
uv pip uninstall openbb-app
uv pip install -e .
```
#### 问题 2:数据库错误
**症状**:
- SQLite 锁定错误
- WAL 模式警告
**解决方案**:
1. 确保只有一个实例在运行
2. 清除数据库:
```bash
rm -f data/openbb.db
```
#### 问题 3:数据源失败
**症状**:
- 市场数据端点返回空响应
- 超时错误
**解决方案**:
1. 检查网络连接
2. 验证 API 密钥是否正确设置
3. 尝试备用数据源(AkShare、YFinance)
4. 检查 OpenBB Platform 状态
### 调试技巧
1. **启用详细日志**:
```bash
openbb-app --verbose
```
2. **检查数据库内容**:
```bash
sqlite3 data/openbb.db ".schema"
```
3. **直接测试 API 端点**:
```bash
curl -v http://localhost:8001/api/v1/health
```
## 📦 发布到 PyPI
### 配置 uv 以使用 PyPI
将 PyPI 凭据添加到 `pyproject.toml`:
```toml
[[tool.uv.index]]
name = "pypi"
url = "https://pypi.org/simple/"
explicit = true
```
### 构建和发布
```bash
# 清除旧的构建
rm -rf dist/
# 构建分发包
uv build
# 发布到 PyPI
# 系统会提示你输入令牌(用户名:__token__)
uv publish
```
### 发布到 TestPyPI
```bash
# 将 TestPyPI 添加到 pyproject.toml
[[tool.uv.index]]
name = "testpypi"
url = "https://test.pypi.org/simple/"
publish-url = "https://test.pypi.org/legacy/"
explicit = true
# 构建并发布
uv build
uv publish --index testpypi
# 测试安装
uvx --index https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ openbb-app
```
## 🤝 贡献
欢迎贡献代码!请遵循以下步骤:
1. Fork 本仓库
2. 创建特性分支:`git checkout -b feature/amazing-feature`
3. 提交更改:`git commit -m 'feat: add amazing feature'`
4. 推送分支:`git push origin feature/amazing-feature`
5. 提交 Pull Request
### 代码风格
- 遵循 Black(行长度:88)+ isort(profile: "black")
- 使用 `make format-backend` 自动格式化代码
- 遵循 [Conventional Commits](https://www.conventionalcommits.org/) 规范
## 📄 许可证
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
## 🔗 相关项目
- **Finanalyzer App (前端)**:
- **OpenBB Platform**:
- **AkShare**:
- **Tushare**:
## 💬 支持
- **问题反馈**: [GitHub Issues](https://github.com/finanalyzer/api/issues)
- **功能建议**: [GitHub Discussions](https://github.com/finanalyzer/api/discussions)
***
> 投资有风险,分析需谨慎。本工具仅供研究学习使用。