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 fastapi.params import Param
from api.core.Gzip import register_gzip_request from api.core.Gzip import register_gzip_request
import json import json
@@ -11,6 +13,7 @@ import requests
from config.main import config from config.main import config
from datetime import datetime, timezone, timedelta from datetime import datetime, timezone, timedelta
from api.core.Response import Return as Response from api.core.Response import Return as Response
import aiohttp
router = APIRouter() router = APIRouter()
@@ -45,7 +48,6 @@ async def get_real_time_gold(redis: RedisDep) -> Response[list[RealTimeGold]]:
""" """
key = 'openapi:colg:real_time_gold' key = 'openapi:colg:real_time_gold'
try: try:
def get_gold_data(): def get_gold_data():
res = [] res = []
for region_name, region_id in regionMap.items(): for region_name, region_id in regionMap.items():
@@ -94,7 +96,6 @@ async def get_history_gold(region: Annotated[int, Query(..., description='跨区
- region参数必须在regionMap的值范围内 - region参数必须在regionMap的值范围内
- timeRange参数是可选的,使用默认值7表示最近7天的数据 - timeRange参数是可选的,使用默认值7表示最近7天的数据
""" """
print(region, timeRange)
if region not in regionMap.values(): if region not in regionMap.values():
return response( return response(
code=404, 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}) 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='历史数据') data: list[DayGold] = Field(..., description='历史数据')
echartsData : dict = Field(..., description='echarts数据') echartsData : dict = Field(..., description='echarts数据')
"""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 WORKERS=1
REDIS_URL=redis://localhost:6379/1 REDIS_URL=redis://localhost:6379/1
COLG_TOKEN="Bearer " COLG_TOKEN="Bearer "
HELPER_TOKEN=""
HELPER_ID=""
+2
View File
@@ -8,6 +8,8 @@ class Config(BaseSettings):
MCPPORT: int = 27174 MCPPORT: int = 27174
REDIS_URL: str = 'redis://localhost:6379/1' REDIS_URL: str = 'redis://localhost:6379/1'
COLG_TOKEN: str = '' COLG_TOKEN: str = ''
HELPER_TOKEN: str = ''
HELPER_ID: str = ''
class Config: class Config:
env_file = ('config/.env', 'config/.env.dev', 'config/.env.prod') env_file = ('config/.env', 'config/.env.dev', 'config/.env.prod')