#!/usr/bin/env python3
"""修复昌图县公示公告中带省略号的截断标题，从详情页获取完整标题"""
import os
import re
import sys
import sqlite3
import urllib.request
import time

DB_PATH = os.getenv("SEARCH_DB", "/root/search.db")
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}

conn = sqlite3.connect(DB_PATH)
c = conn.cursor()

# Find all entries with truncated titles (containing ...)
c.execute("SELECT id, page_url, title FROM gov_raw WHERE site_name='changtu.gov.cn-公示公告' AND title LIKE '%...%'")
rows = c.fetchall()
print(f"找到 {len(rows)} 条带省略号的截断标题")

fixed = 0
errors = 0
for idx, (row_id, url, old_title) in enumerate(rows):
    try:
        req = urllib.request.Request(url, headers=HEADERS)
        resp = urllib.request.urlopen(req, timeout=30)
        html = resp.read().decode("utf-8")
    except Exception as e:
        print(f"  [{idx+1}/{len(rows)}] 请求失败: {url[-50:]}, {e}")
        errors += 1
        continue

    full_title = ""
    meta_t = re.search(r'<meta name="ArticleTitle" content="([^"]+)"', html)
    if meta_t:
        full_title = meta_t.group(1).strip()
    if not full_title:
        div_t = re.search(r'<div class="article_title">([^<]+)</div>', html)
        if div_t:
            full_title = div_t.group(1).strip()
    if not full_title:
        print(f"  [{idx+1}/{len(rows)}] 未找到完整标题: {url[-50:]}")
        errors += 1
        continue

    if full_title == old_title:
        print(f"  [{idx+1}/{len(rows)}] 相同: {old_title[:40]}...")
        continue

    c.execute("UPDATE gov_raw SET title=?, summary=? WHERE id=?",
              (full_title, full_title, row_id))
    print(f"  [{idx+1}/{len(rows)}] ✓ {old_title[:40]}... → {full_title[:50]}...")
    fixed += 1

    # Commit every 10 to avoid losing progress
    if fixed % 10 == 0:
        conn.commit()
        time.sleep(0.5)

conn.commit()
conn.close()
print(f"\n[完成] 修复 {fixed} 条, 失败 {errors}")
