demo.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. # -*- coding: utf-8 -*-
  2. # @Author: wangkun
  3. # @Time: 2022/8/23
  4. import ast
  5. import base64
  6. import json
  7. import os
  8. import subprocess
  9. import requests
  10. import urllib3
  11. from main.feishu import Feishu
  12. proxies = {'http:': None, 'https': None}
  13. class Demo:
  14. @classmethod
  15. def base64_decode(cls):
  16. s = 'aHR0cDovL3Y5LXhnLXdlYi1wYy5peGlndWEuY29tL2IyZjgxNWM3MjU3NzgzMzkzOTIyZWJlZmI3MThmNDQzLzYzN2NkMDZmL3ZpZGVvL3Rvcy9jbi90b3MtY24tdi0wMDI2LzBhZDI4M2I1MjEzODQ4Y2NhMzdhOTc2MGNhYzMzMDYzL21lZGlhLXZpZGVvLWF2YzEvP2E9MTc2OCZjaD0wJmNyPTAmZHI9MCZlcj0wJmNkPTAlN0MwJTdDMCU3QzAmY3Y9MSZicj01MDAwJmJ0PTUwMDAmY3M9MCZkcz00Jm1pbWVfdHlwZT12aWRlb19tcDQmcXM9MCZyYz1ORHBtTlRSbVpUdzhPMmcyWmpvN04wQnBNMmhsT0djNlpuTm9aek16TkdRek0wQXpZVEJqTkRFelh6SXhMbUJqTGpVd1lTTXpNMk52Y2pSZmNtWmdMUzFrTGk5emN3JTNEJTNEJmw9MjAyMjExMjIyMDMwMTQwMTAyMTIxNDgwNDcwMzgxNDRCNiZidGFnPTMwMDAw'
  17. s1 = 'aHR0cDovL3Y5LXhnLXdlYi1wYy5peGlndWEuY29tLzRhNDA2MjBiNjY0OTA4ZmYzOGNmNGM0MWQ0NTM5YzlkLzYzN2M5NDUxL3ZpZGVvL3Rvcy9jbi90b3MtY24tdi0wMDI2LzgyZjY4N2E3NjRhYjQyNmM5NzI0YTEwMzc4MjM5NTA5L21lZGlhLWF1ZGlvLXVuZC1tcDRhLz9hPTE3NjgmY2g9MCZjcj0wJmRyPTAmZXI9MCZjZD0wJTdDMCU3QzAlN0MwJmN2PTEmYnI9MCZidD0wJmNzPTAmbWltZV90eXBlPXZpZGVvX21wNCZxcz0wJnJjPVFHa3phalYwTnpwbWRtaG5Nek0wWkRNelFHRWpjMkF2YjNJMGJ6RnhZQzB0WkM0dmMzTSUzRCZsPTIwMjIxMTIyMTYwOTM0MDEwMjA0MDU1MTQ1MDU0NDQ1MEEmYnRhZz0zODAwMA=='
  18. if len(s) % 3 == 1:
  19. s += '=='
  20. elif len(s) % 3 == 2:
  21. s += '='
  22. elif len(s1) % 3 == 1:
  23. s1 += '=='
  24. elif len(s1) % 3 == 2:
  25. s1 += '='
  26. base64_url = base64.b64decode(s).decode('utf8')
  27. base64_url1 = base64.b64decode(s1).decode('utf8')
  28. print(base64_url)
  29. print(base64_url1)
  30. @classmethod
  31. def download_video(cls):
  32. 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://')
  33. video_name = 'video.mp4'
  34. # 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'
  35. # video_name = 'audio.mp4'
  36. urllib3.disable_warnings()
  37. # 设置请求头信息
  38. headers = {
  39. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
  40. ' Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62'
  41. }
  42. video_content = requests.get(video_url, headers=headers, stream=True, proxies=proxies, verify=False)
  43. try:
  44. with open('./' + video_name, "wb") as f:
  45. for chunk in video_content.iter_content(chunk_size=1024*1024):
  46. if chunk:
  47. f.write(chunk)
  48. # 记录已下载视频长度,实时输出下载进度
  49. downSize = 0
  50. contentLength = int(video_content.headers['content-length'])
  51. downSize += len(chunk)
  52. print('进度:{:.2%}'.format(downSize / contentLength), end='\r')
  53. print('下载完成')
  54. except Exception as e:
  55. print(f"视频下载失败:{e}\n")
  56. @classmethod
  57. def ffmpeg(cls):
  58. video_path = '../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/video1.mp4'
  59. audio_path = '../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/audio1.mp4'
  60. out_path = '../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/video.mp4'
  61. 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
  62. print(cmd)
  63. subprocess.call(cmd, shell=True)
  64. print(os.listdir('../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/'))
  65. for file in os.listdir('../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/'):
  66. # print(file.title())
  67. if file.split('.mp4')[0] == 'video1' or file.split('.mp4')[0] == 'audio1':
  68. os.remove('../videos/陕西第二支预告片,武则天乾陵,气势磅礴,夕阳下拍到神奇的一幕/' + file)
  69. @classmethod
  70. def sheet(cls, log_type):
  71. sheet = Feishu.get_values_batch(log_type, 'xigua', 'e075e9')
  72. print(sheet)
  73. @classmethod
  74. def get_video_info(cls, gid):
  75. url = 'https://www.ixigua.com/api/mixVideo/information?'
  76. headers = {
  77. "accept-encoding": "gzip, deflate, br",
  78. "accept-language": "zh-CN,zh-Hans;q=0.9",
  79. "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
  80. "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15",
  81. "referer": "https://www.ixigua.com/7102614741050196520?logTag=0531c88ac04f38ab2c62",
  82. }
  83. params = {
  84. 'mixId': gid,
  85. 'msToken': 'IlG0wd0Pylyw9ghcYiB2YseUmTwrsrqqhXrbIcsSaTcLTJyVlbYJzk20zw3UO-CfrfC'
  86. 'NVVIOBNjIl7vfBoxnVUwO9ZyzAI3umSKsT5-pef_RRfQCJwmA',
  87. 'X-Bogus': 'DFSzswVupYTANCJOSBk0P53WxM-r',
  88. '_signature': '_02B4Z6wo0000119LvEwAAIDCuktNZ0y5wkdfS7jAALThuOR8D9yWNZ.EmWHKV0WSn6Px'
  89. 'fPsH9-BldyxVje0f49ryXgmn7Tzk-swEHNb15TiGqa6YF.cX0jW8Eds1TtJOIZyfc9s5emH7gdWN94',
  90. }
  91. cookies = {
  92. 'ixigua-a-s': '1',
  93. 'msToken': 'IlG0wd0Pylyw9ghcYiB2YseUmTwrsrqqhXrbIcsSaTcLTJyVlbYJzk20zw3UO-CfrfCNVVIOB'
  94. 'NjIl7vfBoxnVUwO9ZyzAI3umSKsT5-pef_RRfQCJwmA',
  95. 'ttwid': '1%7C_yXQeHWwLZgCsgHClOwTCdYSOt_MjdOkgnPIkpi-Sr8%7C1661241238%7Cf57d0c5ef3f1d7'
  96. '6e049fccdca1ac54887c34d1f8731c8e51a49780ff0ceab9f8',
  97. 'tt_scid': 'QZ4l8KXDG0YAEaMCSbADdcybdKbUfG4BC6S4OBv9lpRS5VyqYLX2bIR8CTeZeGHR9ee3',
  98. 'MONITOR_WEB_ID': '0a49204a-7af5-4e96-95f0-f4bafb7450ad',
  99. '__ac_nonce': '06304878000964fdad287',
  100. '__ac_signature': '_02B4Z6wo00f017Rcr3AAAIDCUVxeW1tOKEu0fKvAAI4cvoYzV-wBhq7B6D8k0no7lb'
  101. 'FlvYoinmtK6UXjRIYPXnahUlFTvmWVtb77jsMkKAXzAEsLE56m36RlvL7ky.M3Xn52r9t1IEb7IR3ke8',
  102. 'ttcid': 'e56fabf6e85d4adf9e4d91902496a0e882',
  103. '_tea_utm_cache_1300': 'undefined',
  104. 'support_avif': 'false',
  105. 'support_webp': 'false',
  106. 'xiguavideopcwebid': '7134967546256016900',
  107. 'xiguavideopcwebid.sig': 'xxRww5R1VEMJN_dQepHorEu_eAc',
  108. }
  109. urllib3.disable_warnings()
  110. response = requests.get(url=url, headers=headers, params=params, cookies=cookies, proxies=proxies, verify=False)
  111. if 'data' not in response.json() or response.json()['data'] == '':
  112. print(f'response: {response}')
  113. else:
  114. video_info = response.json()['data']['gidInformation']['packerData']['video']
  115. video_url = ''
  116. audio_url = ''
  117. video_width = ''
  118. video_height = ''
  119. # video_url
  120. if 'videoResource' not in video_info:
  121. video_url = 0
  122. audio_url = 0
  123. video_width = 0
  124. video_height = 0
  125. elif 'dash' in video_info['videoResource']:
  126. video_url = video_info['videoResource']['dash']['dynamic_video']['dynamic_video_list'][-1]['main_url']
  127. audio_url = video_info['videoResource']['dash']['dynamic_video']['dynamic_audio_list'][-1]['main_url']
  128. video_url = base64.b64decode(video_url).decode('utf8')
  129. audio_url = base64.b64decode(audio_url).decode('utf8')
  130. video_width = video_info['videoResource']['dash']['dynamic_video']['dynamic_video_list'][-1]['vwidth']
  131. video_height = video_info['videoResource']['dash']['dynamic_video']['dynamic_video_list'][-1]['vheight']
  132. elif 'normal' in video_info['videoResource']:
  133. video_list = video_info['videoResource']['normal']['video_list']
  134. if 'video_4' in video_list.keys():
  135. video_url = video_list['video_4']['main_url']
  136. audio_url = video_list['video_4']['main_url']
  137. video_url = base64.b64decode(video_url).decode('utf8')
  138. audio_url = base64.b64decode(audio_url).decode('utf8')
  139. video_width = video_list['video_4']['vwidth']
  140. video_height = video_list['video_4']['vheight']
  141. elif 'video_3' in video_list.keys():
  142. video_url = video_list['video_3']['main_url']
  143. audio_url = video_list['video_3']['main_url']
  144. video_url = base64.b64decode(video_url).decode('utf8')
  145. audio_url = base64.b64decode(audio_url).decode('utf8')
  146. video_width = video_list['video_3']['vwidth']
  147. video_height = video_list['video_3']['vheight']
  148. elif 'video_2' in video_list.keys():
  149. video_url = video_list['video_2']['main_url']
  150. audio_url = video_list['video_2']['main_url']
  151. video_url = base64.b64decode(video_url).decode('utf8')
  152. audio_url = base64.b64decode(audio_url).decode('utf8')
  153. video_width = video_list['video_2']['vwidth']
  154. video_height = video_list['video_2']['vheight']
  155. elif 'video_1' in video_list.keys():
  156. video_url = video_list['video_1']['main_url']
  157. audio_url = video_list['video_1']['main_url']
  158. video_url = base64.b64decode(video_url).decode('utf8')
  159. audio_url = base64.b64decode(audio_url).decode('utf8')
  160. video_width = video_list['video_1']['vwidth']
  161. video_height = video_list['video_1']['vheight']
  162. else:
  163. video_url = 0
  164. audio_url = 0
  165. video_width = 0
  166. video_height = 0
  167. print(f'video_url:{video_url}')
  168. print(f'audio_url:{audio_url}')
  169. print(f'video_width:{video_width}')
  170. print(f'video_height:{video_height}')
  171. if __name__ == '__main__':
  172. # Demo.base64_decode()
  173. # Demo.ffmpeg()
  174. Demo.sheet('xigua')
  175. # Demo.get_video_info('7133153239867851295')
  176. # Demo.get_signature()
  177. # Demo.get_logs()
  178. # Demo.download_video()
  179. pass