cynika commited on
Commit
4df7720
·
1 Parent(s): dba73a2
Files changed (5) hide show
  1. app.py +26 -6
  2. bili.json +0 -0
  3. login.py +3 -4
  4. nft.py +29 -31
  5. test.py +6 -0
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
- result, code = up_card(uid, key, img_data)
 
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
- """第二步完成后,3-15s内点击按钮<验证登录并提交头像>等待任务完成显示结果(成功可能需要时间审核)""")
55
- text_button = gr.Button("验证登录并提交头像")
 
 
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 < 3:
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", Exception.args[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": "14", # 这里默认已经是三体数字藏品卡14,github下载的默认是4,也就是胶囊卡
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
- with CARD_INFO_PATH.open("w", encoding="utf8") as f:
74
- json.dump(data, f, indent=4, ensure_ascii=False)
75
- print(f"已将卡片信息写入 {CARD_INFO_PATH}")
76
- for round in data['data']['round_list']:
77
- for card in round['card_list']:
78
- if card['card_type'] == 2 and card['card_id_list']:
79
- print(card['card_id_list'][0]['card_id'])
 
 
 
 
 
 
80
  print("=================================")
81
- print(f"找到三体卡 card_id: {card['card_id_list'][0]['card_id']}\n这个id属于付费R级别胶囊计划")
82
  print("=================================")
83
- return card['card_id_list'][0]['card_id']
84
- print('没有R级别胶囊计划的卡片')
85
- for i in data["data"]["pre_list"]:
86
- if card_id_list := i.get("card_id_list"):
87
- for j in card_id_list:
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
- ACCESS_KEY = str(key)
 
134
  result = False
135
- CODE = "超时"
136
 
137
- card_id = get_one_card_id(UID, ACCESS_KEY) # 根据你所取得的卡card_id进行更改
138
  if not card_id:
139
- CODE = "没找到 card_id ,请确认是否已经领取卡片"
140
  # img_url = upload_image(BG_PATH)
141
  # set_bg_img(img_url, card_id)
142
  else:
143
- result, CODE = set_face(card_id, ACCESS_KEY, img_data)
144
- return result, CODE
 
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])