rdp-studio commited on
Commit
a9c6b76
·
1 Parent(s): adbd325

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +136 -0
app.py ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+
3
+ import io
4
+ import datetime
5
+ from pytz import timezone
6
+
7
+ from login import catch_qr, get_uid_key
8
+ from nft import having_card_id_list, card_id_set_ava
9
+
10
+ sid_map = {
11
+ "SHN48荣耀时刻": 1,
12
+ "无": 2,
13
+ "无2": 3,
14
+ "胶囊计划": 4,
15
+ "天官赐福": 5,
16
+ "A - AKB48TSH四周年": 6,
17
+ "B - AKB48TSH四周年": 7,
18
+ "C - AKB48TSH四周年": 8,
19
+ "D - AKB48TSH四周年": 9,
20
+ "E - AKB48TSH四周年": 10,
21
+ "F - AKB48TSH四周年": 11,
22
+ "G - AKB48TSH四周年": 12,
23
+ "H - AKB48TSH四周年": 13,
24
+ "三体动画": 14
25
+ }
26
+
27
+
28
+ def qr(ava_image):
29
+ if ava_image:
30
+ qr_img, info = catch_qr(ava_image)
31
+ return {image_qr: qr_img, login_info: info}
32
+ return {image_qr: None, login_info: None}
33
+
34
+
35
+ def verify_login(info, u_verify, u_id, u_key, sid):
36
+ sid_num = sid_map[sid]
37
+ code = "请刷新页面并重新扫码登录"
38
+ if not u_verify:
39
+ result, u_id, u_key, code = get_uid_key(info)
40
+ if not result:
41
+ return False, "", "", sid_num, code
42
+ else:
43
+ u_verify = True
44
+ return u_verify, u_id, u_key, sid_num, code
45
+
46
+
47
+ def back_card_id_list(info, u_verify, u_id, u_key, sid):
48
+ if info:
49
+ u_verify, u_id, u_key, sid_num, code = verify_login(info, u_verify, u_id, u_key, sid)
50
+ if u_verify:
51
+ result, had_card_id_list, code = having_card_id_list(u_id, u_key, sid_num)
52
+ if result:
53
+ print("获取卡牌列表成功")
54
+ card_name_list = list(had_card_id_list.keys())
55
+ return {verify: u_verify, uid: u_id, key: u_key, card_id_list: had_card_id_list,
56
+ card_list_drop: gr.update(choices=card_name_list, value=card_name_list[0]), code_output: code}
57
+ else:
58
+ print("获取卡牌列表失败")
59
+ return {verify: u_verify, uid: u_id, key: u_key, card_list_drop: gr.update(choices=[]),
60
+ code_output: code}
61
+ else:
62
+ return {code_output: "请先上传头像和扫码登录"}
63
+
64
+
65
+ def name_get_card_id(card_id_list_dict, card_list_drop_name):
66
+ if card_id_list_dict and card_list_drop_name:
67
+ for card_name in card_id_list_dict.keys():
68
+ if card_name == card_list_drop_name:
69
+ cid = card_id_list_dict[card_name]
70
+ return {card_id: cid}
71
+ return {card_id: ""}
72
+
73
+
74
+ def login_up_nft(info, u_verify, u_id, u_key, sid, cid, ava_image):
75
+ if info and ava_image:
76
+ u_verify, u_id, u_key, sid_num, code = verify_login(info, u_verify, u_id, u_key, sid)
77
+ if u_verify:
78
+ if not cid:
79
+ result, had_card_id_list, code = having_card_id_list(u_id, u_key, sid_num)
80
+ if had_card_id_list:
81
+ cid = list(had_card_id_list.values())[0]
82
+ bytes_object = io.BytesIO()
83
+ ava_image.save(bytes_object, format='PNG')
84
+ img_data = bytes_object.getvalue()
85
+ result, code = card_id_set_ava(cid, u_key, img_data)
86
+
87
+ tz = timezone('Asia/Shanghai')
88
+ now = datetime.datetime.now(tz)
89
+ print("提交完成:", now)
90
+
91
+ return {verify: u_verify, uid: u_id, key: u_key, code_output: code}
92
+ else:
93
+ return {verify: u_verify, uid: u_id, key: u_key, code_output: code}
94
+ return "请先上传头像和扫码登录"
95
+
96
+
97
+ with gr.Blocks() as demo:
98
+ login_info = gr.State([])
99
+ card_id_list = gr.State({})
100
+ card_id = gr.State("")
101
+ verify = gr.State(False)
102
+ key = gr.State("")
103
+ uid = gr.State("")
104
+ with gr.Tab("bilibili NFT自定义头像"):
105
+ gr.Markdown("第一步:")
106
+ gr.Markdown("""获取一个最低R级的数字周边,很简单,多关注官方活动。""")
107
+ gr.Markdown("第二步:")
108
+ with gr.Row():
109
+ with gr.Column():
110
+ gr.Markdown(
111
+ """成功领取后,下方上传新头像,头像尽量为正方形并长宽小于1024像素,右上角画笔按钮可裁剪,
112
+ 然后等待生成二维码并扫码登录进行授权(左上传头像,右扫码登录))""")
113
+ image_ava = gr.Image(type="pil", label="上传头像")
114
+ image_qr = gr.Image(type="pil", label="客户端扫码登录")
115
+ gr.Markdown("第三步:")
116
+ with gr.Row():
117
+ gr.Markdown(
118
+ """第二步完成后,选择拥有的卡组,并等待加载出所拥有的卡,再指定底卡,务必重新选择,否则无法工作
119
+ 最后点击按钮<验证并提交头像>等待完成显示结果(成功可能需要时间审核)""")
120
+ with gr.Row():
121
+ sid_drop = gr.Dropdown(label="卡组", choices=list(sid_map.keys()), value="请点击重新选择")
122
+ card_list_drop = gr.Dropdown(label="指定已有底卡")
123
+ set_button = gr.Button("验证并提交头像")
124
+ code_output = gr.Textbox(label="消息输出", placeholder="点击提交按钮才会提交")
125
+
126
+ with gr.Accordion("警告"):
127
+ gr.Markdown("本服务基于bilibili未公开API制作,因此稳定性无法保证,敬请谅解。")
128
+
129
+ image_ava.change(qr, inputs=[image_ava], outputs=[image_qr, login_info])
130
+ sid_drop.change(back_card_id_list, inputs=[login_info, verify, uid, key, sid_drop],
131
+ outputs=[card_id_list, verify, uid, key, card_list_drop, code_output])
132
+ card_list_drop.change(name_get_card_id, inputs=[card_id_list, card_list_drop], outputs=[card_id])
133
+ set_button.click(login_up_nft, inputs=[login_info, verify, uid, key, sid_drop, card_id, image_ava],
134
+ outputs=[verify, uid, key, code_output])
135
+
136
+ demo.launch()