def handle(self, *args, **options):
        uid = int(os.getenv('BILI_UID', ''))
        if not uid:
            logger.error('uid is required')
            sys.exit(1)

        access_key_id = os.getenv('ACCESS_KEY_ID', '')
        secret_access_key = os.getenv('SECRET_ACCESS_KEY', '')
        endpoint = os.getenv('OBS_ENDPOINT', '')
        bucketName = os.getenv('OBS_BUCKETNAME', '')
        if not access_key_id or not secret_access_key or not endpoint or not bucketName:
            logger.error('losing required arguments for ObsClient')
            sys.exit(1)
        # 获取OBS openeuler/meetup/下的MP4列表
        obs_client = ObsClient(access_key_id=access_key_id, secret_access_key=secret_access_key,
                               server='https://{}'.format(endpoint))
        objs = obs_client.listObjects(bucketName=bucketName)['body']['contents']
        meetup_videos = []
        for obj in objs:
            if obj['key'].startswith('openeuler/meetup/') and obj['key'].endswith('.mp4'):
                meetup_videos.append(obj['key'])
        if len(meetup_videos) == 0:
            logger.info('no meetup videos in OBS')
            return
        logger.info('meetup_videos: {}'.format(meetup_videos))
        videos = get_videos_g(uid)
        bvs = [x['bvid'] for x in videos]

        遍历meetup_videos,若obj的metadata无bvid,则下载上传B站
        for video in meetup_videos:
            metadata = obs_client.getObjectMetadata(bucketName, video)
            metadata_dict = {x: y for x, y in metadata['header']}
            topic = os.path.basename(video)[:-4]
            activity_id = int(video.split('/')[2])
            replay_url = 'https://{}.{}/{}'.format(bucketName, endpoint, video)
            Activity.objects.filter(id=activity_id).update(replay_url=replay_url)
            logger.info('meetup回放视频同步小程序,回放链接: {}'.format(replay_url))
            if 'bvid' not in metadata_dict.keys():
                # 下载视频
                logger.info('开始下载视频')
                videoFile = download_video(obs_client, bucketName, video)
                logger.info('视频已下载: {}'.format(videoFile))
                # 生成封面
                logger.info('开始生成封面')
                logger.info('topic: {}'.format(topic))
                imageFile = generate_cover(topic)
                logger.info('封面已生成: {}'.format(imageFile))
                # 上传B站
                logger.info('开始上传B站')
                bvid = upload_to_bilibili(videoFile, imageFile, topic)
                logger.info('B站上传成功,bvid: {}'.format(bvid))
                # 更新metadata
                metadata = {
                    'bvid': bvid
                }
                r = obs_client.setObjectMetadata(bucketName, video, metadata)
                if r.status < 300:
                    logger.info('更新metadata')
                else:
                    logger.error(r.errorCode, r.errorMessage)
Exemplo n.º 2
0
def set_favorite_all():
    dic = video.get_favorite_list(bvid=var_bvid.get(), verify=ver)
    temp = lb.curselection()[0]
    try:
        v_list = list(user.get_videos_g(uid=var_upid.get(), verify=ver))
    except exceptions.BilibiliException as msg:
        if msg.code == -400 or -10:
            tkinter.messagebox.showwarning(message='up主id错误!')
    else:
        if not v_list:
            tkinter.messagebox.showwarning(message='该up主未投稿!')
        else:
            is_favared = 0
            for i in range(len(v_list)):
                bvid = v_list[i]['bvid']
                if video.is_favoured(bvid=bvid, verify=ver):
                    is_favared += 1
                else:
                    try:
                        video.operate_favorite(bvid=bvid, verify=ver,
                                               add_media_ids=[dic['list'][temp]['id']])
                        update_progress(i + 1, len(v_list))
                    except exceptions.BilibiliException as msg:
                        if msg.code == -509:
                            update_progress(-1, -1, msg='请求频繁,重试中...')
                            sleep(3)
                            i -= 1
                            continue
                window.update()
                sleep(0.3)
            tkinter.messagebox.showinfo(message='收藏成功,' + str(is_favared) +
                                                '视频之前已收藏过。')
