#!/usr/bin/env python3
"""获取hyundai_buzz_topics的platform图标，下载到本地"""
import json, os, sys, urllib.request, re
from urllib.parse import urlparse

ICON_DIR = "/data/news/images/icon/"

def get_favicon_url(source_url):
    """从source_url获取网站favicon地址"""
    if not source_url:
        return None
    try:
        parsed = urlparse(source_url)
        if parsed.netloc:
            domain = f"{parsed.scheme}://{parsed.netloc}"
            return f"{domain}/favicon.ico"
    except:
        pass
    return None

# 常见平台域名映射
PLATFORM_DOMAINS = {
    "新浪财经": "https://cj.sina.com.cn",
    "新浪": "https://www.sina.com.cn",
    "今日头条": "https://www.toutiao.com",
    "起亚中国官网": "https://www.kia.cn",
    "捷尼赛思中国官网": "https://www.genesis.com.cn",
    "现代全球官网": "https://www.hyundai.com",
    "起亚全球官网": "https://www.kia.com",
    "汽车之家": "https://www.autohome.com.cn",
    "36氪": "https://www.36kr.com",
    "澎湃新闻": "https://www.thepaper.cn",
    "腾讯新闻": "https://news.qq.com",
    "新华网": "https://www.news.cn",
    "新华社": "https://www.xinhuanet.com",
    "北京日报": "https://www.bjd.com.cn",
    "第一财经": "https://www.yicai.com",
    "界面新闻": "https://www.jiemian.com",
}

def download_icon(icon_url, save_path):
    """下载图标到本地"""
    try:
        req = urllib.request.Request(icon_url, headers={
            'User-Agent': 'Mozilla/5.0',
            'Accept': 'image/avif,image/webp,image/apng,image/*,*/*;q=0.8'
        })
        resp = urllib.request.urlopen(req, timeout=10)
        data = resp.read()
        if len(data) > 50:  # 有效图标至少50字节
            with open(save_path, 'wb') as f:
                f.write(data)
            return True
    except:
        pass
    return False

def process_item(item, mmdd, processed_platforms):
    """处理单条item，获取platform图标"""
    platform = item.get('platform', '')
    if not platform:
        return

    # 同一个platform只处理一次
    if platform in processed_platforms:
        item['icon'] = f"/images/icon/{platform}.ico"
        return
    processed_platforms.add(platform)

    icon_path = os.path.join(ICON_DIR, f"{platform}.ico")

    if os.path.exists(icon_path):
        item['icon'] = f"/images/icon/{platform}.ico"
        print(f"  ✅ {platform}.ico 已存在")
        return

    # 1. 从source_url提取域名获取favicon
    source_url = item.get('source_url', '')
    if source_url:
        favicon_url = get_favicon_url(source_url)
        if favicon_url:
            print(f"  ⬇ {platform}.ico <- {favicon_url}")
            if download_icon(favicon_url, icon_path):
                item['icon'] = f"/images/icon/{platform}.ico"
                print(f"    ✅ 下载成功")
                return

    # 2. 从平台名域名映射获取
    if platform in PLATFORM_DOMAINS:
        favicon_url = PLATFORM_DOMAINS[platform] + "/favicon.ico"
        print(f"  ⬇ {platform}.ico <- {favicon_url}")
        if download_icon(favicon_url, icon_path):
            item['icon'] = f"/images/icon/{platform}.ico"
            print(f"    ✅ 下载成功")
            return

    item['icon'] = ""
    print(f"    ❌ 无法获取 {platform}.ico")

    item['icon'] = ""
    print(f"    ❌ 无法获取 {platform}.ico")

def main():
    import argparse
    parser = argparse.ArgumentParser(description="获取hyundai_buzz_topics的platform图标")
    parser.add_argument("input", help="JSON文件路径")
    args = parser.parse_args()

    if not os.path.exists(args.input):
        print(f"❌ 文件不存在: {args.input}")
        sys.exit(1)

    os.makedirs(ICON_DIR, exist_ok=True)

    with open(args.input, 'r', encoding='utf-8') as f:
        data = json.load(f)

    sections = ['hyundai_buzz_topics_domestic', 'hyundai_buzz_topics_international']
    processed = set()
    total = 0

    for section in sections:
        if isinstance(data, dict):
            items = data.get(section, [])
        elif isinstance(data, list):
            items = []
            for item in data:
                if item.get('name') == section:
                    items = item.get('list', [])
                    break
        else:
            items = []

        print(f"\n{section}: {len(items)} 条")
        for item in items:
            process_item(item, '', processed)
            total += 1

    with open(args.input, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

    print(f"\n✅ 处理完成，已保存到 {args.input}")

if __name__ == '__main__':
    main()
