| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581 | # -*- coding: utf-8 -*-# @Author: wangkun# @Time: 2022/8/23import base64import osimport subprocessimport sysimport timeimport requestsimport urllib3sys.path.append(os.getcwd())from main.common import Commonfrom main.feishu import Feishufrom main.xigua_publish import Publishfrom main.get_signature import GetSignatureproxies = {"http": None, "https": None}class Follow:    # 个人主页视频翻页参数    offset = 0    # 获取用户信息(字典格式). 注意:部分 user_id 字符类型是 int / str    @classmethod    def get_user_info_from_feishu(cls, log_type):        try:            user_sheet = Feishu.get_values_batch(log_type, 'xigua', '5tlTYB')            user_dict = {}            for i in range(1, len(user_sheet)):                user_name = user_sheet[i][0]                out_id = user_sheet[i][1]                our_id = user_sheet[i][3]                if user_name is None or out_id is None or our_id is None:                    pass                else:                    user_dict[user_name] = str(out_id) + ',' + str(our_id)            return user_dict        except Exception as e:            Common.logger(log_type).error('get_user_id_from_feishu异常:{}\n', e)    # 合并音视频    @classmethod    def video_compose(cls, log_type, video_title):        try:            video_path = './videos/' + str(video_title) + '/video1.mp4'            audio_path = './videos/' + str(video_title) + '/audio1.mp4'            out_path = './videos/' + str(video_title) + '/video.mp4'            cmd = 'ffmpeg -i ' + video_path + ' -i ' + audio_path + \                  ' -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 ' + out_path            # print(cmd)            subprocess.call(cmd, shell=True)            for file in os.listdir('./videos/' + str(video_title)):                if file.split('.mp4')[0] == 'video1' or file.split('.mp4')[0] == 'audio1':                    os.remove('./videos/' + str(video_title) + '/' + file)            Common.logger(log_type).info('合成成功\n')        except Exception as e:            Common.logger(log_type).error(f'video_compose异常:{e}\n')    # 下载规则    @staticmethod    def download_rule(duration, width, height):        if int(duration) >= 60:            if int(width) >= 720 or int(height) >= 720:                return True            else:                return False        else:            return False    # 过滤词库    @classmethod    def filter_words(cls, log_type):        try:            filter_words_sheet = Feishu.get_values_batch(log_type, 'xigua', 'KGB4Hc')            filter_words_list = []            for x in filter_words_sheet:                for y in x:                    if y is None:                        pass                    else:                        filter_words_list.append(y)            return filter_words_list        except Exception as e:            Common.logger(log_type).error('filter_words异常:{}\n', e)    # 获取视频详情    @classmethod    def get_video_url(cls, log_type, gid):        # try:        url = 'https://www.ixigua.com/api/mixVideo/information?'        headers = {            "accept-encoding": "gzip, deflate",            "accept-language": "zh-CN,zh-Hans;q=0.9",            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "                          "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15",            "referer": "https://www.ixigua.com/7102614741050196520?logTag=0531c88ac04f38ab2c62",        }        params = {            'mixId': gid,            'msToken': 'IlG0wd0Pylyw9ghcYiB2YseUmTwrsrqqhXrbIcsSaTcLTJyVlbYJzk20zw3UO-CfrfC'                       'NVVIOBNjIl7vfBoxnVUwO9ZyzAI3umSKsT5-pef_RRfQCJwmA',            'X-Bogus': 'DFSzswVupYTANCJOSBk0P53WxM-r',            '_signature': '_02B4Z6wo0000119LvEwAAIDCuktNZ0y5wkdfS7jAALThuOR8D9yWNZ.EmWHKV0WSn6Px'                          'fPsH9-BldyxVje0f49ryXgmn7Tzk-swEHNb15TiGqa6YF.cX0jW8Eds1TtJOIZyfc9s5emH7gdWN94',        }        cookies = {            'ixigua-a-s': '1',            'msToken': 'IlG0wd0Pylyw9ghcYiB2YseUmTwrsrqqhXrbIcsSaTcLTJyVlbYJzk20zw3UO-CfrfCNVVIOB'                       'NjIl7vfBoxnVUwO9ZyzAI3umSKsT5-pef_RRfQCJwmA',            'ttwid': '1%7C_yXQeHWwLZgCsgHClOwTCdYSOt_MjdOkgnPIkpi-Sr8%7C1661241238%7Cf57d0c5ef3f1d7'                     '6e049fccdca1ac54887c34d1f8731c8e51a49780ff0ceab9f8',            'tt_scid': 'QZ4l8KXDG0YAEaMCSbADdcybdKbUfG4BC6S4OBv9lpRS5VyqYLX2bIR8CTeZeGHR9ee3',            'MONITOR_WEB_ID': '0a49204a-7af5-4e96-95f0-f4bafb7450ad',            '__ac_nonce': '06304878000964fdad287',            '__ac_signature': '_02B4Z6wo00f017Rcr3AAAIDCUVxeW1tOKEu0fKvAAI4cvoYzV-wBhq7B6D8k0no7lb'                              'FlvYoinmtK6UXjRIYPXnahUlFTvmWVtb77jsMkKAXzAEsLE56m36RlvL7ky.M3Xn52r9t1IEb7IR3ke8',            'ttcid': 'e56fabf6e85d4adf9e4d91902496a0e882',            '_tea_utm_cache_1300': 'undefined',            'support_avif': 'false',            'support_webp': 'false',            'xiguavideopcwebid': '7134967546256016900',            'xiguavideopcwebid.sig': 'xxRww5R1VEMJN_dQepHorEu_eAc',        }        urllib3.disable_warnings()        response = requests.get(url=url, headers=headers, params=params, cookies=cookies, proxies=proxies,                                verify=False)        if 'data' not in response.json() or response.json()['data'] == '':            Common.logger(log_type).warning('get_video_info: response: {}', response)        else:            video_info = response.json()['data']['gidInformation']['packerData']['video']            video_url = ''            audio_url = ''            video_width = ''            video_height = ''            # video_url            if 'videoResource' not in video_info:                video_url = 0                audio_url = 0                video_width = 0                video_height = 0            elif 'dash' in video_info['videoResource'] \                    and 'dynamic_video' in video_info['videoResource']['dash'] \                    and 'dynamic_video_list' in video_info['videoResource']['dash']['dynamic_video']:                video_url = video_info['videoResource']['dash']['dynamic_video']['dynamic_video_list'][-1][                    'main_url']                audio_url = video_info['videoResource']['dash']['dynamic_video']['dynamic_audio_list'][-1][                    'main_url']                # Common.logger(log_type).info(f'main_video_url:{video_url}')                # Common.logger(log_type).info(f'main_audio_url:{audio_url}\n')                if len(video_url) % 3 == 1:                    video_url += '=='                elif len(video_url) % 3 == 2:                    video_url += '='                elif len(audio_url) % 3 == 1:                    audio_url += '=='                elif len(audio_url) % 3 == 2:                    audio_url += '='                # Common.logger(log_type).info(f'%_video_url:{video_url}')                # Common.logger(log_type).info(f'%_audio_url:{audio_url}\n')                video_url = base64.b64decode(video_url).decode('utf8')                audio_url = base64.b64decode(audio_url).decode('utf8')                # Common.logger(log_type).info(f'base64_video_url:{video_url}')                # Common.logger(log_type).info(f'base64_audio_url:{audio_url}\n')                video_width = video_info['videoResource']['dash']['dynamic_video']['dynamic_video_list'][-1][                    'vwidth']                video_height = video_info['videoResource']['dash']['dynamic_video']['dynamic_video_list'][-1][                    'vheight']            elif 'dash_120fps' in video_info['videoResource'] \                    and 'dynamic_video' in video_info['videoResource']['dash_120fps'] \                    and 'dynamic_video_list' in video_info['videoResource']['dash_120fps']['dynamic_video']:                video_url = video_info['videoResource']['dash_120fps']['dynamic_video']['dynamic_video_list'][-1][                    'main_url']                audio_url = video_info['videoResource']['dash_120fps']['dynamic_video']['dynamic_audio_list'][-1][                    'main_url']                if len(video_url) % 3 == 1:                    video_url += '=='                elif len(video_url) % 3 == 2:                    video_url += '='                elif len(audio_url) % 3 == 1:                    audio_url += '=='                elif len(audio_url) % 3 == 2:                    audio_url += '='                video_url = base64.b64decode(video_url).decode('utf8')                audio_url = base64.b64decode(audio_url).decode('utf8')                video_width = video_info['videoResource']['dash_120fps']['dynamic_video'][                    'dynamic_video_list'][-1]['vwidth']                video_height = video_info['videoResource']['dash_120fps']['dynamic_video'][                    'dynamic_video_list'][-1]['vheight']            elif 'normal' in video_info['videoResource']:                video_list = video_info['videoResource']['normal']['video_list']                if 'video_4' in video_list.keys():                    # Common.logger(log_type).info('{}', video_list['video_4'])                    video_url = video_list['video_4']['main_url']                    audio_url = video_list['video_4']['main_url']                    if len(video_url) % 3 == 1:                        video_url += '=='                    elif len(video_url) % 3 == 2:                        video_url += '='                    elif len(audio_url) % 3 == 1:                        audio_url += '=='                    elif len(audio_url) % 3 == 2:                        audio_url += '='                    video_url = base64.b64decode(video_url).decode('utf8')                    audio_url = base64.b64decode(audio_url).decode('utf8')                    video_width = video_list['video_4']['vwidth']                    video_height = video_list['video_4']['vheight']                elif 'video_3' in video_list.keys():                    # Common.logger(log_type).info('{}', video_list['video_3'])                    video_url = video_list['video_3']['main_url']                    audio_url = video_list['video_3']['main_url']                    if len(video_url) % 3 == 1:                        video_url += '=='                    elif len(video_url) % 3 == 2:                        video_url += '='                    elif len(audio_url) % 3 == 1:                        audio_url += '=='                    elif len(audio_url) % 3 == 2:                        audio_url += '='                    video_url = base64.b64decode(video_url).decode('utf8')                    audio_url = base64.b64decode(audio_url).decode('utf8')                    video_width = video_list['video_3']['vwidth']                    video_height = video_list['video_3']['vheight']                elif 'video_2' in video_list.keys():                    # Common.logger(log_type).info('{}', video_list['video_2'])                    video_url = video_list['video_2']['main_url']                    audio_url = video_list['video_2']['main_url']                    if len(video_url) % 3 == 1:                        video_url += '=='                    elif len(video_url) % 3 == 2:                        video_url += '='                    elif len(audio_url) % 3 == 1:                        audio_url += '=='                    elif len(audio_url) % 3 == 2:                        audio_url += '='                    video_url = base64.b64decode(video_url).decode('utf8')                    audio_url = base64.b64decode(audio_url).decode('utf8')                    video_width = video_list['video_2']['vwidth']                    video_height = video_list['video_2']['vheight']                elif 'video_1' in video_list.keys():                    # Common.logger(log_type).info('{}', video_list['video_1'])                    video_url = video_list['video_1']['main_url']                    audio_url = video_list['video_1']['main_url']                    if len(video_url) % 3 == 1:                        video_url += '=='                    elif len(video_url) % 3 == 2:                        video_url += '='                    elif len(audio_url) % 3 == 1:                        audio_url += '=='                    elif len(audio_url) % 3 == 2:                        audio_url += '='                    video_url = base64.b64decode(video_url).decode('utf8')                    audio_url = base64.b64decode(audio_url).decode('utf8')                    video_width = video_list['video_1']['vwidth']                    video_height = video_list['video_1']['vheight']                else:                    video_url = 0                    audio_url = 0                    video_width = 0                    video_height = 0            return video_url, audio_url, video_width, video_height        # except Exception as e:        #     Common.logger(log_type).error(f'get_video_info异常:{e}\n')    @classmethod    def get_feeds(cls, log_type, outid):        # try:        url = "https://www.ixigua.com/api/videov2/author/new_video_list?"        headers = {            'sec-ch-ua': '".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"',            'accept': 'application/json, text/plain, */*',            'sec-ch-ua-mobile': '?0',            'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko)'                          ' Chrome/103.0.0.0 Safari/537.36',            'sec-ch-ua-platform': '"macOS"',            'sec-fetch-site': 'same-origin',            'sec-fetch-mode': 'cors',            'sec-fetch-dest': 'document',            'referer': 'https://www.ixigua.com/home/' + str(outid),            'accept-encoding': 'gzip, deflate',            'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',        }        params = {            'to_user_id': str(outid),            'offset': str(cls.offset),            'limit': '30',            'maxBehotTime': '0',            'order': 'new',            'isHome': '0',            'msToken': '2ZHINOMBPK-qlCKApv37xVCBKkXyPli8mTYNlTSXvr17eZ0Ea8B__Otimkx6q_'                       'enDc9m8Kgzi3Re7wpLIMSSE9dofTYdqQgvB7mHQbx_AMnVnf5lsByU',            'X-Bogus': 'DFSzswVuVvTANe2BSBBMCR/F6qyc',            '_signature': Feishu.get_values_batch(log_type, 'xigua', '6tZHhs')[1][1],        }        cookies = {            '__ac_signature': '_02B4Z6wo00f017vzS8QAAIDCwz2gwwDpX9-7009AAI4Bc4',            'MONITOR_WEB_ID': 'fd4244aa-2003-4e19-a2a4-715c19310a56',            'ixigua-a-s': '1',            'support_webp': 'true',            'support_avif': 'true',            '_tea_utm_cache_1300': 'undefined',            'ttcid': '16a3b6b9b80b4a87ae258f5f3f101e6310',            'msToken': 'G8pL2oH-9Zl1hrLZPyOMSceMaII3ejKda2o-tgO1heYrj7b_fgm9vGlvwyLOA2H8oUShZgAYfxEvIuktT'                       '7OuxBuy85N-ousFfqxuAIrfruMEFZUTYp2z',            'tt_scid': 'a0zhISPImN-dVMMdbeb1Kzhl1x4oJS5Yr81FzH6qYk3jDtj1d2E5gsywN4rwna8ib398',            'ttwid': '1%7CvorN1HQjbSgBViRkEoZYEbqP_sQVoQqaUqGcFA-bzpA%7C1661324763%7Ce040213e1107973ebb0d'                     'b64f0e77cfb027375f1fb5854bb40588d692d025af1f',        }        urllib3.disable_warnings()        response = requests.get(url=url, headers=headers, params=params,                                cookies=cookies, proxies=proxies, verify=False)        cls.offset += 30        if 'data' not in response.text or response.json()['data'] == '' or response.json()['code'] != 200:            Common.logger(log_type).info('get_follow_feeds: response:{}', response.text)        else:            feeds = response.json()['data']['videoList']            return feeds        # except Exception as e:        #     Common.logger(log_type).error(f'get_feeds异常:{e}\n')    # 下载 / 上传    @classmethod    def download_publish(cls, log_type, video_dict, our_id, env):        # try:        if video_dict['gid'] == 0 or video_dict['video_id'] == 0 or video_dict['video_url'] == 0:            Common.logger(log_type).info('无效视频\n')        elif video_dict['is_top'] is True and int(time.time()) - int(video_dict['send_time']) > 3600 * 24 * 10:            Common.logger(log_type).info(                f'置顶视频,'                f'且发布时间超过10天:{time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(video_dict["send_time"]))}\n')        elif int(time.time()) - int(video_dict['send_time']) > 3600 * 24 * 10:            Common.logger(log_type).info(                f'发布时间超过10天:{time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(video_dict["send_time"]))}\n')            cls.offset = 0            return        elif cls.download_rule(video_dict['video_duration'], video_dict['video_width'], video_dict['video_height']) is False:            Common.logger(log_type).info('不满足抓取规则\n')        elif any(word if word in video_dict['video_title'] else False for word in cls.filter_words(log_type)) is True:            Common.logger(log_type).info('标题已中过滤词:{}\n', video_dict['video_title'])        elif str(video_dict['video_id']) in [x for y in Feishu.get_values_batch(log_type, 'xigua', 'e075e9') for x in y]:            Common.logger(log_type).info('视频已下载\n')        elif str(video_dict['video_id']) in [x for y in Feishu.get_values_batch(log_type, 'xigua', '3Ul6wZ') for x in y]:            Common.logger(log_type).info('视频已下载\n')        elif str(video_dict['video_id']) in [x for y in Feishu.get_values_batch(log_type, 'xigua', 'QOWqMo') for x in y]:            Common.logger(log_type).info('视频已下载\n')        elif str(video_dict['video_id']) in [x for y in Feishu.get_values_batch(log_type, 'xigua', 'wjhpDs') for x in y]:            Common.logger(log_type).info('视频已存在\n')        else:            # 下载封面            Common.download_method(log_type=log_type, text='cover', d_name=video_dict['video_title'],                                   d_url=video_dict['cover_url'])            # 下载视频            Common.download_method(log_type=log_type, text='video', d_name=video_dict['video_title'],                                   d_url=video_dict['video_url'])            # 下载音频            Common.download_method(log_type=log_type, text='audio', d_name=video_dict['video_title'],                                   d_url=video_dict['audio_url'])            # 保存视频信息至 "./videos/{download_video_title}/info.txt"            with open("./videos/" + video_dict['video_title'] + "/" + "info.txt",                      "a", encoding="UTF-8") as f_a:                f_a.write(str(video_dict['video_id']) + "\n" +                          str(video_dict['video_title']) + "\n" +                          str(video_dict['video_duration']) + "\n" +                          str(video_dict['play_cnt']) + "\n" +                          str(video_dict['comment_cnt']) + "\n" +                          str(video_dict['like_cnt']) + "\n" +                          str(video_dict['share_cnt']) + "\n" +                          str(video_dict['video_width'])+'*'+str(video_dict['video_height']) + "\n" +                          str(video_dict['send_time']) + "\n" +                          str(video_dict['user_name']) + "\n" +                          str(video_dict['head_url']) + "\n" +                          str(video_dict['video_url']) + "\n" +                          str(video_dict['cover_url']) + "\n" +                          "xigua" + str(int(time.time())))            Common.logger("follow").info("==========视频信息已保存至info.txt==========")            # 合成音视频            cls.video_compose(log_type, video_dict['video_title'])            # 上传视频            Common.logger(log_type).info("开始上传视频:{}".format(video_dict['video_title']))            our_video_id = Publish.upload_and_publish(log_type, env, our_id)            if env == 'dev':                our_video_link = "https://testadmin.piaoquantv.com/cms/post-detail/" + str(our_video_id) + "/info"            else:                our_video_link = "https://admin.piaoquantv.com/cms/post-detail/" + str(our_video_id) + "/info"            Common.logger(log_type).info("视频上传完成:{}\n", video_dict['video_title'])            # 视频ID工作表,插入首行            Feishu.insert_columns(log_type, 'xigua', "e075e9", "ROWS", 1, 2)            # 视频ID工作表,首行写入数据            upload_time = int(time.time())            values = [[time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(upload_time)),                       "关注榜",                       video_dict['video_title'],                       str(video_dict['video_id']),                       our_video_link,                       video_dict['gid'],                       video_dict['play_cnt'],                       video_dict['comment_cnt'],                       video_dict['like_cnt'],                       video_dict['share_cnt'],                       video_dict['video_duration'],                       str(video_dict['video_width'])+'*'+str(video_dict['video_height']),                       time.strftime('%Y/%m/%d %H:%M:%S', time.localtime(video_dict['send_time'])),                       video_dict['user_name'],                       video_dict['user_id'],                       video_dict['head_url'],                       video_dict['cover_url'],                       video_dict['video_url'],                       video_dict['audio_url']]]            time.sleep(1)            Feishu.update_values(log_type, 'xigua', "e075e9", "F2:Z2", values)            Common.logger(log_type).info(f"视频已保存至云文档:{video_dict['video_title']}\n")        # except Exception as e:        #     Common.logger(log_type).error(f'download_publish异常:{e}\n')    @classmethod    def get_videos(cls, log_type, out_id, our_id, env):        feeds = cls.get_feeds(log_type, out_id)        for i in range(len(feeds)):            # video_title            if 'title' not in feeds[i]:                video_title = 0            else:                video_title = feeds[i]['title'].strip().replace('手游', '') \                    .replace('/', '').replace('\/', '').replace('\n', '')            # video_id            if 'video_id' not in feeds[i]:                video_id = 0            else:                video_id = feeds[i]['video_id']            # gid            if 'gid' not in feeds[i]:                gid = 0            else:                gid = feeds[i]['gid']            # play_cnt            if 'video_detail_info' not in feeds[i]:                play_cnt = 0            elif 'video_watch_count' not in feeds[i]['video_detail_info']:                play_cnt = 0            else:                play_cnt = feeds[i]['video_detail_info']['video_watch_count']            # comment_cnt            if 'comment_count' not in feeds[i]:                comment_cnt = 0            else:                comment_cnt = feeds[i]['comment_count']            # like_cnt            if 'digg_count' not in feeds[i]:                like_cnt = 0            else:                like_cnt = feeds[i]['digg_count']            # share_cnt            share_cnt = 0            # video_duration            if 'video_duration' not in feeds[i]:                video_duration = 0            else:                video_duration = feeds[i]['video_duration']            # send_time            if 'publish_time' not in feeds[i]:                send_time = 0            else:                send_time = feeds[i]['publish_time']            # is_top            if 'is_top' not in feeds[i]:                is_top = 0            else:                is_top = feeds[i]['is_top']            # user_name            if 'user_info' not in feeds[i]:                user_name = 0            elif 'name' not in feeds[i]['user_info']:                user_name = 0            else:                user_name = feeds[i]['user_info']['name']            # user_id            if 'user_info' not in feeds[i]:                user_id = 0            elif 'user_id' not in feeds[i]['user_info']:                user_id = 0            else:                user_id = feeds[i]['user_info']['user_id']            # head_url            if 'user_info' not in feeds[i]:                head_url = 0            elif 'avatar_url' not in feeds[i]['user_info']:                head_url = 0            else:                head_url = feeds[i]['user_info']['avatar_url']            # cover_url            if 'video_detail_info' not in feeds[i]:                cover_url = 0            elif 'detail_video_large_image' not in feeds[i]['video_detail_info']:                cover_url = 0            elif 'url' in feeds[i]['video_detail_info']['detail_video_large_image']:                cover_url = feeds[i]['video_detail_info']['detail_video_large_image']['url']            else:                cover_url = feeds[i]['video_detail_info']['detail_video_large_image']['url_list'][0]['url']            Common.logger(log_type).info(f'video_title:{video_title}')            Common.logger(log_type).info(f'video_id:{video_id}')            Common.logger(log_type).info(f'play_cnt:{play_cnt}')            Common.logger(log_type).info(f'send_time:{time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(send_time))}')            video_url_info = cls.get_video_url(log_type, gid)            video_url = video_url_info[0]            audio_url = video_url_info[1]            video_width = video_url_info[2]            video_height = video_url_info[-1]            Common.logger(log_type).info(f'audio_url:{audio_url}')            Common.logger(log_type).info(f'video_url:{video_url}')            video_dict = {'video_title': video_title,                          'video_id': video_id,                          'gid': gid,                          'play_cnt': play_cnt,                          'comment_cnt': comment_cnt,                          'like_cnt': like_cnt,                          'share_cnt': share_cnt,                          'video_width': video_width,                          'video_height': video_height,                          'video_duration': video_duration,                          'send_time': send_time,                          'is_top': is_top,                          'user_name': user_name,                          'user_id': user_id,                          'head_url': head_url,                          'cover_url': cover_url,                          'audio_url': audio_url,                          'video_url': video_url}            cls.download_publish(log_type, video_dict, our_id, env)    # 获取所有用户主页视频    @classmethod    def get_all_person_videos(cls, log_type, env):        try:            user_list = cls.get_user_info_from_feishu(log_type)            if len(user_list) == 0:                Common.logger(log_type).warning('用户ID列表为空\n')            else:                for k, v in user_list.items():                    Common.logger(log_type).info('正在获取 {} 主页视频\n', k)                    GetSignature.get_signature('follow')                    cls.get_videos(log_type, v.split(',')[0], v.split(',')[1], env)                    time.sleep(10)                    cls.offset = 0        except Exception as e:            Common.logger(log_type).error('get_all_person_videos异常:{}\n', e)if __name__ == '__main__':    Follow.get_videos('follow', '805266955183463', '6267140', 'dev')    pass
 |