NFT_avatar / app.py
cynika's picture
Update app.py
820a81f
import gradio as gr
import io
import datetime
from pytz import timezone
from login import catch_qr, get_uid_key
from nft import having_card_id_list, card_id_set_ava
sid_map = {
"SHN48荣耀时刻": 1,
"无": 2,
"无2": 3,
"胶囊计划": 4,
"天官赐福": 5,
"A - AKB48TSH四周年": 6,
"B - AKB48TSH四周年": 7,
"C - AKB48TSH四周年": 8,
"D - AKB48TSH四周年": 9,
"E - AKB48TSH四周年": 10,
"F - AKB48TSH四周年": 11,
"G - AKB48TSH四周年": 12,
"H - AKB48TSH四周年": 13,
"三体动画": 14,
"百大卡": 15
}
def qr(ava_image):
if ava_image:
qr_img, info = catch_qr(ava_image)
return {image_qr: qr_img, login_info: info}
return {image_qr: None, login_info: None}
def verify_login(info, u_verify, u_id, u_key, sid):
sid_num = sid_map[sid]
code = "请刷新页面并重新扫码登录"
if not u_verify:
result, u_id, u_key, code = get_uid_key(info)
if not result:
return False, "", "", sid_num, code
else:
u_verify = True
return u_verify, u_id, u_key, sid_num, code
def back_card_id_list(info, u_verify, u_id, u_key, sid):
if info:
u_verify, u_id, u_key, sid_num, code = verify_login(info, u_verify, u_id, u_key, sid)
if u_verify:
result, had_card_id_list, code = having_card_id_list(u_id, u_key, sid_num)
if result:
print("获取卡牌列表成功")
card_name_list = list(had_card_id_list.keys())
return {verify: u_verify, uid: u_id, key: u_key, card_id_list: had_card_id_list,
card_list_drop: gr.update(choices=card_name_list, value=card_name_list[0]), code_output: code}
else:
print("获取卡牌列表失败")
return {verify: u_verify, uid: u_id, key: u_key, card_list_drop: gr.update(choices=[]),
code_output: code}
else:
return {code_output: "请先上传头像和扫码登录"}
def name_get_card_id(card_id_list_dict, card_list_drop_name):
if card_id_list_dict and card_list_drop_name:
for card_name in card_id_list_dict.keys():
if card_name == card_list_drop_name:
cid = card_id_list_dict[card_name]
return {card_id: cid}
return {card_id: ""}
def login_up_nft(info, u_verify, u_id, u_key, sid, cid, ava_image):
if info and ava_image:
u_verify, u_id, u_key, sid_num, code = verify_login(info, u_verify, u_id, u_key, sid)
if u_verify:
if not cid:
result, had_card_id_list, code = having_card_id_list(u_id, u_key, sid_num)
if had_card_id_list:
cid = list(had_card_id_list.values())[0]
bytes_object = io.BytesIO()
ava_image.save(bytes_object, format='PNG')
img_data = bytes_object.getvalue()
result, code = card_id_set_ava(cid, u_key, img_data)
tz = timezone('Asia/Shanghai')
now = datetime.datetime.now(tz)
print("提交完成:", now)
return {verify: u_verify, uid: u_id, key: u_key, code_output: code}
else:
return {verify: u_verify, uid: u_id, key: u_key, code_output: code}
return "请先上传头像和扫码登录"
with gr.Blocks() as demo:
login_info = gr.State([])
card_id_list = gr.State({})
card_id = gr.State("")
verify = gr.State(False)
key = gr.State("")
uid = gr.State("")
with gr.Tab("bili_NFT自定义头像(已被关闭,等新接口中)"):
gr.Markdown("30秒自定义钻石头像(NFT),一站式操作仅三步,无需下载安装,代码开源免费,拿我项目收费的都是骗子")
gr.Markdown("""
使用视频教程(欢迎三连):[视频地址](https://www.bilibili.com/video/BV1t8411P7HD/)
https://www.bilibili.com/video/BV1t8411P7HD/
""")
gr.Markdown("源码:https://huggingface.co/spaces/cynika/NFT_avatar")
gr.Markdown("第一步:")
gr.Markdown("""领取三体数字藏品R级别,作为自定义NFT头像底图.
[三体数字藏品领取地址](https://www.bilibili.com/h5/mall/v2/card/collection?act_id=14&hybrid_set_header=2)""")
gr.Markdown("""https://www.bilibili.com/h5/mall/v2/card/collection?act_id=14&hybrid_set_header=2""")
gr.Markdown("第二步:")
with gr.Row():
with gr.Column():
gr.Markdown(
"""确保第一步领取三体数字藏品后,上传新头像,头像尽量为正方形并长宽小于1024像素,右上角画笔按钮可裁剪,
然后等待生成二维码并扫码登录进行授权(左上传头像,右扫码登录))""")
image_ava = gr.Image(type="pil", label="上传头像")
image_qr = gr.Image(type="pil", label="b站客户端扫码登录")
gr.Markdown("第三步:")
with gr.Row():
gr.Markdown(
"""第二步完成后,选择拥有的卡组,并等待加载出所拥有的卡,再指定底卡,不选默认随机三体卡,(指定三体卡需切换一下卡组)
最后点击按钮<验证并提交头像>等待完成显示结果(成功可能需要时间审核)""")
with gr.Row():
sid_drop = gr.Dropdown(label="卡组", choices=list(sid_map.keys()), value="三体动画")
card_list_drop = gr.Dropdown(label="指定已有底卡")
set_button = gr.Button("验证并提交头像")
code_output = gr.Textbox(label="消息输出", placeholder="点击提交按钮才会提交")
with gr.Accordion("代码引用及郑重提醒"):
gr.Markdown("https://github.com/wdvipa/custom_bilibili_nft")
gr.Markdown("https://github.com/XiaoMiku01/custom_bilibili_nft")
gr.Markdown("https://github.com/cibimo/bilibiliLogin")
gr.Markdown("本软件纯属娱乐,不得用于其他用途,秋后算账别怨我!")
image_ava.change(qr, inputs=[image_ava], outputs=[image_qr, login_info])
sid_drop.change(back_card_id_list, inputs=[login_info, verify, uid, key, sid_drop],
outputs=[card_id_list, verify, uid, key, card_list_drop, code_output])
card_list_drop.change(name_get_card_id, inputs=[card_id_list, card_list_drop], outputs=[card_id])
set_button.click(login_up_nft, inputs=[login_info, verify, uid, key, sid_drop, card_id, image_ava],
outputs=[verify, uid, key, code_output])
demo.launch()