douyin_video.py 5.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. from common import Oss
  12. from common.pq_utility import PQ
  13. from common.userAgent import get_random_user_agent
  14. sys.path.append(os.getcwd())
  15. from requests.adapters import HTTPAdapter
  16. from single_video.douyin.douyin_help import DouYinHelper
  17. from common.url_manage import urlManage
  18. class douyinVideo():
  19. # 获取抖音 标题+视频链接
  20. @classmethod
  21. def get_videoList(cls, vx_message, channel):
  22. try:
  23. data_link = vx_message[1]
  24. content_id = urlManage.url_manage(data_link, channel)
  25. if content_id:
  26. url = f'https://www.douyin.com/aweme/v1/web/aweme/detail/'
  27. headers = {
  28. 'Accept': 'application/json, text/plain, */*',
  29. 'Accept-Language': 'zh-CN,zh;q=0.9',
  30. 'Cache-Control': 'no-cache',
  31. 'Cookie' : DouYinHelper.get_cookie(),
  32. # '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",
  33. 'Pragma': 'no-cache',
  34. 'Referer': f'https://www.douyin.com/video/{content_id}',
  35. 'User-Agent': get_random_user_agent()
  36. }
  37. query = DouYinHelper.get_full_query(ua=headers['User-Agent'], extra_data={'aweme_id': content_id})
  38. urllib3.disable_warnings()
  39. s = requests.session()
  40. s.mount('http://', HTTPAdapter(max_retries=3))
  41. s.mount('https://', HTTPAdapter(max_retries=3))
  42. response = requests.request(method='GET', url=url, headers=headers, params=query)
  43. status_code = response.status_code
  44. if status_code != 200:
  45. return "cookie过期"
  46. body = response.content.decode()
  47. obj = json.loads(body).get('aweme_detail', {})
  48. if len(obj) == 0:
  49. return "cookie过期"
  50. if obj.get('desc'):
  51. title = obj.get('desc').split('\n')[0].strip()
  52. title = f'{title[:20]}...' if len(title) > 20 else title
  53. title = title if title else ' '
  54. else:
  55. title = ' '
  56. if obj.get('video', {}).get('bit_rate', []):
  57. video_uri = obj.get('video', {}).get('play_addr', {}).get('uri')
  58. ratio = f'{obj.get("video", {}).get("height")}p'
  59. video_url = f'https://www.iesdouyin.com/aweme/v1/play/?video_id={video_uri}&ratio={ratio}&line=0'
  60. # 随机生成视频oss_id
  61. video_id = urlManage.random_id()
  62. oss_object_key = Oss.video_url_upload_oss(video_url, video_id)
  63. status = oss_object_key.get("status")
  64. if status != 200:
  65. return "发送OSS失败"
  66. # 获取 oss 视频地址
  67. oss_object_key = oss_object_key.get("oss_object_key")
  68. piaoquantv = PQ.insert_piaoquantv(oss_object_key, title, vx_message[3])
  69. if piaoquantv == False:
  70. return '发送账号失败'
  71. return
  72. else:
  73. return "无法获取视频链接"
  74. else:
  75. return "无法获取视频id"
  76. except Exception :
  77. return "URL处理失败"
  78. if __name__ == '__main__':
  79. douyinVideo.get_videoList()