LittlePaimon/Paimon_Gacha_Log/UIGF_and_XLSX.py

123 lines
5.2 KiB
Python
Raw Normal View History

2022-04-30 14:13:39 +08:00
from .meta_data import *
import time
import os
import xlsxwriter
data_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'user_data', 'gacha_log_data')
def id_generator():
id = 1000000000000000000
while True:
id = id + 1
yield str(id)
def convertUIGF(gachaLog, uid):
UIGF_data = {"info": {}}
2022-04-30 14:13:39 +08:00
UIGF_data["info"]["uid"] = uid
UIGF_data["info"]["lang"] = "zh-cn"
UIGF_data["info"]["export_time"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
UIGF_data["info"]["export_app"] = "genshin-gacha-export"
UIGF_data["info"]["export_app_version"] = 'v2.5.0.02221942'
UIGF_data["info"]["uigf_version"] = "v2.2"
UIGF_data["info"]["export_timestamp"] = int(time.time())
all_gachaDictList = []
for gacha_type in gachaQueryTypeIds:
gacha_log = gachaLog.get(gacha_type, [])
gacha_log = sorted(gacha_log, key=lambda gacha: gacha["time"], reverse=True)
gacha_log.reverse()
for gacha in gacha_log:
gacha["uigf_gacha_type"] = gacha_type
all_gachaDictList.extend(gacha_log)
all_gachaDictList = sorted(all_gachaDictList, key=lambda gacha: gacha["time"])
id = id_generator()
for gacha in all_gachaDictList:
if gacha.get("id", "") == "":
gacha["id"] = next(id)
all_gachaDictList = sorted(all_gachaDictList, key=lambda gacha: gacha["id"])
UIGF_data["list"] = all_gachaDictList
return UIGF_data
def writeXLSX(uid, gachaLog, gachaTypeIds):
t = time.strftime("%Y%m%d%H%M%S", time.localtime())
workbook = xlsxwriter.Workbook(os.path.join(data_path, f"gachaExport-{uid}.xlsx"))
for id in gachaTypeIds:
gachaDictList = gachaLog[id]
gachaTypeName = gachaQueryTypeDict[id]
gachaDictList.reverse()
worksheet = workbook.add_worksheet(gachaTypeName)
content_css = workbook.add_format(
{"align": "left", "font_name": "微软雅黑", "border_color": "#c4c2bf", "bg_color": "#ebebeb", "border": 1})
title_css = workbook.add_format(
{"align": "left", "font_name": "微软雅黑", "color": "#757575", "bg_color": "#dbd7d3", "border_color": "#c4c2bf",
"border": 1, "bold": True})
excel_header = ["时间", "名称", "类别", "星级", "祈愿类型", "总次数", "保底内"]
worksheet.set_column("A:A", 22)
worksheet.set_column("B:B", 14)
worksheet.set_column("E:E", 14)
worksheet.write_row(0, 0, excel_header, title_css)
worksheet.freeze_panes(1, 0)
counter = 0
pity_counter = 0
for gacha in gachaDictList:
time_str = gacha["time"]
name = gacha["name"]
item_type = gacha["item_type"]
rank_type = gacha["rank_type"]
gacha_type = gacha["gacha_type"]
uid = gacha["uid"]
gacha_type_name = gacha_type_dict.get(gacha_type, "")
counter = counter + 1
pity_counter = pity_counter + 1
excel_data = [time_str, name, item_type, rank_type, gacha_type_name, counter, pity_counter]
excel_data[3] = int(excel_data[3])
worksheet.write_row(counter, 0, excel_data, content_css)
if excel_data[3] == 5:
pity_counter = 0
star_5 = workbook.add_format({"color": "#bd6932", "bold": True})
star_4 = workbook.add_format({"color": "#a256e1", "bold": True})
star_3 = workbook.add_format({"color": "#8e8e8e"})
first_row = 1 # 不包含表头第一行 (zero indexed)
first_col = 0 # 第一列
last_row = len(gachaDictList) # 最后一行
last_col = len(excel_header) - 1 # 最后一列zero indexed 所以要减 1
worksheet.conditional_format(first_row, first_col, last_row, last_col,
{"type": "formula", "criteria": "=$D2=5", "format": star_5})
worksheet.conditional_format(first_row, first_col, last_row, last_col,
{"type": "formula", "criteria": "=$D2=4", "format": star_4})
worksheet.conditional_format(first_row, first_col, last_row, last_col,
{"type": "formula", "criteria": "=$D2=3", "format": star_3})
worksheet = workbook.add_worksheet("原始数据")
raw_data_header = ["count", "gacha_type", "id", "item_id", "item_type", "lang", "name", "rank_type", "time", "uid",
"uigf_gacha_type"]
worksheet.write_row(0, 0, raw_data_header)
UIGF_data = convertUIGF(gachaLog, uid)
all_gachaDictList = UIGF_data["list"]
all_counter = 0
for gacha in all_gachaDictList:
count = gacha.get("count", "")
gacha_type = gacha.get("gacha_type", "")
id = gacha.get("id", "")
item_id = gacha.get("item_id", "")
item_type = gacha.get("item_type", "")
lang = gacha.get("lang", "")
name = gacha.get("name", "")
rank_type = gacha.get("rank_type", "")
time_str = gacha.get("time", "")
uid = gacha.get("uid", "")
uigf_gacha_type = gacha.get("uigf_gacha_type", "")
excel_data = [count, gacha_type, id, item_id, item_type, lang, name, rank_type, time_str, uid, uigf_gacha_type]
worksheet.write_row(all_counter + 1, 0, excel_data)
all_counter += 1
workbook.close()