def add_up(mid): logger.info(f'添加up主') try: info = user.get_user_info(uid=int(mid)) except bilibili_api.exceptions.BilibiliException: logger.warning('up主不存在') print('该up主不存在') return cursor = conn.cursor() try: cursor.execute( "CREATE TABLE up (mid INTEGER PRIMARY KEY, name TEXT, face TEXT, sign TEXT)" ) except sqlite3.OperationalError: pass try: cursor.execute("INSERT INTO up VALUES (?, ?, ?, ?)", ( mid, clean_path(info['name']), info['face'], info['sign'], )) conn.commit() except sqlite3.IntegrityError: logger.warning('up主已经在跟踪列表') print('up主已经在跟踪中...' '\n请勿重复添加!') return print(f"添加成功:{info['name']}")
async def on_user_enter(msg): uid = msg['data']['data']['uid'] # UID uname = msg['data']['data']['uname'] # 用户名 medal_level = msg['data']['data']['fans_medal']['medal_level'] # 粉丝牌等级 medal_name = msg['data']['data']['fans_medal']['medal_name'] # 粉丝牌名字 is_lighted = msg['data']['data']['fans_medal']['is_lighted'] == 1 # 粉丝牌是否为点亮状态 guard_level = msg['data']['data']['fans_medal']['guard_level'] # 粉丝牌的大航海等级(3:舰长,... ) anchor_roomid = msg['data']['data']['fans_medal']['anchor_roomid'] # 粉丝牌所属房间号 # 获取进入用户的关注信息 user_relation = user.get_relation_info(uid=uid, verify=verify) following = user_relation['following'] # 关注数 follower = user_relation['follower'] # 粉丝数 if uid not in welcomed_list: log.info(colored("【用户进入】" + uname, 'white')) # 粉丝数大于10000 或 持有当前房间粉丝牌大于5级 if follower >= 10000 or (anchor_roomid == room_id and medal_level >= 5): user_info = user.get_user_info(uid=uid, verify=verify) sex = user_info['sex'] # '男', '女', '保密' level = user_info['level'] # B站等级 ds.welcome_enter(uname, sex) # 添加至list以避免重复欢迎 if config.getboolean('DANMAKU', 'ONLY_WELCOME_ONCE'): welcomed_list.append(uid)
def get_level_data(self, uid: int, log=False): try: info = user.get_user_info(uid) level = info['level'] except user.exceptions.BilibiliException: level = None self.info[uid] = level print(f"Fetched uid: {uid}; level: {level}")
def get_room_id() -> int: try: uid = user.get_self_info(verify=settings.verify)["mid"] user_info = user.get_user_info(uid=uid, verify=settings.verify) live_room = user_info["live_room"] if live_room["roomStatus"] == 1: return live_room["roomid"] except Exception: pass return 0
def getqualifieduser(basicinfo, uid_range): folder_path = basicinfo['folder_path'] verify = basicinfo['verify'] now = datetime.datetime.now() delta = datetime.timedelta(days=366) year_before = now - delta year_before = time.mktime(year_before.timetuple()) f_all = open('%s\\alluser.csv' % folder_path, 'a', encoding='GB18030', newline="") alluser_writer = csv.writer(f_all) f_official = open('%s\\officialuser.csv' % folder_path, 'a', encoding='GB18030', newline="") officialuser_writer = csv.writer(f_official) # csv_writer.writerow(["uid", "用户名", "lv", "role-type", "粉丝数"]) for uid in uid_range: print(uid) o = user.get_user_info(uid=uid) if o is None or o == []: print('None') continue role_type = o['official']['role'] role_title = o['official']['title'] nickname = o["name"] lv = o["level"] vip_type = o["vip"]["type"] alluser_writer.writerow([uid, nickname, lv, vip_type, role_type, role_title]) if role_type != 0: v = user.get_videos(uid=uid, limit=1, verify=verify) if v is None or v == []: print('None') continue if v[0]["created"] < year_before: continue officialuser_writer.writerow([uid, nickname, lv, vip_type, role_type, role_title]) f_all.close() f_official.close()
from bilibili_api import user import os import requests try: os.mkdirs('profile_pics') except: pass uid_file = open('UID.txt', 'r') while True: uid = uid_file.readline().rstrip() if not uid: break url = user.get_user_info(uid)['face'] pic = requests.get(url) filename = f"{uid}.jpg" pic_file = open(f'profile_pics/{filename}', 'wb') pic_file.write(pic.content) pic_file.close() print(f'Downloaded {filename}') print('All done :D')
async def get_user_info(user_id): await set_proxy() data = user.get_user_info(uid=user_id) return data
def up_confirm(): global lb try: up_info = user.get_user_info(uid=var_upid.get(), verify=ver) except exceptions.BilibiliException as msg: if msg.code == -400 or -10: tkinter.messagebox.showwarning(message='up主id错误!') else: info_window = tk.Toplevel() info_window.title('up主详情') info_window.geometry('1000x800') render_face = get_pic(up_info['face'], 200, 200) img_display = tk.Label(info_window, image=render_face) img_display.place(x=50, y=50) name_label = tk.Label(info_window, text=up_info['name'], font=("微软雅黑", 14, "bold"), height=1) name_label.place(x=300, y=50) sign_label = tk.Label(info_window, text="签名: " + up_info['sign'], font=("微软雅黑", 12), height=3) sign_label.place(x=300, y=100) label_temp = tk.Label(info_window, text="投稿视频信息: ", font=("微软雅黑", 20, "bold"), height=1) label_temp.place(x=50, y=275) v_list_g = user.get_videos_g(uid=var_upid.get(), verify=ver) if not v_list_g: label_temp = tk.Label(info_window, text="该up尚未投稿哦~ ", font=("微软雅黑", 14), height=1) label_temp.place(x=350, y=450) else: lb = tk.Listbox(info_window, width=40, height=20) v_list = list(v_list_g) # todo: 可以迭代器 for i in range(len(v_list)): lb.insert('end', str(i) + '.' + v_list[i]['title']) def open_url(event): temp = lb.curselection()[0] bv = v_list[temp]['bvid'] url = 'https://www.bilibili.com/video/' + bv webbrowser.open(url, new=0) title = tk.Label(info_window, text='', cursor='hand2', font=("微软雅黑", 13, "bold"), height=2) title.place(x=320, y=180) title.bind("<Button-1>", open_url) title.bind("<Enter>", lambda event: title.config(underline=True)) title.bind("<Leave>", lambda event: title.config(underline=False)) def video_info(self): i = lb.curselection()[0] render_sel_video = get_pic('http:' + v_list[i]['pic'], 500, 300) img_sel_display = tk.Label(info_window, image=render_sel_video) img_sel_display.place(x=350, y=250) describe = scrolledtext.ScrolledText(info_window, font=("微软雅黑", 10), width=70, height=9) describe.config(state=tk.NORMAL) describe.insert(tk.INSERT, v_list[i]['description']) describe.config(state=tk.DISABLED) describe.place(x=350, y=570) title.config(text=v_list[i]['title'] + ' <-点击进入网页查看...') info_window.mainloop() lb.place(x=20, y=350) lb.bind(sequence='<<ListboxSelect>>', func=video_info) info_window.mainloop()
db = MySQLdb.connect("localhost", "root", "20001101", "bilibiliuser", charset='utf8') cursor = db.cursor() for i in range(31203, 1000000): try: time.sleep(0.5) print(i) userInfo = user.get_relation_info(i) if userInfo['follower'] >= 100000: uMid = str(userInfo['mid']) uName = str(user.get_user_info(i)['name']) uFans = int(userInfo['follower']) try: sql = """INSERT INTO biliUser(Uid,Uname, Ufans) VALUES ('{}', '{}', {})""".format( uMid, uName, uFans) cursor.execute(sql) db.commit() print("yes") except: db.rollback() print("no") except: print("Requests error") i -= 1 time.sleep(5) continue
def name(self) -> str: info = user.get_user_info(self.uid) return info["name"]