# -*- coding: utf-8 -*-
import sys
import requests
import re
import os
import time
import json
from datetime import datetime
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

BASE_PATH = ""

def get_dy_video():
    url = input("\n请输入抖音视频链接(输入0退出): ")
    if url == "0":
        return 0

    print(f"\n=== 开始处理 ===")
    print(f"输入链接: {url}")

    print("\n[1/4] 正在解析视频信息...")
    v_info = get_dy_video_info(url) # 这里调用了 get_dy_video_info
    if not v_info:
        print("❗ 获取视频信息失败")
        return 1

    # ... 其他代码 ...

def get_dy_video_info(url):
    print("\n[解析步骤] 处理短链接...")
    redirect_url = get_redirect_url(url)
    if not redirect_url:
        print("❗ 短链接解析失败")
        return None
    print(f"重定向地址: {redirect_url}")

    print("\n[解析步骤] 浏览器模拟访问...")
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1")

    # 使用WebDriver Manager自动管理驱动
    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=chrome_options)
    try:
        driver.get(redirect_url)
        time.sleep(3)
        page_source = driver.page_source
    finally:
        driver.quit()

    print("\n[解析步骤] 提取数据标签...")
    soup = BeautifulSoup(page_source, 'html.parser')

    # 新版数据标签可能是 __INITIAL_STATE__
    script_tag = soup.find('script', id='RENDER_DATA') or soup.find('script', id='__INITIAL_STATE__')

    if not script_tag or not script_tag.string:
        print("页面关键标签:")
        print(soup.find('body') or "无有效内容")
        return None

    print("\n[解析步骤] 解析JSON数据...")
    try:
        decoded_data = requests.utils.unquote(script_tag.string)
        video_data = json.loads(decoded_data)
        print("✅ JSON解析成功")
    except Exception as e:
        print(f"❗ JSON解析失败: {str(e)}")
        return None

    print("\n[解析步骤] 提取视频URI...")
    try:
        # 新版数据结构路径
        uri = (
            video_data.get('aweme', {}).get('detail', {}).get('video', {})
            .get('playAddr', [{}])[0].get('src', '')
            .split('/')[-1].split('.')[0]
        )
        if not uri:
            print("❗ 未找到视频URI")
            return None
        print(f"成功提取URI: {uri}")
        return {"video": {"play_addr": {"uri": uri}}}
    except Exception as e:
        print(f"❗ 地址提取异常: {str(e)}")
        print("调试数据:", json.dumps(video_data, indent=2, ensure_ascii=False)[:500])
        return None

# ... 其他函数 ...

def main():
    global BASE_PATH
    BASE_PATH = "./file/result/file_" + str(int(round(time.time() * 1000)))

    while True:
        r = get_dy_video()
        if r == 0:
            break

if __name__ == "__main__":
    main()