跳到主要内容

输出数据

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']

最佳实践

  1. 始终检查警告:警告可能包含重要信息
  2. 处理空结果:检查 results 是否为空
  3. 使用适当的输出格式:根据需要选择 DataFrame、字典或 JSON
  4. 错误处理:使用 try-catch 处理潜在错误
  5. 检查元数据:利用额外信息进行调试和监控
# 完整的最佳实践示例
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())