#!/usr/bin/env python3
"""重抓 jxyy 单条详情 (视频公告) + 更新 DB"""
import json, re, time, sqlite3, sys
from urllib.parse import urljoin
sys.path.insert(0, '/root/gov_crawler')
from crawl_jxyy_tzgg import clean_html, BASE

URL = 'http://www.jxyy.gov.cn/jxyy/tzgg/202509/f3824deafafb4d41b561c96408253b3b.shtml'

def main():
    from playwright.sync_api import sync_playwright
    from playwright_stealth import Stealth
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True, args=['--disable-blink-features=AutomationControlled','--no-sandbox','--disable-dev-shm-usage'])
        ctx = browser.new_context(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/122.0.0.0 Safari/537.36', viewport={'width':1366,'height':900}, locale='zh-CN', timezone_id='Asia/Shanghai')
        page = ctx.new_page()
        Stealth().apply_stealth_sync(page)
        page.goto(URL, timeout=60000, wait_until='domcontentloaded')
        for i in range(10):
            time.sleep(3)
            t = page.title() or ''
            if '请稍候' not in t and 'NWAF' not in t and t.strip():
                break
        html = page.content()
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(html, 'html.parser')
        def meta(name):
            m = soup.find('meta', attrs={'name': name})
            return (m.get('content') or '').strip() if m else ''
        title = meta('ArticleTitle')
        pub = meta('PubDate')[:10]
        zoom = soup.find('div', id='zoomcon')
        body = ''
        atts = []
        if zoom:
            ucap = zoom.find('ucapcontent') or zoom
            for a in ucap.find_all('a', href=True):
                h = a['href'].lower()
                if re.search(r'\.(pdf|doc|docx|xls|xlsx|zip|rar|caj|wps|mp4|avi|mov|wmv|jpg|jpeg|png|gif)$', h):
                    t2 = a.get_text(strip=True) or '附件'
                    fu = h if h.startswith('http') else urljoin(URL, h)
                    atts.append({'fileName': t2, 'fileUrl': fu})
                    a.decompose()
            body = clean_html(str(ucap), URL)
            if atts:
                body = (body + '\n' + ''.join(f'<p><a href="{a["fileUrl"]}">{a["fileName"]}</a></p>' for a in atts)).strip()
        print('title:', title)
        print('pub:', pub)
        print('content len:', len(body))
        print('content:', body[:500])
        plain = re.sub(r'<[^>]+>', ' ', body)
        plain = re.sub(r'\s+', ' ', plain).strip()
        from datetime import datetime
        dr = 0
        dm = re.search(r'(\d{4})-(\d{2})-(\d{2})', pub)
        if dm:
            dr = int(datetime(int(dm.group(1)), int(dm.group(2)), int(dm.group(3))).timestamp())
        db = sqlite3.connect('/root/search.db')
        db.execute("PRAGMA busy_timeout=300000")
        db.execute("DELETE FROM gov_raw WHERE page_url = ?", (URL,))
        db.execute("INSERT INTO gov_raw (title, page_url, content, publish_date, site_name, source_url, status, attachments, script_name, summary, date_rank, has_table) VALUES (?,?,?,?,?,?,'synced',?,'crawl_jxyy_tzgg.py',?,?,?)",
                   (title, URL, body, pub, 'jxyy_tzgg', URL, json.dumps(atts, ensure_ascii=False) if atts else '', plain[:200], dr, 1 if '<table' in body else 0))
        db.commit()
        db.close()
        print('DB updated')
        browser.close()

main()
