douyin_video.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # -*- coding: utf-8 -*-
  2. # @Time: 2023/12/22
  3. import datetime
  4. import os
  5. import random
  6. import re
  7. import sys
  8. import requests
  9. import json
  10. import urllib3
  11. sys.path.append(os.getcwd())
  12. from requests.adapters import HTTPAdapter
  13. from single_video.douyin.douyin_help import DouYinHelper
  14. from common.url_manage import urlManage
  15. from common import Oss
  16. from common.fast_proxies import tunnel_proxies
  17. from common.pq_utility import PQ
  18. from common.userAgent import get_random_user_agent
  19. class douyinVideo():
  20. # 获取抖音 标题+视频链接
  21. @classmethod
  22. def get_videoList(cls, vx_message, channel):
  23. try:
  24. data_link = vx_message[1]
  25. content_id = urlManage.url_manage(data_link, channel)
  26. if content_id:
  27. url = f'https://www.douyin.com/aweme/v1/web/aweme/detail/'
  28. headers = {
  29. 'Accept': 'application/json, text/plain, */*',
  30. 'Accept-Language': 'zh-CN,zh;q=0.9',
  31. 'Cache-Control': 'no-cache',
  32. 'Cookie' : DouYinHelper.get_cookie(),
  33. # 'Cookie': "store-region-src=uid; my_rd=1; ttwid=1%7CG3wy_-RdLJnfG5P9zAcP54OM8_nTLZVrJxNi1lPzdmg%7C1693558867%7C5e43c47a424e939aaf7193b096e3c6f2274982ee64e9608c99c54d2a43982aca; xgplayer_user_id=946890878348; d_ticket=158a9e45d023d5d2763abecf61a04518e6d8d; store-region=cn-bj; LOGIN_STATUS=0; odin_tt=ed23740cc5cb38e204e7c327d0d6d958e7a457dfabeb47428ab7a5ab16e78575fabfed21d9437fdad813f1b9d8db696ea8f3e6238f9362e817847e77b8abc8f7; xgplayer_device_id=284135747; bd_ticket_guard_client_web_domain=2; s_v_web_id=verify_ltfsjdjh_f8a80c27_488c_bc5d_2272_5a87a335e860; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%7D; download_guide=%223%2F20240319%2F1%22; pwa2=%220%7C0%7C3%7C1%22; volume_info=%7B%22isUserMute%22%3Afalse%2C%22isMute%22%3Atrue%2C%22volume%22%3A0.6%7D; csrf_session_id=a5355d954d3c63ed1ba35faada452b4d; passport_csrf_token=5f12167a4cc688290b05c91be5f2ba19; passport_csrf_token_default=5f12167a4cc688290b05c91be5f2ba19; dy_swidth=1440; dy_sheight=900; __ac_nonce=066025d8500daa5d44e3d; __ac_signature=_02B4Z6wo00f01aLR-wgAAIDATPQ.9swP4SWi8f-AAA63EEkqBfyCRzRlKwf457Oplifzvc8LeBEyCHi3yjOmR0tohtuWvPjmtYOuBDQV3YXAH5C-sinCh0dgFKXKGoyYGzIqrNuB0StUaT1q6d; IsDouyinActive=true; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1440%2C%5C%22screen_height%5C%22%3A900%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A2%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A1.45%2C%5C%22effective_type%5C%22%3A%5C%223g%5C%22%2C%5C%22round_trip_time%5C%22%3A700%7D%22; home_can_add_dy_2_desktop=%221%22; strategyABtestKey=%221711431048.679%22; msToken=eZb-wuCyADj21FuipDmMdblWSXIt5zQyroUBKX5RywkTI5TNlaPyybd1mRKzpkCJnhnQFo2fjgJhm5SQfqnW8f3l4g5WD7rf1gRl9sYNetYWjMVTSYW91Q==; msToken=t-hmDzdhaekbRzeibSh4ERK4_8XXpmBPa-9dnZY1G8k1Kq_EXNgcdjle5GsDmAXVrvERDWXuHS-PAcBx2ym_BKIytckgVjKvGGdmW0PiXgv0aYuvhLdOGg==; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCSjA4OEszQm5HWFdpVUtjQytmRGtqYTFucXNmamtYR3BWOS9jZnRqZDNGSUFkZ1JRaU5iK1dyZEFmbG44YkZVbFViampoL3phdHBFQW9RcUN1MTA3UUk9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoxfQ%3D%3D; tt_scid=ktKrGYpEyDwBpy7BqOuPB7Mtu0fa-nZ-HNv3M4-1VnPWTIVDl0JC4dcv1aZZTNHzb994",
  34. 'Pragma': 'no-cache',
  35. 'Referer': f'https://www.douyin.com/video/{content_id}',
  36. 'User-Agent': get_random_user_agent()
  37. }
  38. query = DouYinHelper.get_full_query(ua=headers['User-Agent'], extra_data={'aweme_id': content_id})
  39. urllib3.disable_warnings()
  40. s = requests.session()
  41. s.mount('http://', HTTPAdapter(max_retries=3))
  42. s.mount('https://', HTTPAdapter(max_retries=3))
  43. response = requests.request(method='GET', url=url, headers=headers, params=query, proxies=tunnel_proxies())
  44. status_code = response.status_code
  45. if status_code != 200:
  46. return "cookie过期"
  47. body = response.content.decode()
  48. obj = json.loads(body).get('aweme_detail', {})
  49. if len(obj) == 0:
  50. return "cookie过期"
  51. if obj.get('desc'):
  52. title = obj.get('desc').split('\n')[0].strip()
  53. title = f'{title[:20]}...' if len(title) > 20 else title
  54. title = title if title else ' '
  55. else:
  56. title = ' '
  57. if obj.get('video', {}).get('bit_rate', []):
  58. video_uri = obj.get('video', {}).get('play_addr', {}).get('uri')
  59. ratio = f'{obj.get("video", {}).get("height")}p'
  60. video_url = f'https://www.iesdouyin.com/aweme/v1/play/?video_id={video_uri}&ratio={ratio}&line=0'
  61. # 随机生成视频oss_id
  62. video_id = urlManage.random_id()
  63. oss_object_key = Oss.video_url_upload_oss(video_url, video_id)
  64. status = oss_object_key.get("status")
  65. if status != 200:
  66. return "发送OSS失败"
  67. # 获取 oss 视频地址
  68. oss_object_key = oss_object_key.get("oss_object_key")
  69. piaoquantv = PQ.insert_piaoquantv(oss_object_key, title, vx_message[3])
  70. if piaoquantv == False:
  71. return '发送账号失败'
  72. return
  73. else:
  74. return "无法获取视频链接"
  75. else:
  76. return "无法获取视频id"
  77. except Exception :
  78. return "URL处理失败"
  79. if __name__ == '__main__':
  80. douyinVideo.get_videoList()