输出数据
Python 接口
OBBject
每个命令的输出都是一个包含请求结果以及附加信息的对象。它是一个自定义类 OBBject
,始终返回以下字段:
id: ... # UUID 标签
results: ... # 可序列化结果
provider: ... # 提供商名称
warnings: ... # 警告列表
chart: ... # 图表对象
extra: ... # 额外信息
from openbb import obb
data = obb.equity.price.historical("SPY", provider="polygon")
data
OBBject
id: 06520558-d54a-7e53-8000-7aafc8a42694
results: [{'date': datetime.datetime(2022, 10, 5, 0, 0), 'open': 375.62, 'high': 37...
provider: polygon
warnings: None
chart: None
extra: {'metadata': {'arguments': {'provider_choices': {'provider': 'polygon'}, 'standard_params': {'symbol': 'SPY'}, 'extra_params': {}}, 'duration': 0.123456, 'route': '/equity/price/historical', 'timestamp': '2024-01-01T12:00:00.000000'}}
访问数据
结果数据
主要数据存储在 results
属性中:
# 访问结果数据
results = data.results
print(type(results)) # <class 'list'>
# 如果结果是列表,可以访问第一个项目
if results:
first_item = results[0]
print(first_item)
转换为 DataFrame
OBBject 提供便捷方法将数据转换为 pandas DataFrame:
# 转换为 DataFrame
df = data.to_dataframe()
print(type(df)) # <class 'pandas.core.frame.DataFrame'>
# 或者使用属性访问
df = data.results
其他输出格式
# 转换为字典
dict_data = data.to_dict()
# 转换为 JSON
json_data = data.to_json()
# 转换为 CSV 字符串
csv_data = data.to_csv()
元数据信息
提供商信息
# 获取使用的提供商
provider = data.provider
print(f"数据来源: {provider}")
警告信息
# 检查警告
if data.warnings:
for warning in data.warnings:
print(f"警告: {warning}")
额外信息
# 访问额外信息
extra_info = data.extra
if extra_info:
metadata = extra_info.get('metadata', {})
print(f"请求耗时: {metadata.get('duration')} 秒")
print(f"API 路由: {metadata.get('route')}")
图表功能
如果安装了 openbb-charting
扩展,某些命令会返回图表对象:
# 检查是否有图表
if data.chart:
# 显示图表
data.show()
# 或者直接访问图表对象
chart = data.chart
错误处理
try:
data = obb.equity.price.historical("INVALID_SYMBOL")
if data.warnings:
print("收到警告:", data.warnings)
except Exception as e:
print(f"请求失败: {e}")
REST API
通过 REST API 访问时,响应格式为 JSON:
{
"id": "06520558-d54a-7e53-8000-7aafc8a42694",
"results": [...],
"provider": "polygon",
"warnings": null,
"chart": null,
"extra": {...}
}
API 响应处理
import requests
# API 请求示例
response = requests.get("http://localhost:8000/api/v1/equity/price/historical?symbol=SPY")
data = response.json()
# 访问结果
results = data['results']
provider = data['provider']
warnings = data['warnings']
最佳实践
- 始终检查警告:警告可能包含重要信息
- 处理空结果:检查
results
是否为空 - 使用适当的输出格式:根据需要选择 DataFrame、字典或 JSON
- 错误处理:使用 try-catch 处理潜在错误
- 检查元数据:利用额外信息进行调试和监控
# 完整的最佳实践示例
def get_stock_data(symbol, provider="yfinance"):
try:
data = obb.equity.price.historical(symbol, provider=provider)
# 检查警告
if data.warnings:
print(f"警告: {data.warnings}")
# 检查结果
if not data.results:
print("未找到数据")
return None
# 返回 DataFrame
return data.to_dataframe()
except Exception as e:
print(f"获取数据失败: {e}")
return None
# 使用示例
df = get_stock_data("AAPL")
if df is not None:
print(df.head())