This commit is contained in:
2026-03-09 17:17:48 +08:00
parent e611911738
commit fffee149ec
5 changed files with 68 additions and 8 deletions
+49 -3
View File
@@ -1,4 +1,6 @@
from api.types.colg import HistoryGold, RealTimeGold
import asyncio
from api.types.colg import HistoryGold, OfficialGold, RealTimeGold
from fastapi.params import Param
from api.core.Gzip import register_gzip_request
import json
@@ -11,6 +13,7 @@ import requests
from config.main import config
from datetime import datetime, timezone, timedelta
from api.core.Response import Return as Response
import aiohttp
router = APIRouter()
@@ -45,7 +48,6 @@ async def get_real_time_gold(redis: RedisDep) -> Response[list[RealTimeGold]]:
"""
key = 'openapi:colg:real_time_gold'
try:
def get_gold_data():
res = []
for region_name, region_id in regionMap.items():
@@ -94,7 +96,6 @@ async def get_history_gold(region: Annotated[int, Query(..., description='跨区
- region参数必须在regionMap的值范围内
- timeRange参数是可选的,使用默认值7表示最近7天的数据
"""
print(region, timeRange)
if region not in regionMap.values():
return response(
code=404,
@@ -136,3 +137,48 @@ async def get_history_gold(region: Annotated[int, Query(..., description='跨区
],
}
return response(data={'region': region_name, 'data': data, 'echartsData': echartsData})
@router.get('/gold/official/', operation_id='officialGold')
async def get_official_gold(redis: RedisDep) -> Response[list[OfficialGold]]:
"""
获取官方金币寄售实时数据
"""
official_url = 'https://dzhu.qq.com/zangyi/activity/app'
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
params = {
'r': 'godRank/godDealRank',
'userId': config.HELPER_ID,
'token': config.HELPER_TOKEN,
}
key = 'openapi:colg:real_time_gold_officical'
list = ['1', '2', '3A', '3B', '4', '5', '6', '7']
try:
async def get_data():
datas = []
async def fetch_data():
async with aiohttp.ClientSession() as session:
tasks = []
for i in list:
params['serverNo'] = i
query = '&'.join(f'{k}={v}' for k, v in params.items())
tasks.append(session.post(official_url, data=query, headers=headers, timeout=10))
responses = await asyncio.gather(*tasks)
for index, resp in enumerate(responses):
res = json.loads(await resp.read())
datas.append({
'updataTime': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'region': f'跨{list[index]}',
'godDealRank': [int(i.get('price')) for i in res['data']['godDealRank']],
'godTopDealRank': [int(i.get('price')) for i in res['data']['godTopDealRank']],
})
return datas
return await fetch_data()
except Exception as e:
print(e)
return response(data=[])
# 设置半小时过期一次
data = await get_redis_info(redis, key, get_data, 30 * 60)
return response(data=data)
+10
View File
@@ -27,3 +27,13 @@ class HistoryGold(BaseModel):
data: list[DayGold] = Field(..., description='历史数据')
echartsData : dict = Field(..., description='echarts数据')
"""echarts数据"""
class OfficialGold(BaseModel):
updataTime: str = Field(..., description='更新时间')
"""更新时间"""
region: str = Field(..., description='跨区')
"""跨区"""
godDealRank: list[float] = Field(..., description='金币寄售最低成交价排名前5的价格')
"""金币寄售最低成交价排名前5的价格"""
godTopDealRank: list[float] = Field(..., description='金币寄售最高成交价排名前5的价格')
"""金币寄售最高成交价排名前5的价格"""
+2
View File
@@ -4,3 +4,5 @@ DEBUG_MODE=True
WORKERS=1
REDIS_URL=redis://localhost:6379/1
COLG_TOKEN="Bearer "
HELPER_TOKEN=""
HELPER_ID=""
+2
View File
@@ -8,6 +8,8 @@ class Config(BaseSettings):
MCPPORT: int = 27174
REDIS_URL: str = 'redis://localhost:6379/1'
COLG_TOKEN: str = ''
HELPER_TOKEN: str = ''
HELPER_ID: str = ''
class Config:
env_file = ('config/.env', 'config/.env.dev', 'config/.env.prod')