公司介绍 财务数据
This commit is contained in:
+68
-1
@@ -5,7 +5,7 @@ import re
|
||||
import math
|
||||
|
||||
from services import tencent, sina, eastmoney
|
||||
from models import StockSearchResult, StockQuote, KLineData, FundFlowData, FundFlowSummary
|
||||
from models import StockSearchResult, StockQuote, KLineData, FundFlowData, FundFlowSummary, CompanyProfile, FinancialReportItem, FinancialDataResponse
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@@ -71,6 +71,73 @@ async def stock_history(
|
||||
raise HTTPException(status_code=404, detail="未获取到K线数据")
|
||||
|
||||
|
||||
@router.get("/profile", response_model=dict, summary="公司概况")
|
||||
async def company_profile(code: str = Query(..., description="6位股票代码")):
|
||||
"""获取东方财富F10公司概况数据"""
|
||||
if not re.match(r"^\d{6}$", code):
|
||||
raise HTTPException(status_code=400, detail="股票代码格式错误,需为6位数字")
|
||||
data = await eastmoney.fetch_company_profile(code)
|
||||
if not data:
|
||||
raise HTTPException(status_code=404, detail="未获取到公司概况数据")
|
||||
return {"data": data}
|
||||
|
||||
|
||||
@router.get("/financial", response_model=dict, summary="财务分析数据")
|
||||
async def financial_data(
|
||||
code: str = Query(..., description="6位股票代码"),
|
||||
years: int = Query(5, description="获取年数", ge=1, le=10),
|
||||
):
|
||||
"""获取东方财富财务分析指标数据(每股指标、盈利能力、成长能力、偿债能力等)"""
|
||||
if not re.match(r"^\d{6}$", code):
|
||||
raise HTTPException(status_code=400, detail="股票代码格式错误,需为6位数字")
|
||||
data = await eastmoney.fetch_financial_data_main(code, years)
|
||||
|
||||
# 获取股票名称
|
||||
name = code
|
||||
if data:
|
||||
quote = await tencent.fetch_quote(code)
|
||||
if quote:
|
||||
name = quote.get("name", code)
|
||||
|
||||
if not data:
|
||||
raise HTTPException(status_code=404, detail="未获取到财务数据")
|
||||
|
||||
return {
|
||||
"data": data,
|
||||
"count": len(data),
|
||||
"code": code,
|
||||
"name": name,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/business-segments", response_model=dict, summary="主营构成/收入构成")
|
||||
async def business_segments(
|
||||
code: str = Query(..., description="6位股票代码"),
|
||||
by_type: str = Query("product", description="分类方式: product=按产品, industry=按行业, region=按地区"),
|
||||
years: int = Query(3, description="获取年数", ge=1, le=30),
|
||||
):
|
||||
"""获取东方财富经营分析 - 主营构成数据(收入构成、成本构成、利润构成、毛利率)"""
|
||||
if not re.match(r"^\d{6}$", code):
|
||||
raise HTTPException(status_code=400, detail="股票代码格式错误,需为6位数字")
|
||||
if by_type not in ("product", "industry", "region"):
|
||||
raise HTTPException(status_code=400, detail="by_type 需为 product/industry/region")
|
||||
|
||||
data = await eastmoney.fetch_business_segments(code, by_type, years)
|
||||
if not data:
|
||||
raise HTTPException(status_code=404, detail="未获取到主营构成数据")
|
||||
|
||||
quote = await tencent.fetch_quote(code)
|
||||
name = quote.get("name", code) if quote else code
|
||||
|
||||
return {
|
||||
"data": data,
|
||||
"count": len(data),
|
||||
"code": code,
|
||||
"name": name,
|
||||
"byType": by_type,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/fund-flow", summary="资金流向")
|
||||
async def stock_fund_flow(
|
||||
code: str = Query(..., description="6位股票代码"),
|
||||
|
||||
Reference in New Issue
Block a user