Spaces:
Running
Running
| 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() | |