Spaces:
Running
Running
1.7
Browse files
app.py
CHANGED
@@ -1,11 +1,28 @@
|
|
1 |
import io
|
2 |
|
3 |
import gradio as gr
|
4 |
-
from PIL import Image
|
5 |
|
6 |
from login import catch_qr, get_uid_key
|
7 |
from nft import up_card
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
10 |
def qr(ava_image):
|
11 |
if ava_image is not None:
|
@@ -14,14 +31,15 @@ def qr(ava_image):
|
|
14 |
return {image_qr: None, login_info: None}
|
15 |
|
16 |
|
17 |
-
def login_up_nft(ava_image, info):
|
18 |
if info is not None:
|
19 |
result, uid, key, code = get_uid_key(info)
|
20 |
if result:
|
21 |
bytes_object = io.BytesIO()
|
22 |
ava_image.save(bytes_object, format='PNG')
|
23 |
img_data = bytes_object.getvalue()
|
24 |
-
|
|
|
25 |
return code
|
26 |
else:
|
27 |
return code
|
@@ -51,8 +69,10 @@ with gr.Blocks() as demo:
|
|
51 |
gr.Markdown("第三步:")
|
52 |
with gr.Row():
|
53 |
gr.Markdown(
|
54 |
-
"""
|
55 |
-
|
|
|
|
|
56 |
code_output = gr.Textbox(placeholder="提交结果")
|
57 |
|
58 |
with gr.Accordion("代码引用及郑重提醒"):
|
@@ -62,6 +82,6 @@ with gr.Blocks() as demo:
|
|
62 |
gr.Markdown("本软件纯属娱乐,不得用于其他用途,秋后算账别怨我!")
|
63 |
|
64 |
image_ava.change(qr, inputs=[image_ava], outputs=[image_qr, login_info])
|
65 |
-
text_button.click(login_up_nft, inputs=[image_ava, login_info], outputs=[code_output])
|
66 |
|
67 |
demo.launch()
|
|
|
1 |
import io
|
2 |
|
3 |
import gradio as gr
|
|
|
4 |
|
5 |
from login import catch_qr, get_uid_key
|
6 |
from nft import up_card
|
7 |
|
8 |
+
sid_map = {
|
9 |
+
"SHN48荣耀时刻": 1,
|
10 |
+
"无": 2,
|
11 |
+
"无2": 3,
|
12 |
+
"胶囊计划": 4,
|
13 |
+
"天官赐福": 5,
|
14 |
+
"A - AKB48TSH四周年": 6,
|
15 |
+
"B - AKB48TSH四周年": 7,
|
16 |
+
"C - AKB48TSH四周年": 8,
|
17 |
+
"D - AKB48TSH四周年": 9,
|
18 |
+
"E - AKB48TSH四周年": 10,
|
19 |
+
"F - AKB48TSH四周年": 11,
|
20 |
+
"G - AKB48TSH四周年": 12,
|
21 |
+
"H - AKB48TSH四周年": 13,
|
22 |
+
"三体动画": 14
|
23 |
+
}
|
24 |
+
card_type_choices = list(sid_map.keys())
|
25 |
+
|
26 |
|
27 |
def qr(ava_image):
|
28 |
if ava_image is not None:
|
|
|
31 |
return {image_qr: None, login_info: None}
|
32 |
|
33 |
|
34 |
+
def login_up_nft(ava_image, info, sid):
|
35 |
if info is not None:
|
36 |
result, uid, key, code = get_uid_key(info)
|
37 |
if result:
|
38 |
bytes_object = io.BytesIO()
|
39 |
ava_image.save(bytes_object, format='PNG')
|
40 |
img_data = bytes_object.getvalue()
|
41 |
+
sid_id = sid_map[sid]
|
42 |
+
result, code = up_card(uid, key, img_data, sid_id)
|
43 |
return code
|
44 |
else:
|
45 |
return code
|
|
|
69 |
gr.Markdown("第三步:")
|
70 |
with gr.Row():
|
71 |
gr.Markdown(
|
72 |
+
"""第二步完成后,选择拥有卡组(三体的不用选择),3-15s内点击按钮<验证并提交头像>等待完成显示结果(成功可能需要时间审核)""")
|
73 |
+
with gr.Row():
|
74 |
+
sid_drop = gr.Dropdown(label="卡组", choices=card_type_choices, value="三体动画")
|
75 |
+
text_button = gr.Button("验证并提交头像")
|
76 |
code_output = gr.Textbox(placeholder="提交结果")
|
77 |
|
78 |
with gr.Accordion("代码引用及郑重提醒"):
|
|
|
82 |
gr.Markdown("本软件纯属娱乐,不得用于其他用途,秋后算账别怨我!")
|
83 |
|
84 |
image_ava.change(qr, inputs=[image_ava], outputs=[image_qr, login_info])
|
85 |
+
text_button.click(login_up_nft, inputs=[image_ava, login_info, sid_drop], outputs=[code_output])
|
86 |
|
87 |
demo.launch()
|
bili.json
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
login.py
CHANGED
@@ -1,4 +1,3 @@
|
|
1 |
-
import numpy as np
|
2 |
import qrcode
|
3 |
import time, requests, urllib, hashlib
|
4 |
|
@@ -54,7 +53,7 @@ def get_uid_key(login_info):
|
|
54 |
login_data = {}
|
55 |
code = "连接超时"
|
56 |
attempt = 0
|
57 |
-
while not result and attempt <
|
58 |
try:
|
59 |
result, login_data = catch_code()
|
60 |
if result:
|
@@ -63,6 +62,6 @@ def get_uid_key(login_info):
|
|
63 |
else:
|
64 |
time.sleep(1)
|
65 |
attempt += 1
|
66 |
-
except Exception:
|
67 |
-
return result, "0", "0",
|
68 |
return result, "0", "0", code
|
|
|
|
|
1 |
import qrcode
|
2 |
import time, requests, urllib, hashlib
|
3 |
|
|
|
53 |
login_data = {}
|
54 |
code = "连接超时"
|
55 |
attempt = 0
|
56 |
+
while not result and attempt < 2:
|
57 |
try:
|
58 |
result, login_data = catch_code()
|
59 |
if result:
|
|
|
62 |
else:
|
63 |
time.sleep(1)
|
64 |
attempt += 1
|
65 |
+
except Exception as e:
|
66 |
+
return result, "0", "0", e.args[0]
|
67 |
return result, "0", "0", code
|
nft.py
CHANGED
@@ -51,12 +51,12 @@ def get_image_type(file_path):
|
|
51 |
return imghdr.what(None, data)
|
52 |
|
53 |
|
54 |
-
def get_one_card_id(UID, ACCESS_KEY):
|
55 |
url = "https://api.bilibili.com/x/vas/nftcard/cardlist"
|
56 |
params = SingableDict(
|
57 |
{
|
58 |
"access_key": ACCESS_KEY,
|
59 |
-
"act_id":
|
60 |
"appkey": "4409e2ce8ffd12b8",
|
61 |
"disable_rcmd": "0",
|
62 |
"ruid": UID,
|
@@ -70,30 +70,27 @@ def get_one_card_id(UID, ACCESS_KEY):
|
|
70 |
print(f"获取卡片信息出错,下面是 api 返回:\n{data}")
|
71 |
return
|
72 |
# print(data) # 查询已添加无需再填
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
print("=================================")
|
81 |
-
print(f"
|
82 |
print("=================================")
|
83 |
-
return
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
if card_id := j.get("card_id"):
|
89 |
-
print("=================================")
|
90 |
-
print(f"找到预约三体卡card_id: {card_id}\n这个 id 属于 {i.get('card_name')}")
|
91 |
-
print("=================================")
|
92 |
-
return card_id
|
93 |
-
else:
|
94 |
-
print() # 有值的 card_id_list 中没找到 card_id ,可能是没领三体卡吧
|
95 |
-
else:
|
96 |
-
print() # 卡片信息中没找到有值的 card_id_list ,可能是没有这张三体卡吧
|
97 |
|
98 |
|
99 |
def set_face(card_id, ACCESS_KEY, img_data):
|
@@ -128,17 +125,18 @@ def set_face(card_id, ACCESS_KEY, img_data):
|
|
128 |
return True, '设置头像成功, 请等待审核'
|
129 |
|
130 |
|
131 |
-
def up_card(uid, key, img_data):
|
132 |
UID = int(uid)
|
133 |
-
|
|
|
134 |
result = False
|
135 |
-
|
136 |
|
137 |
-
card_id = get_one_card_id(UID,
|
138 |
if not card_id:
|
139 |
-
|
140 |
# img_url = upload_image(BG_PATH)
|
141 |
# set_bg_img(img_url, card_id)
|
142 |
else:
|
143 |
-
result,
|
144 |
-
return result,
|
|
|
51 |
return imghdr.what(None, data)
|
52 |
|
53 |
|
54 |
+
def get_one_card_id(UID, ACCESS_KEY, sid):
|
55 |
url = "https://api.bilibili.com/x/vas/nftcard/cardlist"
|
56 |
params = SingableDict(
|
57 |
{
|
58 |
"access_key": ACCESS_KEY,
|
59 |
+
"act_id": sid, # 这里默认已经是三体数字藏品卡14,github下载的默认是4,也就是胶囊卡
|
60 |
"appkey": "4409e2ce8ffd12b8",
|
61 |
"disable_rcmd": "0",
|
62 |
"ruid": UID,
|
|
|
70 |
print(f"获取卡片信息出错,下面是 api 返回:\n{data}")
|
71 |
return
|
72 |
# print(data) # 查询已添加无需再填
|
73 |
+
for round in data['data']['round_list']:
|
74 |
+
for card in round['card_list']:
|
75 |
+
if card['card_type'] == 2 and card['card_id_list']:
|
76 |
+
print(card['card_id_list'][0]['card_id'])
|
77 |
+
print("=================================")
|
78 |
+
print(f"找到付费卡 card_id: {card['card_id_list'][0]['card_id']}\n这个id属于{card['card_name']}")
|
79 |
+
print("=================================")
|
80 |
+
return card['card_id_list'][0]['card_id']
|
81 |
+
print('没有付费卡片')
|
82 |
+
for i in data["data"]["pre_list"]:
|
83 |
+
if card_id_list := i.get("card_id_list"):
|
84 |
+
for j in card_id_list:
|
85 |
+
if card_id := j.get("card_id"):
|
86 |
print("=================================")
|
87 |
+
print(f"找到预约卡card_id: {card_id}\n这个 id 属于{i.get('card_name')}")
|
88 |
print("=================================")
|
89 |
+
return card_id
|
90 |
+
else:
|
91 |
+
print() # 有值的 card_id_list 中没找到 card_id ,可能是没领三体卡吧
|
92 |
+
else:
|
93 |
+
print() # 卡片信息中没找到有值的 card_id_list ,可能是没有这张三体卡吧
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
|
95 |
|
96 |
def set_face(card_id, ACCESS_KEY, img_data):
|
|
|
125 |
return True, '设置头像成功, 请等待审核'
|
126 |
|
127 |
|
128 |
+
def up_card(uid, key, img_data, sid):
|
129 |
UID = int(uid)
|
130 |
+
access_key = str(key)
|
131 |
+
sid = str(sid)
|
132 |
result = False
|
133 |
+
code = "超时"
|
134 |
|
135 |
+
card_id = get_one_card_id(UID, access_key, sid) # 根据你所取得的卡card_id进行更改
|
136 |
if not card_id:
|
137 |
+
code = "没找到 card_id ,请确认是否已经领取卡片"
|
138 |
# img_url = upload_image(BG_PATH)
|
139 |
# set_bg_img(img_url, card_id)
|
140 |
else:
|
141 |
+
result, code = set_face(card_id, access_key, img_data)
|
142 |
+
return result, code
|
test.py
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
try:
|
3 |
+
raise Exception('二维码已失效')
|
4 |
+
except Exception as e:
|
5 |
+
print(type(e.args[0]))
|
6 |
+
print(e.args[0])
|