From dbcec1bc6c6f53a5b9d6c5244ee8ef6082de8a0a Mon Sep 17 00:00:00 2001 From: KimigaiiWuyi <444835641@qq.com> Date: Tue, 26 Sep 2023 00:58:20 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20=E6=96=B0=E5=A2=9E=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E7=AB=99`qxqx`=20(=E6=84=9F=E8=B0=A2=E7=BE=A4?= =?UTF-8?q?=E5=8F=8B@=E8=B0=A6=E8=99=9A)=EF=BC=8C=20=E5=B9=B6=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E8=AE=BF=E9=97=AE=E9=80=9F=E5=BA=A6=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E8=B5=84=E6=BA=90=E7=AB=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GenshinUID/genshinuid_start/__init__.py | 2 - GenshinUID/utils/database.py | 3 - .../utils/resource/download_from_miniggicu.py | 145 ++++++++++++------ 3 files changed, 94 insertions(+), 56 deletions(-) diff --git a/GenshinUID/genshinuid_start/__init__.py b/GenshinUID/genshinuid_start/__init__.py index 09562fc3..13dc4a08 100644 --- a/GenshinUID/genshinuid_start/__init__.py +++ b/GenshinUID/genshinuid_start/__init__.py @@ -3,7 +3,6 @@ import threading from gsuid_core.logger import logger -from ..utils.database import get_sqla from ..genshinuid_resource import startup from ..genshinuid_xkdata import draw_xk_abyss_img from ..genshinuid_guide.get_new_abyss_data import download_Oceanid @@ -19,7 +18,6 @@ from ..genshinuid_xkdata.get_all_char_data import ( async def all_start(): try: - get_sqla('TEMP') await download_Oceanid() await startup() # await check_artifacts_list() diff --git a/GenshinUID/utils/database.py b/GenshinUID/utils/database.py index af7766ee..f2b9f386 100644 --- a/GenshinUID/utils/database.py +++ b/GenshinUID/utils/database.py @@ -2,11 +2,8 @@ from typing import Dict from gsuid_core.data_store import get_res_path from gsuid_core.utils.database.dal import SQLA -from gsuid_core.utils.database.api import DBSqla is_wal = False active_sqla: Dict[str, SQLA] = {} db_url = str(get_res_path().parent / 'GsData.db') -db_sqla = DBSqla() -get_sqla = db_sqla.get_sqla diff --git a/GenshinUID/utils/resource/download_from_miniggicu.py b/GenshinUID/utils/resource/download_from_miniggicu.py index d3c43e82..140687f8 100644 --- a/GenshinUID/utils/resource/download_from_miniggicu.py +++ b/GenshinUID/utils/resource/download_from_miniggicu.py @@ -1,8 +1,10 @@ import os +import time import asyncio from pathlib import Path -from typing import List, Tuple +from typing import Dict, List, Tuple +import aiohttp from bs4 import BeautifulSoup from aiohttp import TCPConnector from gsuid_core.logger import logger @@ -13,59 +15,59 @@ from .download_url import PATH_MAP, download_file # MINIGG_FILE = 'http://file.microgg.cn/KimigaiiWuyi/resource/' BASE_TAG = '[HKFRP]' BASE_URL = 'http://hk-1.5gbps-2.lcf.icu:10200/' -RESOURCE_FILE = f'{BASE_URL}/resource/' -WIKI_FILE = f'{BASE_URL}/wiki/' - -NAMECARD_FILE = RESOURCE_FILE + 'char_namecard' -SIDE_FILE = RESOURCE_FILE + 'char_side' -STAND_FILE = RESOURCE_FILE + 'char_stand' -CHARS_FILE = RESOURCE_FILE + 'chars' -GACHA_FILE = RESOURCE_FILE + 'gacha_img' -ICON_FILE = RESOURCE_FILE + 'icon' -REL_FILE = RESOURCE_FILE + 'reliquaries' -WEAPON_FILE = RESOURCE_FILE + 'weapon' -GUIDE_FILE = WIKI_FILE + 'guide' -REF_FILE = WIKI_FILE + 'ref' - -''' -NAMECARD_FILE = MINIGG_FILE + 'char_namecard' -SIDE_FILE = MINIGG_FILE + 'char_side' -STAND_FILE = MINIGG_FILE + 'char_stand' -CHARS_FILE = MINIGG_FILE + 'chars' -GACHA_FILE = MINIGG_FILE + 'gacha_img' -ICON_FILE = MINIGG_FILE + 'icon' -REL_FILE = MINIGG_FILE + 'reliquaries' -WEAPON_FILE = MINIGG_FILE + 'weapon' -GUIDE_FILE = MINIGG_FILE + 'guide' -REF_FILE = MINIGG_FILE + 'ref_image' -''' -FILE_TO_PATH = { - NAMECARD_FILE: 6, - SIDE_FILE: 3, - STAND_FILE: 2, - CHARS_FILE: 1, - GACHA_FILE: 4, - ICON_FILE: 8, - REL_FILE: 7, - WEAPON_FILE: 5, - GUIDE_FILE: 10, - REF_FILE: 12, -} +async def check_url(tag: str, url: str): + async with aiohttp.ClientSession() as session: + try: + start_time = time.time() + async with session.get(url) as response: + elapsed_time = time.time() - start_time + if response.status == 200: + logger.info(f'{tag} {url} {elapsed_time}') + return tag, url, elapsed_time + else: + logger.info(f'{tag} {url} 超时...') + return tag, url, float('inf') + except aiohttp.ClientError: + logger.info(f'{tag} {url} 超时...') + return tag, url, float('inf') -FILE_TO_NAME = { - NAMECARD_FILE: '角色名片', - SIDE_FILE: '角色侧视图', - STAND_FILE: '角色半身照', - CHARS_FILE: '角色头像', - GACHA_FILE: '角色立绘', - ICON_FILE: '图标', - REL_FILE: '圣遗物', - WEAPON_FILE: '武器', - GUIDE_FILE: '攻略', - REF_FILE: '参考面板', -} + +async def find_fastest_url(urls: Dict[str, str]): + tasks = [] + for tag in urls: + tasks.append(asyncio.create_task(check_url(tag, urls[tag]))) + + results = await asyncio.gather(*tasks, return_exceptions=True) + fastest_tag = None + fastest_url = None + fastest_time = float('inf') + + for result in results: + if isinstance(result, Exception): + continue + tag, url, elapsed_time = result + if elapsed_time < fastest_time: + fastest_url = url + fastest_time = elapsed_time + fastest_tag = tag + + return fastest_tag, fastest_url + + +async def check_speed(): + logger.info('[gsuid资源下载]测速中...') + + URL_LIB = { + '[HKFRP]': 'http://hk-1.5gbps-2.lcf.icu:10200/', + '[qxqx]': 'https://kr-arm.qxqx.me/GenshinUID/', + } + + global BASE_TAG + global BASE_URL + BASE_TAG, BASE_URL = await find_fastest_url(URL_LIB) + logger.info(f"最快资源站: {BASE_TAG} {BASE_URL}") async def _get_url(url: str, sess: ClientSession): @@ -74,6 +76,47 @@ async def _get_url(url: str, sess: ClientSession): async def download_all_file_from_miniggicu(): + await check_speed() + RESOURCE_FILE = f'{BASE_URL}/resource/' + WIKI_FILE = f'{BASE_URL}/wiki/' + + NAMECARD_FILE = RESOURCE_FILE + 'char_namecard' + SIDE_FILE = RESOURCE_FILE + 'char_side' + STAND_FILE = RESOURCE_FILE + 'char_stand' + CHARS_FILE = RESOURCE_FILE + 'chars' + GACHA_FILE = RESOURCE_FILE + 'gacha_img' + ICON_FILE = RESOURCE_FILE + 'icon' + REL_FILE = RESOURCE_FILE + 'reliquaries' + WEAPON_FILE = RESOURCE_FILE + 'weapon' + GUIDE_FILE = WIKI_FILE + 'guide' + REF_FILE = WIKI_FILE + 'ref' + + FILE_TO_PATH = { + NAMECARD_FILE: 6, + SIDE_FILE: 3, + STAND_FILE: 2, + CHARS_FILE: 1, + GACHA_FILE: 4, + ICON_FILE: 8, + REL_FILE: 7, + WEAPON_FILE: 5, + GUIDE_FILE: 10, + REF_FILE: 12, + } + + FILE_TO_NAME = { + NAMECARD_FILE: '角色名片', + SIDE_FILE: '角色侧视图', + STAND_FILE: '角色半身照', + CHARS_FILE: '角色头像', + GACHA_FILE: '角色立绘', + ICON_FILE: '图标', + REL_FILE: '圣遗物', + WEAPON_FILE: '武器', + GUIDE_FILE: '攻略', + REF_FILE: '参考面板', + } + async def _download(tasks: List[asyncio.Task]): failed_list.extend( list(filter(lambda x: x is not None, await asyncio.gather(*tasks)))