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']}")
Example #2
0
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)
Example #3
0
 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}")
Example #4
0
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
Example #5
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')
Example #7
0
async def get_user_info(user_id):
    await set_proxy()
    data = user.get_user_info(uid=user_id)
    return data
Example #8
0
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()
Example #9
0
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"]