修复:查询词云

This commit is contained in:
KimgiaiiWuyi 2022-06-25 00:48:47 +08:00
parent 9b73ea2ebf
commit 4cbb7afacb

View File

@ -260,7 +260,7 @@ class GetCookies:
return '没有可以使用的Cookies' return '没有可以使用的Cookies'
async def draw_word_cloud(uid: str, image: Optional[Match] = None, mode: int = 2): async def draw_word_cloud(uid: str, image: Optional[str] = None, mode: int = 2):
def create_rounded_rectangle_mask(rectangle, _radius): def create_rounded_rectangle_mask(rectangle, _radius):
solid_fill = (50, 50, 50, 255) solid_fill = (50, 50, 50, 255)
img = Image.new('RGBA', rectangle.size, (0, 0, 0, 0)) img = Image.new('RGBA', rectangle.size, (0, 0, 0, 0))
@ -282,74 +282,36 @@ async def draw_word_cloud(uid: str, image: Optional[Match] = None, mode: int = 2
return img return img
nickname = '' # 获取Cookies
while True: data_def = GetCookies()
use_cookies = cache_db(uid, mode - 1) retcode = await data_def.get_useable_cookies(uid, mode)
if use_cookies == '': if not retcode:
return '绑定记录不存在。' return retcode
elif use_cookies == '没有可以使用的Cookies': raw_data = data_def.raw_data
return '没有可以使用的Cookies' use_cookies = data_def.useable_cookies
uid = data_def.uid
nickname = data_def.nickname if data_def.nickname else nickname
if mode == 3: # 获取数据
mys_data = await get_mihoyo_bbs_info(uid, use_cookies)
for i in mys_data['data']['list']:
if i['game_id'] != 2:
mys_data['data']['list'].remove(i)
uid = mys_data['data']['list'][0]['game_role_id']
nickname = mys_data['data']['list'][0]['nickname']
# role_level = mys_data['data']['list'][0]['level']
raw_data = await get_info(uid, use_cookies)
raw_abyss_data = await get_spiral_abyss_info(uid, use_cookies)
else:
raw_abyss_data = await get_spiral_abyss_info(uid, use_cookies)
raw_data = await get_info(uid, use_cookies)
if raw_data['retcode'] != 0:
if raw_data['retcode'] == 10001:
# return ('Cookie错误/过期请重置Cookie')
error_db(use_cookies, 'error')
elif raw_data['retcode'] == 10101:
# return ('当前cookies已达到30人上限')
error_db(use_cookies, 'limit30')
elif raw_data['retcode'] == 10102:
return '当前查询id已经设置了隐私无法查询'
else:
return (
'Api报错返回内容为\r\n'
+ str(raw_data) + '\r\n出现这种情况可能的UID输入错误 or 不存在'
)
else:
break
raw_abyss_data = raw_abyss_data['data']
raw_data = raw_data['data'] raw_data = raw_data['data']
raw_char_data = raw_data['avatars']
raw_abyss_data = data_def.raw_abyss_data
# char_data = raw_data['avatars'] char_data = raw_data['avatars']
# char_num = len(raw_data['avatars']) raw_abyss_data = raw_abyss_data['data']
char_datas = [] char_ids = []
char_names = []
def get_char_id(start, end): for i in char_data:
for char in range(start, end): char_ids.append(i['id'])
char_rawdata = get_character(uid, [char], use_cookies) char_names.append(i['name'])
if char_rawdata['retcode'] != -1: char_rawdata = get_character(uid, char_ids, use_cookies)
char_datas.append(char_rawdata['data']['avatars'][0]) char_datas = char_rawdata['data']['avatars']
thread_list = []
st = 8
for i in range(0, 8):
thread = threading.Thread(target=get_char_id, args=(10000002 + i * st, 10000002 + (i + 1) * st))
thread_list.append(thread)
for t in thread_list:
t.setDaemon(True)
t.start()
for t in thread_list:
t.join()
weapons_datas = [] weapons_datas = []
for i in char_datas: for i in char_datas:
weapons_datas.append(i['weapon']) weapons_datas.append(i['weapon'])
@ -473,39 +435,14 @@ async def draw_word_cloud(uid: str, image: Optional[Match] = None, mode: int = 2
word_str['这一击,贯穿星辰'] = l4_size word_str['这一击,贯穿星辰'] = l4_size
else: else:
pass pass
bg_list = random.choice([x for x in os.listdir(BG_PATH) # 获取背景图片各项参数
if os.path.isfile(os.path.join(BG_PATH, x))])
bg2_path = os.path.join(BG_PATH, bg_list)
based_w = 900 based_w = 900
based_h = 1000 based_h = 1000
based_scale = '%.3f' % (based_w / based_h) image_def = CustomizeImage(image, based_w, based_h)
bg_img = image_def.bg_img
is_edit = False bg_color = image_def.bg_color
if image: text_color = image_def.text_color
image_data = image.group(2)
with open(os.path.join(TEXT_PATH, nickname + '.png'), 'wb') as f:
f.write(get(image_data).content)
is_edit = True
if is_edit:
bg_path_edit = os.path.join(TEXT_PATH, f'{nickname}.png')
else:
bg_path_edit = bg2_path
edit_bg = Image.open(bg_path_edit)
w, h = edit_bg.size
scale_f = '%.3f' % (w / h)
new_w = math.ceil(based_h * float(scale_f))
new_h = math.ceil(based_w / float(scale_f))
if scale_f > based_scale:
bg_img2 = edit_bg.resize((new_w, based_h), Image.ANTIALIAS)
else:
bg_img2 = edit_bg.resize((based_w, new_h), Image.ANTIALIAS)
bg_img = bg_img2.crop((0, 0, based_w, based_h))
x, y = 50, 153 x, y = 50, 153
radius = 50 radius = 50
@ -515,7 +452,7 @@ async def draw_word_cloud(uid: str, image: Optional[Match] = None, mode: int = 2
panle = Image.open(os.path.join(TEXT_PATH, 'wordcloud_0.png')) panle = Image.open(os.path.join(TEXT_PATH, 'wordcloud_0.png'))
mask = np.array([Image.open(os.path.join(TEXT_PATH, 'wordcloudmask.png'))]) mask = np.array(Image.open(os.path.join(TEXT_PATH, 'wordcloudmask.png')))
wc = WordCloud( wc = WordCloud(
font_path=os.path.join(FILE2_PATH, 'yuanshen.ttf'), font_path=os.path.join(FILE2_PATH, 'yuanshen.ttf'),