diff --git a/.gitignore b/.gitignore index b472b97..2e04da2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,4 @@ -# 根目录下的部分数据文件 +.idea/ # 新版配置文件 -/config.json - -# 旧版配置文件 -/config.yml - -# 旧版数据源文件 -/source.txt \ No newline at end of file +/config.json \ No newline at end of file diff --git a/__init__.py b/__init__.py index 52ebd69..782c52a 100644 --- a/__init__.py +++ b/__init__.py @@ -5,23 +5,14 @@ from hoshino import Service, R, priv -from .lock import move_config, lock_clan, select_all_clan, unlock_clan, judge_lock +from .lock import lock_clan, select_all_clan, unlock_clan, judge_lock from .search import set_source, get_source, get_current_time, create_img, get_search_rank # 首次启动本插件的时候创建配置文件 -con_info = { - 'source': 'layvtwt.top', - 'bind': {} -} current_dir = os.path.join(os.path.dirname(__file__), 'config.json') if not os.path.exists(current_dir): with open(current_dir, 'w', encoding='UTF-8') as f: - json.dump(con_info, f, indent=4, ensure_ascii=False) - # 若是旧版更新而来,则数据移至新配置文件 - old_con_dir = os.path.join(os.path.dirname(__file__), 'config.yml') - if os.path.exists(old_con_dir): - loop = asyncio.get_event_loop() - loop.run_until_complete(move_config(current_dir, old_con_dir)) + json.dump({}, f, indent=4, ensure_ascii=False) # 每次启动hoshino的时候自动清除一下历史图片 if os.path.exists(R.img('clan_rank_tw').path): @@ -33,25 +24,21 @@ sv_help = ''' 命令如下,注意空格别漏 -注:查公会、查会长、查排名可以选择(1/2/3/4/all),其中all为全服查询 +注:查询可选择服(1:台一服, 2:台二三四服, all:全服) -[选择会战数据源 1] 选择数据源:1."infedg.xyz" 2."layvtwt.top" ,默认为 2 (该功能限维护组) +[查档线 1] 查看档线,数字为服务器编号(1/2) -[查看会战数据源] 查看当前使用的数据源 +[查公会 1 公会名] 按照公会名搜索公会排名,数字为服务器编号(1/2/all) -[查档线 1] 查看档线,数字为服务器编号(1/2/3/4) +[查会长 1 会长名] 按照会长名搜索公会排名,数字为服务器编号(1/2/all) -[查公会 1 公会名] 按照公会名搜索公会排名,数字为服务器编号(1/2/3/4/all) +[查排名 1 排名] 按照排名搜索公会排名,数字为服务器编号(1/2/all) -[查会长 1 会长名] 按照会长名搜索公会排名,数字为服务器编号(1/2/3/4/all) - -[查排名 1 排名] 按照排名搜索公会排名,数字为服务器编号(1/2/3/4/all) - -[绑定公会 1 公会名] 绑定QQ群和公会(一群限一个公会,只能管理员和群主绑定),数字为服务器编号(1/2/3/4) +[绑定公会 1 公会名] 绑定QQ群和公会(一群限一个公会,只能管理员和群主绑定),数字为服务器编号(1/2) [解绑公会] 解绑本QQ群和已绑定的公会(只能管理员和群主解绑) -[查询绑定] 查询本QQ群的绑定状态 +[查询公会绑定] 查询本QQ群的绑定状态 [公会排名] 查询本QQ群所绑定的公会的排名 '''.strip() @@ -61,7 +48,7 @@ # 帮助界面 @sv.on_fullmatch('会战排名帮助') -async def help(bot, ev): +async def query_help(bot, ev): await bot.send(ev, sv_help) @@ -71,191 +58,152 @@ async def select_source(bot, ev): if not priv.check_priv(ev, priv.SUPERUSER): msg = '选择数据源功能仅限维护组' await bot.finish(ev, msg) - alltext = ev.message.extract_plain_text() - if alltext not in ['1', '2']: - msg = '数据源编号错误!\n可选值有(1/2)其中:\n1."infedg.xyz"\n2."layvtwt.top"' - await bot.finish(ev, msg) - else: - try: - source = await set_source(alltext) - msg = f'当前数据源成功切换至:{source}' - await bot.send(ev, msg) - except: - msg = f'数据源切换失败,请重新尝试!' - await bot.send(ev, msg) + source_name = str(ev.message).strip() + + success = await set_source(source_name) + msg = f'当前数据源成功切换至:{source_name}' if success else f'失败!数据源{source_name}未在[data_source.json]中配置' + await bot.send(ev, msg) # 查看数据源 @sv.on_fullmatch('查看会战数据源') async def view_source(bot, ev): - source = await get_source() - msg = f'您当前选择的数据源是:{source}' + f_data = await get_source() + msg = f'您当前选择的数据源是:{f_data["current"]}' await bot.send(ev, msg) # 查档线 @sv.on_prefix('查档线') async def search_line(bot, ev): - alltext = ev.message.extract_plain_text() - if alltext not in ['1', '2', '3', '4']: - msg = '服务器编号错误!(可选值有:1/2/3/4)' - await bot.finish(ev, msg) - source = await get_source() - alltext = '2' if alltext == '3' or alltext == '4' else alltext - uptime = await get_current_time(alltext, source) + server = str(ev.message).strip() + if server not in ['1', '2']: + msg = '服务器编号错误!(可选值有:1/2)' + await bot.send(ev, msg) + return + + f_data = await get_source() + up_time = await get_current_time(server, f_data) await asyncio.sleep(0.5) - score_line, filename_tmp = await get_search_rank(alltext, uptime, source, 'scoreline') + + score_line, filename_tmp = await get_search_rank(server, up_time, f_data, 'scoreline') if score_line['state'] != 'success': - msg = '出现异常,请尝试重新输入命令!' - await bot.finish(ev, msg) + msg = '查询数据失败,接口返回失败!' + await bot.send(ev, msg) + return + await create_img(score_line, filename_tmp, False) line_img = R.img(f'clan_rank_tw/' + filename_tmp).cqcode - msg = f'台服 {alltext}服 档线如下:\n时间档:{uptime}\n(数据来自{source})\n{line_img}' + msg = f'台服 {server}服 档线如下:\n时间档:{up_time}\n(数据来自{f_data["current"]})\n{line_img}' await bot.send(ev, msg) # 按 公会名 查询排名 @sv.on_prefix('查公会') async def search_clan(bot, ev): - alltext = ev.message.extract_plain_text() - info_tmp = alltext.split(' ', 1) - server = info_tmp[0] - clan_name = info_tmp[1] - if server not in ['1', '2', '3', '4', 'all']: - msg = '服务器编号错误!(可选值有:1/2/3/4/all)' - await bot.finish(ev, msg) - is_all = True if server == 'all' else False - server = 'merge' if server == 'all' else server - server = '2' if server == '3' or server == '4' else server - source = await get_source() - if source == 'infedg.xyz' and server == 'merge': - await bot.finish(ev, f'{source}暂不支持全服查询,请数据源更换至 layvtwt.top') - uptime = await get_current_time(server, source) - await asyncio.sleep(0.5) - clan_score, filename_tmp = await get_search_rank(server, uptime, source, 'clan_name', clan_name) - if clan_score['state'] != 'success': - msg = '出现异常,请尝试重新输入命令!' - await bot.finish(ev, msg) - if clan_score['total'] == 0: - msg = '未查询到信息,请确保公会名正确!' - await bot.finish(ev, msg) - await create_img(clan_score, filename_tmp, is_all) - clan_img = R.img(f'clan_rank_tw/' + filename_tmp).cqcode - server = '全' if server == 'merge' else server - msg = f'台服 {server}服 公会名查询 “{clan_name}” 结果如下:\n时间档:{uptime}\n(数据来自{source})\n{clan_img}' - await bot.send(ev, msg) + await query('公会', 'clan_name', bot, ev) # 按 会长名 查询排名 @sv.on_prefix('查会长') async def search_leader(bot, ev): - alltext = ev.message.extract_plain_text() - info_tmp = alltext.split(' ', 1) - server = info_tmp[0] - leader_name = info_tmp[1] - if server not in ['1', '2', '3', '4', 'all']: - msg = '服务器编号错误!(可选值有:1/2/3/4/all)' - await bot.finish(ev, msg) - is_all = True if server == 'all' else False - server = 'merge' if server == 'all' else server - server = '2' if server == '3' or server == '4' else server - source = await get_source() - if source == 'infedg.xyz' and server == 'merge': - await bot.finish(ev, f'{source}暂不支持全服查询,请数据源更换至 layvtwt.top') - uptime = await get_current_time(server, source) - await asyncio.sleep(0.5) - clan_score, filename_tmp = await get_search_rank(server, uptime, source, 'leader_name', leader_name) - if clan_score['total'] == 0: - msg = '未查询到信息,请确保会长名正确!' - await bot.finish(ev, msg) - await create_img(clan_score, filename_tmp, is_all) - leader_img = R.img(f'clan_rank_tw/' + filename_tmp).cqcode - server = '全' if server == 'merge' else server - msg = f'台服 {server}服 会长名查询 “{leader_name}” 结果如下:\n时间档:{uptime}\n(数据来自{source})\n{leader_img}' - await bot.send(ev, msg) + await query('会长', 'leader_name', bot, ev) # 按 排名 查询公会 @sv.on_prefix('查排名') async def search_rank(bot, ev): - alltext = ev.message.extract_plain_text() - info_tmp = alltext.split(' ', 1) + await query('排', 'rank', bot, ev) + + +# 实际查询逻辑 +async def query(search_type, search_type_code, bot, ev): + all_text = str(ev.message).strip() + info_tmp = all_text.split(' ', 1) server = info_tmp[0] - rank = info_tmp[1] - if server not in ['1', '2', '3', '4', 'all']: - msg = '服务器编号错误!(可选值有:1/2/3/4/all)' - await bot.finish(ev, msg) - try: - rank_tmp = int(rank) - except: - msg = '排名必须为正整数!' - await bot.finish(ev, msg) - if rank_tmp >= 3000 or rank_tmp <= 0: - msg = '暂且仅支持 0 < rank <= 3000 排名的公会!' - await bot.finish(ev, msg) + search_name = info_tmp[1] + if server not in ['1', '2', 'all']: + msg = '服务器编号错误!(可选值有:1/2/all)' + await bot.send(ev, msg) + return + is_all = True if server == 'all' else False server = 'merge' if server == 'all' else server - server = '2' if server == '3' or server == '4' else server - source = await get_source() - if source == 'infedg.xyz' and server == 'merge': - await bot.finish(ev, f'{source}暂不支持全服查询,请数据源更换至 layvtwt.top') - uptime = await get_current_time(server, source) + + f_data = await get_source() + up_time = await get_current_time(server, f_data) await asyncio.sleep(0.5) - clan_score, filename_tmp = await get_search_rank(server, uptime, source, 'rank', rank) + + clan_score, filename_tmp = await get_search_rank(server, up_time, f_data, search_type_code, search_name) + if clan_score['state'] != 'success': + msg = '出现异常,请尝试重新输入命令!' + await bot.send(ev, msg) + return if clan_score['total'] == 0: - msg = '未查询到信息,请确保该排名下有公会存在!' - await bot.finish(ev, msg) + msg = f'未查询到信息,请确保输入{search_type}名[{search_name}]正确!' + await bot.send(ev, msg) + return + await create_img(clan_score, filename_tmp, is_all) - rank_img = R.img(f'clan_rank_tw/' + filename_tmp).cqcode + clan_img = R.img(f'clan_rank_tw/' + filename_tmp).cqcode server = '全' if server == 'merge' else server - msg = f'台服 {server}服 会长名查询 “{rank}” 结果如下:\n时间档:{uptime}\n(数据来自{source})\n{rank_img}' + msg = f'台服 {server}服 {search_type}名查询 “{search_name}” 结果如下:\n时间档:{up_time}\n(数据来自{f_data["current"]})\n{clan_img}' await bot.send(ev, msg) # 绑定公会 @sv.on_prefix('绑定公会') async def locked_clan(bot, ev): - if (not priv.check_priv(ev, priv.ADMIN)) and (not priv.check_priv(ev, priv.SUPERUSER)) and (not priv.check_priv(ev, priv.OWNER)): + if ((not priv.check_priv(ev, priv.ADMIN)) and (not priv.check_priv(ev, priv.SUPERUSER)) and + (not priv.check_priv(ev, priv.OWNER))): msg = '绑定功能仅限群主和管理员' - await bot.finish(ev, msg) + await bot.send(ev, msg) + return + group_id = str(ev['group_id']) - alltext = ev.message.extract_plain_text() - info_tmp = alltext.split(' ', 1) + all_text = str(ev.message).strip() + info_tmp = all_text.split(' ', 1) server = info_tmp[0] clan_name = info_tmp[1] - if server not in ['1', '2', '3', '4']: - msg = '服务器编号错误!(可选值有:1/2/3/4)' - await bot.finish(ev, msg) - source = await get_source() - server = '2' if server == '3' or server == '4' else server - uptime = await get_current_time(server, source) + if server not in ['1', '2']: + msg = '服务器编号错误!(可选值有:1/2)' + await bot.send(ev, msg) + return + + f_data = await get_source() + up_time = await get_current_time(server, f_data) await asyncio.sleep(0.5) - clan_score, filename_tmp = await get_search_rank(server, uptime, source, 'clan_name', clan_name) + + clan_score, filename_tmp = await get_search_rank(server, up_time, f_data, 'clan_name', clan_name) if clan_score['state'] != 'success': msg = '出现异常,请尝试重新输入命令!' - await bot.finish(ev, msg) + await bot.send(ev, msg) + return + if clan_score['total'] == 0: msg = '未查询到公会,请确保公会名正确!' - await bot.finish(ev, msg) elif clan_score['total'] == 1: msg, flag = await judge_lock(group_id) if flag: msg += f'\n因此请勿重复绑定' - await bot.finish(ev, msg) + await bot.send(ev, msg) + return msg = await lock_clan(server, clan_name, group_id) - await bot.send(ev, msg) else: msg = await select_all_clan(clan_score) msg += '\n\n该功能需精确的公会名,因此请尝试重新输入命令!' - await bot.send(ev, msg) + await bot.send(ev, msg) # 解绑公会 @sv.on_fullmatch('解绑公会') async def unlocked_clan(bot, ev): - if (not priv.check_priv(ev, priv.ADMIN)) and (not priv.check_priv(ev, priv.SUPERUSER)) and (not priv.check_priv(ev, priv.OWNER)): + if ((not priv.check_priv(ev, priv.ADMIN)) and (not priv.check_priv(ev, priv.SUPERUSER)) and + (not priv.check_priv(ev, priv.OWNER))): msg = '解绑功能仅限群主和管理员' - await bot.finish(ev, msg) + await bot.send(ev, msg) + return + group_id = ev['group_id'] msg, flag = await judge_lock(group_id) if not flag: @@ -266,7 +214,7 @@ async def unlocked_clan(bot, ev): # 查看公会绑定状态 -@sv.on_fullmatch('查询绑定') +@sv.on_fullmatch('查询公会绑定') async def lock_status(bot, ev): group_id = str(ev['group_id']) msg, flag = await judge_lock(group_id) @@ -280,29 +228,36 @@ async def search_locked(bot, ev): msg, flag = await judge_lock(group_id) if not flag: msg += f'\n因此请先绑定公会' - await bot.finish(ev, msg) - current_dir = os.path.join(os.path.dirname(__file__), 'config.json') - with open(current_dir, 'r', encoding='UTF-8') as f: - f_data = json.load(f) - server = f_data['bind'][group_id]['server'] - clan_name = f_data['bind'][group_id]['clan_name'] - source = await get_source() - server = '2' if server == '3' or server == '4' else server - uptime = await get_current_time(server, source) + await bot.send(ev, msg) + return + + with open(current_dir, 'r', encoding='UTF-8') as af: + f_data = json.load(af) + server = f_data[group_id]['server'] + clan_name = f_data[group_id]['clan_name'] + + f_data = await get_source() + up_time = await get_current_time(server, f_data) await asyncio.sleep(0.5) - info_data, filename_tmp = await get_search_rank(server, uptime, source, 'clan_name', clan_name) - allid = info_data['data'].keys() - for id in allid: - rank = info_data['data'][str(id)]['rank'] - clan_name = info_data['data'][str(id)]['clan_name'] - member_num = str(info_data['data'][str(id)]['member_num']).replace('.0', '') - leader_name = info_data['data'][str(id)]['leader_name'] - damage = info_data['data'][str(id)]['damage'] - lap = info_data['data'][str(id)]['lap'] - boss_id = info_data['data'][str(id)]['boss_id'] - remain = info_data['data'][str(id)]['remain'] - grade_rank = str(info_data['data'][str(id)]['grade_rank']).replace('.0', '') - msg = f'公会名:{clan_name}\n时间档:{uptime}\n排名:{rank}' + + info_data, filename_tmp = await get_search_rank(server, up_time, f_data, 'clan_name', clan_name) + clan_list = list(info_data['data']) + if not clan_list: + await bot.send(ev, f'无法查询到本群绑定的公会[{clan_name}]') + return + + clan = clan_list[0] + rank = clan['rank'] + clan_name = clan['clan_name'] + member_num = str(clan['member_num']).replace('.0', '') + leader_name = clan['leader_name'] + damage = clan['damage'] + lap = clan['lap'] + boss_id = clan['boss_id'] + remain = clan['remain'] + grade_rank = str(clan['grade_rank']).replace('.0', '') + + msg = f'公会名:{clan_name}\n时间档:{up_time}\n排名:{rank}' msg += f'\n会长:{leader_name}\n人数:{member_num}人\n分数:{damage}' msg += f'\n周目:{lap}周目\n当前BOSS:{boss_id}\n剩余血量:{remain}\n上期排名:{grade_rank}' await bot.send(ev, msg) diff --git a/config.yml b/config.yml deleted file mode 100644 index aba1b40..0000000 --- a/config.yml +++ /dev/null @@ -1,16 +0,0 @@ -'1': -- user: - clan_name: 样例:公会名字 - group_id: 样例:qq群号 -'2': -- user: - clan_name: 样例:公会名字 - group_id: 样例:qq群号 -'3': -- user: - clan_name: 样例:公会名字 - group_id: 样例:qq群号 -'4': -- user: - clan_name: 样例:公会名字 - group_id: 样例:qq群号 diff --git a/data_source.json b/data_source.json new file mode 100644 index 0000000..0acb998 --- /dev/null +++ b/data_source.json @@ -0,0 +1,15 @@ +{ + "current": "layvtwt.top", + "source_list": { + "layvtwt.top": { + "api": "https://rank.layvtwt.top/api", + "domain": "rank.layvtwt.top", + "remarks": "目前唯一可用数据源" + }, + "infedg.xyz": { + "api": "https://kyaru.infedg.xyz", + "domain": "kyaru.infedg.xyz", + "remarks": "目前不可用,仅作留档" + } + } +} \ No newline at end of file diff --git a/lock.py b/lock.py index 4220aab..1cab206 100644 --- a/lock.py +++ b/lock.py @@ -1,45 +1,21 @@ -import yaml import json import os -# 将数据移至新配置文件 -async def move_config(current_dir, old_con_dir): - # 读取旧数据 - with open(old_con_dir, 'r', encoding='UTF-8') as f: - file_data = f.read() - config = yaml.load(file_data, Loader=yaml.FullLoader) - data = {} - for server in range(1, 5): - server = str(server) - for user in config[server]: - if user['user']['clan_name'] != '样例:公会名字': - group_id = str(user['user']['group_id']) - data[group_id] = {} - data[group_id]['server'] = server - data[group_id]['clan_name'] = user['user']['clan_name'] - # 写入新数据 - with open(current_dir, 'r', encoding='UTF-8') as af: - f_data = json.load(af) - f_data['bind'] = data - with open(current_dir, 'w', encoding='UTF-8') as f: - json.dump(f_data, f, indent=4, ensure_ascii=False) - # 删除旧数据文件 - os.remove(os.path.join(os.path.dirname(__file__), 'config.yml')) - os.remove(os.path.join(os.path.dirname(__file__), 'source.txt')) # 绑定公会 async def lock_clan(server, clan_name, group_id): current_dir = os.path.join(os.path.dirname(__file__), 'config.json') with open(current_dir, 'r', encoding='UTF-8') as af: f_data = json.load(af) - f_data['bind'][group_id] = {} - f_data['bind'][group_id]['server'] = server - f_data['bind'][group_id]['clan_name'] = clan_name + f_data[group_id] = {} + f_data[group_id]['server'] = server + f_data[group_id]['clan_name'] = clan_name with open(current_dir, 'w', encoding='UTF-8') as f: json.dump(f_data, f, indent=4, ensure_ascii=False) msg = f'QQ群:{group_id} 已成功绑定{server}服公会“{clan_name}”' return msg + # 多个绑定选择触发 async def select_all_clan(clan_score): num = clan_score['total'] @@ -50,28 +26,30 @@ async def select_all_clan(clan_score): msg = msg + '\n' + str(num_id + 1) + '. ' + str(clan_name) return msg + # 解绑公会 async def unlock_clan(group_id): current_dir = os.path.join(os.path.dirname(__file__), 'config.json') with open(current_dir, 'r', encoding='UTF-8') as af: f_data = json.load(af) - clan_name = f_data['bind'][group_id]['clan_name'] - f_data['bind'].pop(group_id) + clan_name = f_data[group_id]['clan_name'] + f_data.pop(group_id) with open(current_dir, 'w', encoding='UTF-8') as f: json.dump(f_data, f, indent=4, ensure_ascii=False) msg = f'QQ群:{group_id} 已成功解绑公会"{clan_name}"' return msg + # 查询公会绑定 async def judge_lock(group_id): current_dir = os.path.join(os.path.dirname(__file__), 'config.json') with open(current_dir, 'r', encoding='UTF-8') as af: f_data = json.load(af) - if group_id in list(f_data['bind'].keys()): - server = f_data['bind'][group_id]['server'] - clan_name = f_data['bind'][group_id]['clan_name'] + if group_id in list(f_data.keys()): + server = f_data[group_id]['server'] + clan_name = f_data[group_id]['clan_name'] msg = f'本群:{group_id} 已成功绑定{server}服公会“{clan_name}”' return msg, True else: msg = f'本群:{group_id} 暂未绑定任何公会' - return msg, False \ No newline at end of file + return msg, False diff --git a/requirements.txt b/requirements.txt index 2deffe5..0fef034 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ prettytable Pillow -requests -pyyaml \ No newline at end of file +requests \ No newline at end of file diff --git a/search.py b/search.py index 69b3d10..be8e3ab 100644 --- a/search.py +++ b/search.py @@ -7,73 +7,69 @@ from prettytable import PrettyTable -# 设置源 -async def set_source(source_id): - if source_id == '1': - source = 'infedg.xyz' - elif source_id == '2': - source = 'layvtwt.top' - current_dir = os.path.join(os.path.dirname(__file__), 'config.json') - with open(current_dir, 'r', encoding='UTF-8') as af: - f_data = json.load(af) - f_data['source'] = source +# 设置当前源 +async def set_source(source_name: str) -> bool: + f_data = await get_source() + source_list = dict(f_data['source_list']) + if source_name not in source_list: + return False + + f_data['current'] = source_name + current_dir = os.path.join(os.path.dirname(__file__), 'data_source.json') with open(current_dir, 'w', encoding='UTF-8') as f: json.dump(f_data, f, indent=4, ensure_ascii=False) - return source + return True # 获取源 -async def get_source(): - current_dir = os.path.join(os.path.dirname(__file__), 'config.json') +async def get_source() -> dict: + current_dir = os.path.join(os.path.dirname(__file__), 'data_source.json') with open(current_dir, 'r', encoding='UTF-8') as af: f_data = json.load(af) - source = f_data['source'] - return source + return f_data + + +# 获取当前的数据源详情 +async def get_source_detail(f_data: dict) -> dict: + current = f_data['current'] + source_list = f_data.get('source_list', {}) + return source_list.get(current, {}) # 通用头 -async def get_headers(): - source = await get_source() - if source == 'infedg.xyz': - source = 'kyaru.' + source - elif source == 'layvtwt.top': - source = 'rank.' + source +async def get_headers(f_data: dict) -> dict: + source_detail = await get_source_detail(f_data) headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', 'Custom-Source': 'Kyaru', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' + 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36', 'Content-Type': 'application/json', - 'Origin': f'https://{source}', - 'Referer': f'https://{source}/' + 'Origin': f'https://{source_detail["domain"]}', + 'Referer': f'https://{source_detail["domain"]}/' } return headers # 获取最新数据的时间档 -async def get_current_time(server, source): - if source == 'infedg.xyz': - source = 'api.' + source - elif source == 'layvtwt.top': - source = 'rank.' + source + '/api' - url = f'https://{source}/current/getalltime/tw' - time_tmp = await aiorequests.get(url, headers=await get_headers(), timeout=10) +async def get_current_time(server, f_data): + source_detail = await get_source_detail(f_data) + url = source_detail['api'] + '/current/getalltime/tw' + time_tmp = await aiorequests.get(url, headers=await get_headers(f_data), timeout=10) alltime = await time_tmp.json() - alldays = alltime['data'][server].keys() - upday = list(alldays)[-1] - uphour = list(alltime['data'][server][upday])[-1] - uptime = str(upday) + str(uphour) - return uptime + all_days = alltime['data'][server].keys() + up_day = list(all_days)[-1] + up_hour = list(alltime['data'][server][up_day])[-1] + up_time = str(up_day) + str(up_hour) + return up_time # 返回查询信息 -async def get_search_rank(server, uptime, source, search_type=None, search_param=''): - if source == 'infedg.xyz': - source = 'api.' + source - elif source == 'layvtwt.top': - source = 'rank.' + source + '/api' - url = f'https://{source}/search/{search_type}' +async def get_search_rank(server: str, uptime: str, f_data: dict, search_type: str = None, search_param: str = ''): + source_detail = await get_source_detail(f_data) + url = source_detail['api'] + '/search/' + search_type file_tmp = 'tw/' + str(server) + '/' + str(uptime) filename_tmp = 'tw-' + str(server) + '-' + str(uptime) + '-' + str(search_param) + '.png' params = { @@ -82,7 +78,7 @@ async def get_search_rank(server, uptime, source, search_type=None, search_param 'page': 0, 'page_limit': 10 } - clan_score_tmp = await aiorequests.post(url, headers=await get_headers(), json=params, timeout=10) + clan_score_tmp = await aiorequests.post(url, headers=await get_headers(f_data), json=params, timeout=10) clan_score = await clan_score_tmp.json() return clan_score, filename_tmp diff --git a/source.txt b/source.txt deleted file mode 100644 index a7179cb..0000000 --- a/source.txt +++ /dev/null @@ -1 +0,0 @@ -layvtwt.top \ No newline at end of file