Exemplo n.º 3
0
def add_coin_all(uid):
    try:
        v_list = user.get_videos_g(uid=uid, verify=ver)
    except exceptions.BilibiliException as msg:
        if msg.code == -400 or -10:
            tkinter.messagebox.showwarning(message='up主id错误!')
    else:
        if not v_list:
            tkinter.messagebox.showwarning(message='该up主未投稿!')
        else:
            count = len(list(v_list))
            money = user.get_self_info(ver)['money']
            ans = tk.messagebox.askyesno('提示', '视频总数:' + str(count)
                                         + '       硬币总数:' + str(money)
                                         + '\n' + '要继续吗?')
            if ans is False:
                return
            else:
                coin = 0
                filled = 0
                for i in range(count):
                    bvid = list(v_list)[i]['bvid']
                    try:
                        video.add_coins(bvid=bvid, verify=ver, num=1)
                    except exceptions.BilibiliApiException as msg:
                        if msg.code == 34005:
                            filled += 1
                    else:
                        coin += 1

                    update_progress(i + 1, len(v_list))
                    window.update()

                tk.messagebox.showinfo(message='本次共投' + str(coin) + '个硬币'
                                               + '\n' + str(filled) + '之前投满')
 def handle(self, *args, **options):
     uid = int(os.getenv('BILI_UID', ''))
     if not uid:
         logger.error('uid is required')
         sys.exit(1)
     videos = get_videos_g(uid=uid)
     # 所有过审视频的bvid集合
     bvs = [x['bvid'] for x in videos]
     logger.info('所有B站过审视频的bvid: {}'.format(bvs))
     logger.info('B站过审视频数: {}'.format(len(bvs)))
     access_key_id = os.getenv('ACCESS_KEY_ID', '')
     secret_access_key = os.getenv('SECRET_ACCESS_KEY', '')
     endpoint = os.getenv('OBS_ENDPOINT', '')
     bucketName = os.getenv('OBS_BUCKETNAME', '')
     if not access_key_id or not secret_access_key or not endpoint or not bucketName:
         logger.error('losing required arguments for ObsClient')
         sys.exit(1)
     obs_client = ObsClient(access_key_id=access_key_id,
                            secret_access_key=secret_access_key,
                            server='https://{}'.format(endpoint))
     bili_mids = [
         int(x.mid) for x in Record.objects.filter(platform='bilibili',
                                                   url__isnull=True)
     ]
     logger.info('所有还未上传B站的会议的mid: {}'.format(bili_mids))
     all_bili_mids = [
         int(x.mid) for x in Record.objects.filter(platform='bilibili')
     ]
     for mid in all_bili_mids:
         obs_record = Record.objects.get(mid=mid, platform='obs')
         url = obs_record.url
         object_key = url.split('/', 3)[-1]
         # 获取对象的metadata
         metadata = obs_client.getObjectMetadata(bucketName, object_key)
         metadata_dict = {x: y for x, y in metadata['header']}
         if 'bvid' not in metadata_dict.keys():
             logger.info('meeting {}: 未上传B站,跳过'.format(mid))
         else:
             logger.info('meeting {}: bvid为{}'.format(
                 mid, metadata_dict['bvid']))
             if metadata_dict['bvid'] not in bvs:
                 logger.info('meetings: {}: 上传至B站,还未过审'.format(mid))
             else:
                 bili_url = 'https://www.bilibili.com/{}'.format(
                     metadata_dict['bvid'])
                 Record.objects.filter(
                     mid=mid, platform='bilibili').update(url=bili_url)
                 logger.info('meeting {}: B站已过审,刷新播放地址'.format(mid))
Exemplo n.º 5
0
def set_like_all(uid):
    try:
        v_list = list(user.get_videos_g(uid=uid, verify=ver))
    except exceptions.BilibiliException as msg:
        if msg.code == -400 or -10:
            tkinter.messagebox.showwarning(message='up主id错误!')
    else:
        if not v_list:
            tkinter.messagebox.showwarning(message='该up主未投稿!')
        else:
            is_liked = 0
            liked = 0
            for i in range(len(v_list)):
                bvid = v_list[i]['bvid']
                if video.is_liked(bvid=bvid, verify=ver):
                    is_liked += 1
                else:
                    video.set_like(bvid=bvid, status=True, verify=ver)
                    liked += 1

                update_progress(i + 1, len(v_list))

            tkinter.messagebox.showinfo(message='之前已点赞:' + str(is_liked)
                                                + '      本次点赞:' + str(liked))
Exemplo n.º 6
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()