增加排名
This commit is contained in:
+35
-41
@@ -6,16 +6,18 @@ from fastapi import FastAPI, HTTPException
|
||||
from fastapi.responses import FileResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
|
||||
from .aggregator import aggregate_period, enrich_snapshot_meta
|
||||
from .config import ROOT_DIR, settings
|
||||
from .funding_store import enrich_items_with_funding, get_funding_bundle
|
||||
from .funding_store import get_funding_bundle
|
||||
from .kline_store import get_daily_candles, sync_daily_klines
|
||||
from .db import get_latest_snapshot, init_db, log_push
|
||||
from .db import get_latest_snapshot, init_db, log_push, save_snapshot
|
||||
from .exceptions import BinanceRateLimitedError
|
||||
from .periods import get_today_period, get_yesterday_period
|
||||
from .period_api import get_period_top30
|
||||
from .periods import get_daybefore_period, get_today_period, get_yesterday_period
|
||||
from .scheduler import job_finalize_yesterday, job_push_wecom, job_refresh_today, start_scheduler, startup_tasks, stop_scheduler
|
||||
from .state import get_today_cache
|
||||
from .stats import compute_three_day_stats
|
||||
from .aggregator import aggregate_period
|
||||
from .wecom import build_markdown, send_wecom_markdown
|
||||
from .state import get_today_cache
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
@@ -59,48 +61,34 @@ async def index():
|
||||
return {"message": "Web UI not found. Place files in /web"}
|
||||
|
||||
|
||||
@app.get("/api/yesterday/top30")
|
||||
async def api_yesterday_top30():
|
||||
snap = get_latest_snapshot("yesterday")
|
||||
if snap:
|
||||
items = await enrich_items_with_funding(snap["items"])
|
||||
return {
|
||||
"period_start": snap["period_start"],
|
||||
"period_end": snap["period_end"],
|
||||
"updated_at": snap["created_at"],
|
||||
"top_n": settings.top_n,
|
||||
"volume_threshold": settings.volume_threshold,
|
||||
"change_threshold": settings.change_threshold,
|
||||
"items": items,
|
||||
}
|
||||
start, end = get_yesterday_period()
|
||||
try:
|
||||
mode = settings.yesterday_data_mode
|
||||
items = await aggregate_period(start, end, mode=mode)
|
||||
return enrich_snapshot_meta(items, start, end, data_mode=mode)
|
||||
except Exception as e:
|
||||
logger.error("api yesterday failed: %s", e)
|
||||
meta = enrich_snapshot_meta([], start, end)
|
||||
meta["error"] = "数据暂不可用,请检查网络或稍后重试"
|
||||
return meta
|
||||
|
||||
|
||||
@app.get("/api/today/top30")
|
||||
async def api_today_top30():
|
||||
from .state import get_today_cache
|
||||
|
||||
cached = get_today_cache()
|
||||
if cached:
|
||||
from .funding_store import enrich_items_with_funding
|
||||
|
||||
cached["items"] = await enrich_items_with_funding(cached.get("items", []))
|
||||
return cached
|
||||
start, end = get_today_period()
|
||||
try:
|
||||
mode = settings.today_data_mode
|
||||
items = await aggregate_period(start, end, use_live_prices=True, mode=mode)
|
||||
return enrich_snapshot_meta(items, start, end, data_mode=mode)
|
||||
except Exception as e:
|
||||
logger.error("api today failed: %s", e)
|
||||
meta = enrich_snapshot_meta([], start, end)
|
||||
meta["error"] = "数据暂不可用,请检查网络或稍后重试"
|
||||
return meta
|
||||
return await get_period_top30(
|
||||
"today", get_today_period, use_live_prices=True, data_mode=settings.today_data_mode
|
||||
)
|
||||
|
||||
|
||||
@app.get("/api/yesterday/top30")
|
||||
async def api_yesterday_top30():
|
||||
return await get_period_top30("yesterday", get_yesterday_period)
|
||||
|
||||
|
||||
@app.get("/api/daybefore/top30")
|
||||
async def api_daybefore_top30():
|
||||
return await get_period_top30("daybefore", get_daybefore_period)
|
||||
|
||||
|
||||
@app.get("/api/stats/three-day")
|
||||
async def api_stats_three_day():
|
||||
return compute_three_day_stats()
|
||||
|
||||
|
||||
@app.post("/api/push/test")
|
||||
@@ -135,6 +123,12 @@ async def api_refresh_today():
|
||||
return get_today_cache() or {"message": "done"}
|
||||
|
||||
|
||||
@app.post("/api/refresh/daybefore")
|
||||
async def api_refresh_daybefore():
|
||||
await job_finalize_yesterday()
|
||||
return get_latest_snapshot("daybefore") or {"message": "done"}
|
||||
|
||||
|
||||
@app.get("/api/chart/{symbol}/daily")
|
||||
async def api_chart_daily(symbol: str, limit: int | None = None, refresh: bool = False):
|
||||
"""合约日 K 线:优先读本地 SQLite,过期再拉币安入库。"""
|
||||
|
||||
Reference in New Issue
Block a user