# -*- coding: utf-8 -*- # @Author: wangkun # @Time: 2022/8/23 import ast import base64 import json import os import subprocess import requests import urllib3 from main.feishu import Feishu proxies = {'http:': None, 'https': None} class Demo: @classmethod def base64_decode(cls): s = 'aHR0cDovL3Y5LXhnLXdlYi1wYy5peGlndWEuY29tL2IyZjgxNWM3MjU3NzgzMzkzOTIyZWJlZmI3MThmNDQzLzYzN2NkMDZmL3ZpZGVvL3Rvcy9jbi90b3MtY24tdi0wMDI2LzBhZDI4M2I1MjEzODQ4Y2NhMzdhOTc2MGNhYzMzMDYzL21lZGlhLXZpZGVvLWF2YzEvP2E9MTc2OCZjaD0wJmNyPTAmZHI9MCZlcj0wJmNkPTAlN0MwJTdDMCU3QzAmY3Y9MSZicj01MDAwJmJ0PTUwMDAmY3M9MCZkcz00Jm1pbWVfdHlwZT12aWRlb19tcDQmcXM9MCZyYz1ORHBtTlRSbVpUdzhPMmcyWmpvN04wQnBNMmhsT0djNlpuTm9aek16TkdRek0wQXpZVEJqTkRFelh6SXhMbUJqTGpVd1lTTXpNMk52Y2pSZmNtWmdMUzFrTGk5emN3JTNEJTNEJmw9MjAyMjExMjIyMDMwMTQwMTAyMTIxNDgwNDcwMzgxNDRCNiZidGFnPTMwMDAw' s1 = 'aHR0cDovL3Y5LXhnLXdlYi1wYy5peGlndWEuY29tLzRhNDA2MjBiNjY0OTA4ZmYzOGNmNGM0MWQ0NTM5YzlkLzYzN2M5NDUxL3ZpZGVvL3Rvcy9jbi90b3MtY24tdi0wMDI2LzgyZjY4N2E3NjRhYjQyNmM5NzI0YTEwMzc4MjM5NTA5L21lZGlhLWF1ZGlvLXVuZC1tcDRhLz9hPTE3NjgmY2g9MCZjcj0wJmRyPTAmZXI9MCZjZD0wJTdDMCU3QzAlN0MwJmN2PTEmYnI9MCZidD0wJmNzPTAmbWltZV90eXBlPXZpZGVvX21wNCZxcz0wJnJjPVFHa3phalYwTnpwbWRtaG5Nek0wWkRNelFHRWpjMkF2YjNJMGJ6RnhZQzB0WkM0dmMzTSUzRCZsPTIwMjIxMTIyMTYwOTM0MDEwMjA0MDU1MTQ1MDU0NDQ1MEEmYnRhZz0zODAwMA==' if len(s) % 3 == 1: s += '==' elif len(s) % 3 == 2: s += '=' elif len(s1) % 3 == 1: s1 += '==' elif len(s1) % 3 == 2: s1 += '=' base64_url = base64.b64decode(s).decode('utf8') base64_url1 = base64.b64decode(s1).decode('utf8') print(base64_url) print(base64_url1) @classmethod def download_video(cls): video_url = 'http://v9-xg-web-pc.ixigua.com/69637e5454682779d9ba8529eeb3de3d/637dbed1/video/tos/cn/tos-cn-v-0026/e62a566034754f70a31b277040e934a1/media-video-avc1/?a=1768&ch=0&cr=0&dr=0&er=0&cd=0%7C0%7C0%7C0&cv=1&br=2974&bt=2974&cs=0&ds=4&mime_type=video_mp4&qs=0&rc=Z2lnNzw4NjU0N2c7ZWRpZUBpM2szOTo6ZjxlZzMzNGQzM0AtMDIwYV4zNTAxM140NmJfYSNyM3FocjRnaHJgLS1kLi9zcw%3D%3D&l=20221123132351010159037053022B9FD3&btag=38000'.replace('http://', 'https://') video_name = 'video.mp4' # video_url = 'http://v9-xg-web-pc.ixigua.com/08ef1be3a3b73c16f414bddcd7810362/637cc021/video/tos/cn/tos-cn-v-0026/82f687a764ab426c9724a10378239509/media-audio-und-mp4a/?a=1768&ch=0&cr=0&dr=0&er=0&cd=0%7C0%7C0%7C0&cv=1&br=0&bt=0&cs=0&mime_type=video_mp4&qs=0&rc=QGkzajV0NzpmdmhnMzM0ZDMzQGEjc2Avb3I0bzFxYC0tZC4vc3M%3D&l=20221122191629010210039035028580DD&btag=38000' # video_name = 'audio.mp4' urllib3.disable_warnings() # 设置请求头信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)' ' Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62' } video_content = requests.get(video_url, headers=headers, stream=True, proxies=proxies, verify=False) try: with open('./' + video_name, "wb") as f: for chunk in video_content.iter_content(chunk_size=1024*1024): if chunk: f.write(chunk) # 记录已下载视频长度,实时输出下载进度 downSize = 0 contentLength = int(video_content.headers['content-length']) downSize += len(chunk) print('进度:{:.2%}'.format(downSize / contentLength), end='\r') print('下载完成') except Exception as e: print(f"视频下载失败:{e}\n") @classmethod def ffmpeg(cls): video_path = '../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/video1.mp4' audio_path = '../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/audio1.mp4' out_path = '../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/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) print(os.listdir('../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/')) for file in os.listdir('../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/'): # print(file.title()) if file.split('.mp4')[0] == 'video1' or file.split('.mp4')[0] == 'audio1': os.remove('../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/' + file) @classmethod def sheet(cls, log_type): sheet = Feishu.get_values_batch(log_type, 'xigua', 'e075e9') print(sheet) @classmethod def get_video_info(cls, gid): url = 'https://www.ixigua.com/api/mixVideo/information?' headers = { "accept-encoding": "gzip, deflate, br", "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'] == '': print(f'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']: 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'] video_url = base64.b64decode(video_url).decode('utf8') audio_url = base64.b64decode(audio_url).decode('utf8') 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 'normal' in video_info['videoResource']: video_list = video_info['videoResource']['normal']['video_list'] if 'video_4' in video_list.keys(): video_url = video_list['video_4']['main_url'] audio_url = video_list['video_4']['main_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(): video_url = video_list['video_3']['main_url'] audio_url = video_list['video_3']['main_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(): video_url = video_list['video_2']['main_url'] audio_url = video_list['video_2']['main_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(): video_url = video_list['video_1']['main_url'] audio_url = video_list['video_1']['main_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 print(f'video_url:{video_url}') print(f'audio_url:{audio_url}') print(f'video_width:{video_width}') print(f'video_height:{video_height}') if __name__ == '__main__': # Demo.base64_decode() # Demo.ffmpeg() Demo.sheet('xigua') # Demo.get_video_info('7133153239867851295') # Demo.get_signature() # Demo.get_logs() # Demo.download_video() pass