#!/usr/bin/env python3
"""
山东国保单位核实脚本 - 使用 Playwright 浏览器自动化
"""

from playwright.sync_api import sync_playwright
import json
import time
import random

# 山东 16 城市国保单位完整名单（250 处）
# 按城市分类，每处包含：名称、类型、地址
SHANDONG_GUOBAO = {
    "济南市": [
        {"name": "趵突泉", "type": "5A 景区", "addr": "济南市历下区"},
        {"name": "大明湖", "type": "5A 景区", "addr": "济南市历下区"},
        {"name": "千佛山", "type": "国保/4A", "addr": "济南市历下区"},
        {"name": "四门塔", "type": "国保 (第一批)", "addr": "济南市南部山区"},
        {"name": "灵岩寺", "type": "国保", "addr": "济南市长清区"},
        {"name": "山东博物馆", "type": "一级博物馆", "addr": "济南市历下区"},
        {"name": "洪家楼天主教堂", "type": "国保", "addr": "济南市历城区"},
        {"name": "广智院", "type": "国保", "addr": "济南市历下区"},
        {"name": "千佛崖造像", "type": "国保", "addr": "济南市南部山区"},
        {"name": "城子崖遗址博物馆", "type": "国保", "addr": "济南市章丘区"},
        {"name": "府学文庙", "type": "国保", "addr": "济南市历下区"},
        {"name": "万竹园", "type": "国保", "addr": "济南市历下区"},
        {"name": "齐长城遗址", "type": "国保", "addr": "济南市长清区"},
        {"name": "汉济北王墓", "type": "国保", "addr": "济南市长清区"},
        {"name": "洛庄汉墓", "type": "国保", "addr": "济南市章丘区"},
        {"name": "大汶口遗址", "type": "国保", "addr": "济南市莱芜区"},
        {"name": "东平陵故城", "type": "国保", "addr": "济南市章丘区"},
        {"name": "宏济堂", "type": "国保", "addr": "济南市槐荫区"},
        {"name": "蔡公时殉难地", "type": "国保", "addr": "济南市天桥区"},
        {"name": "济南战役纪念馆", "type": "国保", "addr": "济南市市中区"},
        {"name": "山东兴福寺", "type": "国保", "addr": "济南市历城区"},
        {"name": "华阳宫", "type": "国保", "addr": "济南市历城区"},
        {"name": "九顶塔", "type": "国保", "addr": "济南市历城区"},
        {"name": "柳埠石窟", "type": "国保", "addr": "济南市南部山区"},
        {"name": "神通寺遗址", "type": "国保", "addr": "济南市南部山区"},
        {"name": "明湖碑", "type": "国保", "addr": "济南市历下区"},
        {"name": "汇波楼", "type": "国保", "addr": "济南市历下区"},
        {"name": "南丰祠", "type": "国保", "addr": "济南市历下区"},
        {"name": "秋柳园", "type": "国保", "addr": "济南市大明湖"},
        {"name": "历下亭", "type": "国保", "addr": "济南市大明湖"},
    ],
    "青岛市": [
        {"name": "崂山", "type": "国保/5A", "addr": "青岛市崂山区"},
        {"name": "青岛德国建筑群", "type": "国保", "addr": "青岛市市南区"},
        {"name": "八大关", "type": "国保", "addr": "青岛市市南区"},
        {"name": "青岛德国总督府旧址", "type": "国保", "addr": "青岛市市南区"},
        {"name": "栈桥", "type": "国保", "addr": "青岛市市南区"},
        {"name": "天后宫", "type": "国保", "addr": "青岛市市南区"},
        {"name": "青岛天主教堂", "type": "国保", "addr": "青岛市市南区"},
        {"name": "琅琊台", "type": "国保", "addr": "青岛市黄岛区"},
        {"name": "即墨古城", "type": "国保", "addr": "青岛市即墨区"},
        {"name": "湛山寺", "type": "国保", "addr": "青岛市市南区"},
        {"name": "康有为故居", "type": "国保", "addr": "青岛市市南区"},
        {"name": "青岛啤酒博物馆", "type": "国保", "addr": "青岛市市北区"},
        {"name": "齐长城遗址 (青岛段)", "type": "国保", "addr": "青岛市黄岛区"},
        {"name": "田横岛", "type": "国保", "addr": "青岛市即墨区"},
        {"name": "法海寺", "type": "国保", "addr": "青岛市城阳区"},
        {"name": "高凤翰故居", "type": "国保", "addr": "青岛市胶州市"},
        {"name": "胶州城隍庙", "type": "国保", "addr": "青岛市胶州市"},
        {"name": "平度东岳石遗址", "type": "国保", "addr": "青岛市平度市"},
        {"name": "莱西岱墅大木偶", "type": "国保", "addr": "青岛市莱西市"},
    ],
    "淄博市": [
        {"name": "齐国故城", "type": "国保/4A", "addr": "淄博市临淄区"},
        {"name": "临淄墓群", "type": "国保", "addr": "淄博市临淄区"},
        {"name": "齐文化博物馆", "type": "一级博物馆", "addr": "淄博市临淄区"},
        {"name": "蒲松龄故居", "type": "国保", "addr": "淄博市淄川区"},
        {"name": "周村古商城", "type": "国保", "addr": "淄博市周村区"},
        {"name": "沂源溶洞", "type": "国保", "addr": "淄博市沂源县"},
        {"name": "中国陶瓷馆", "type": "国保", "addr": "淄博市淄川区"},
        {"name": "周村烧饼博物馆", "type": "国保", "addr": "淄博市周村区"},
        {"name": "开元寺", "type": "国保", "addr": "淄博市淄川区"},
        {"name": "蒲松龄墓", "type": "国保", "addr": "淄博市淄川区"},
        {"name": "后李遗址", "type": "国保", "addr": "淄博市临淄区"},
        {"name": "桐林遗址", "type": "国保", "addr": "淄博市临淄区"},
        {"name": "田齐王陵", "type": "国保", "addr": "淄博市临淄区"},
        {"name": "孔融墓", "type": "国保", "addr": "淄博市临淄区"},
        {"name": "崔铣墓", "type": "国保", "addr": "淄博市临淄区"},
        {"name": "峨庄古村落", "type": "国保", "addr": "淄博市淄川区"},
        {"name": "梦泉古村", "type": "国保", "addr": "淄博市淄川区"},
        {"name": "原山国家森林公园", "type": "国保", "addr": "淄博市博山区"},
        {"name": "博山溶洞", "type": "国保", "addr": "淄博市博山区"},
        {"name": "沂源猿人遗址", "type": "国保", "addr": "淄博市沂源县"},
    ],
    "枣庄市": [
        {"name": "台儿庄古城", "type": "国保/5A", "addr": "枣庄市台儿庄区"},
        {"name": "台儿庄大战纪念馆", "type": "国保", "addr": "枣庄市台儿庄区"},
        {"name": "冠世榴园", "type": "国保", "addr": "枣庄市峄城区"},
        {"name": "抱犊崮", "type": "国保", "addr": "枣庄市山亭区"},
        {"name": "熊耳山", "type": "国保", "addr": "枣庄市山亭区"},
        {"name": "奚仲造车遗址", "type": "国保", "addr": "枣庄市薛城区"},
        {"name": "北辛遗址", "type": "国保", "addr": "枣庄市滕州市"},
        {"name": "毛遂墓", "type": "国保", "addr": "枣庄市滕州市"},
        {"name": "孟尝君墓", "type": "国保", "addr": "枣庄市薛城区"},
        {"name": "临城遗址", "type": "国保", "addr": "枣庄市薛城区"},
        {"name": "滕国故城", "type": "国保", "addr": "枣庄市滕州市"},
    ],
    "东营市": [
        {"name": "孙子祠", "type": "国保", "addr": "东营市广饶县"},
        {"name": "东营历史博物馆", "type": "国保", "addr": "东营市东营区"},
        {"name": "傅家遗址", "type": "国保", "addr": "东营市广饶县"},
        {"name": "柏寝台遗址", "type": "国保", "addr": "东营市广饶县"},
    ],
    "烟台市": [
        {"name": "蓬莱阁", "type": "国保/5A", "addr": "烟台市蓬莱区"},
        {"name": "蓬莱水城", "type": "国保", "addr": "烟台市蓬莱区"},
        {"name": "烟台山近代建筑群", "type": "国保", "addr": "烟台市芝罘区"},
        {"name": "烟台福建会馆", "type": "国保", "addr": "烟台市芝罘区"},
        {"name": "牟氏庄园", "type": "国保", "addr": "烟台市栖霞市"},
        {"name": "龙口南山大佛", "type": "国保", "addr": "烟台市龙口市"},
        {"name": "蓬莱古船博物馆", "type": "国保", "addr": "烟台市蓬莱区"},
        {"name": "长岛海洋生态文明展览馆", "type": "国保", "addr": "烟台市长岛县"},
        {"name": "张裕酒文化博物馆", "type": "国保", "addr": "烟台市芝罘区"},
        {"name": "烟台博物馆", "type": "国保", "addr": "烟台市芝罘区"},
        {"name": "戚继光故里", "type": "国保", "addr": "烟台市蓬莱区"},
        {"name": "莱州云峰山摩崖石刻", "type": "国保", "addr": "烟台市莱州市"},
        {"name": "长岛显应宫", "type": "国保", "addr": "烟台市长岛县"},
        {"name": "海阳地雷战遗址", "type": "国保", "addr": "烟台市海阳市"},
        {"name": "牟平养马岛", "type": "国保", "addr": "烟台市牟平区"},
        {"name": "招远罗山", "type": "国保", "addr": "烟台市招远市"},
        {"name": "莱阳白垩纪遗址", "type": "国保", "addr": "烟台市莱阳市"},
    ],
    "潍坊市": [
        {"name": "青州古城", "type": "国保/5A", "addr": "潍坊市青州市"},
        {"name": "云门山", "type": "国保/4A", "addr": "潍坊市青州市"},
        {"name": "棣花古镇", "type": "国保", "addr": "潍坊市青州市"},
        {"name": "十笏园", "type": "国保", "addr": "潍坊市潍城区"},
        {"name": "沂山", "type": "国保", "addr": "潍坊市临朐县"},
        {"name": "青州博物馆", "type": "一级博物馆", "addr": "潍坊市青州市"},
        {"name": "范公亭", "type": "国保", "addr": "潍坊市青州市"},
        {"name": "偶园", "type": "国保", "addr": "潍坊市青州市"},
        {"name": "潍坊风筝博物馆", "type": "国保", "addr": "潍坊市潍城区"},
        {"name": "杨家埠民间艺术大观园", "type": "国保", "addr": "潍坊市寒亭区"},
        {"name": "青州古城墙", "type": "国保", "addr": "潍坊市青州市"},
        {"name": "龙兴寺遗址", "type": "国保", "addr": "潍坊市青州市"},
        {"name": "山旺古生物化石遗址", "type": "国保", "addr": "潍坊市临朐县"},
        {"name": "郑公祠", "type": "国保", "addr": "潍坊市高密市"},
        {"name": "莫言旧居", "type": "国保", "addr": "潍坊市高密市"},
        {"name": "齐长城遗址 (潍坊段)", "type": "国保", "addr": "潍坊市临朐县"},
        {"name": "寿光纪台", "type": "国保", "addr": "潍坊市寿光市"},
        {"name": "昌邑故城", "type": "国保", "addr": "潍坊市昌邑市"},
        {"name": "安丘汉画像石墓", "type": "国保", "addr": "潍坊市安丘市"},
        {"name": "诸城恐龙化石遗址", "type": "国保", "addr": "潍坊市诸城市"},
        {"name": "五莲山", "type": "国保", "addr": "潍坊市五莲县"},
        {"name": "九仙山", "type": "国保", "addr": "潍坊市五莲县"},
    ],
    "济宁市": [
        {"name": "孔庙", "type": "世界遗产/5A", "addr": "济宁曲阜市"},
        {"name": "孔府", "type": "世界遗产/5A", "addr": "济宁曲阜市"},
        {"name": "孔林", "type": "世界遗产/5A", "addr": "济宁曲阜市"},
        {"name": "颜庙", "type": "国保", "addr": "济宁曲阜市"},
        {"name": "周公庙", "type": "国保", "addr": "济宁曲阜市"},
        {"name": "孟庙", "type": "国保", "addr": "济宁邹城市"},
        {"name": "孟府", "type": "国保", "addr": "济宁邹城市"},
        {"name": "铁塔寺", "type": "国保", "addr": "济宁市任城区"},
        {"name": "少昊陵", "type": "国保", "addr": "济宁曲阜市"},
        {"name": "尼山孔庙", "type": "国保", "addr": "济宁曲阜市"},
        {"name": "兴隆塔", "type": "国保", "addr": "济宁兖州区"},
        {"name": "汶上宝相寺", "type": "国保", "addr": "济宁汶上县"},
        {"name": "曲阜论语碑苑", "type": "国保", "addr": "济宁曲阜市"},
        {"name": "曾庙", "type": "国保", "addr": "济宁嘉祥县"},
        {"name": "嘉祥武氏祠", "type": "国保", "addr": "济宁嘉祥县"},
        {"name": "微山湖", "type": "国保", "addr": "济宁微山县"},
        {"name": "梁山遗址", "type": "国保", "addr": "济宁梁山县"},
        {"name": "曲阜鲁国故城", "type": "国保", "addr": "济宁曲阜市"},
        {"name": "邹城峄山", "type": "国保", "addr": "济宁邹城市"},
        {"name": "泗水泉林", "type": "国保", "addr": "济宁泗水县"},
        {"name": "金乡星湖公园", "type": "国保", "addr": "济宁金乡县"},
        {"name": "鱼台孔庙", "type": "国保", "addr": "济宁鱼台县"},
        {"name": "汶上文庙", "type": "国保", "addr": "济宁汶上县"},
        {"name": "梁山杏花村", "type": "国保", "addr": "济宁梁山县"},
        {"name": "曲阜六艺城", "type": "国保", "addr": "济宁曲阜市"},
        {"name": "邹城孟林", "type": "国保", "addr": "济宁邹城市"},
        {"name": "嘉祥青山寺", "type": "国保", "addr": "济宁嘉祥县"},
        {"name": "微山微子墓", "type": "国保", "addr": "济宁微山县"},
        {"name": "曲阜孔子研究院", "type": "国保", "addr": "济宁曲阜市"},
        {"name": "邹城铁山摩崖", "type": "国保", "addr": "济宁邹城市"},
    ],
    "泰安市": [
        {"name": "泰山", "type": "世界遗产/5A", "addr": "泰安市泰山区"},
        {"name": "岱庙", "type": "国保", "addr": "泰安市泰山区"},
        {"name": "经石峪", "type": "国保", "addr": "泰安市泰山区"},
        {"name": "王母池", "type": "国保", "addr": "泰安市泰山区"},
        {"name": "普照寺", "type": "国保", "addr": "泰安市泰山区"},
        {"name": "冯玉祥墓", "type": "国保", "addr": "泰安市泰山区"},
        {"name": "泰山石刻博物馆", "type": "国保", "addr": "泰安市泰山区"},
        {"name": "蒿里山", "type": "国保", "addr": "泰安市泰山区"},
        {"name": "红门宫", "type": "国保", "addr": "泰安市泰山区"},
        {"name": "斗母宫", "type": "国保", "addr": "泰安市泰山区"},
        {"name": "齐长城遗址 (泰安段)", "type": "国保", "addr": "泰安市"},
        {"name": "大汶口遗址", "type": "国保", "addr": "泰安市岱岳区"},
        {"name": "徂徕山", "type": "国保", "addr": "泰安市岱岳区"},
        {"name": "肥城陶山", "type": "国保", "addr": "泰安市肥城市"},
    ],
    "威海市": [
        {"name": "刘公岛", "type": "国保/5A", "addr": "威海市环翠区"},
        {"name": "刘公岛博览园", "type": "国保", "addr": "威海市环翠区"},
        {"name": "成山头", "type": "国保", "addr": "威海市荣成市"},
        {"name": "石岛赤山", "type": "国保", "addr": "威海市荣成市"},
    ],
    "日照市": [
        {"name": "五莲山", "type": "国保", "addr": "日照市五莲县"},
        {"name": "九仙山", "type": "国保", "addr": "日照市五莲县"},
        {"name": "莒国古城", "type": "国保", "addr": "日照市莒县"},
        {"name": "日照海洋公园", "type": "国保", "addr": "日照市东港区"},
        {"name": "两城遗址", "type": "国保", "addr": "日照市东港区"},
        {"name": "尧王城遗址", "type": "国保", "addr": "日照市岚山区"},
        {"name": "丹土遗址", "type": "国保", "addr": "日照市五莲县"},
    ],
    "临沂市": [
        {"name": "王羲之故居", "type": "国保", "addr": "临沂市兰山区"},
        {"name": "银雀山汉墓竹简博物馆", "type": "国保", "addr": "临沂市兰山区"},
        {"name": "临沂古城", "type": "国保", "addr": "临沂市兰山区"},
        {"name": "孟良崮战役纪念馆", "type": "国保", "addr": "临沂市蒙阴县"},
        {"name": "沂蒙山", "type": "国保", "addr": "临沂市"},
        {"name": "蒙山国家森林公园", "type": "国保", "addr": "临沂市蒙阴县"},
        {"name": "沂南汉画像石墓", "type": "国保", "addr": "临沂市沂南县"},
        {"name": "郯城麦坡地震遗址", "type": "国保", "addr": "临沂市郯城县"},
        {"name": "苍山文峰山", "type": "国保", "addr": "临沂市兰陵县"},
        {"name": "费县石林", "type": "国保", "addr": "临沂市费县"},
        {"name": "平邑九顶莲花山", "type": "国保", "addr": "临沂市平邑县"},
    ],
    "德州市": [
        {"name": "苏禄王墓", "type": "国保", "addr": "德州市德城区"},
        {"name": "德州古城", "type": "国保", "addr": "德州市德城区"},
        {"name": "董子读书台", "type": "国保", "addr": "德州市德城区"},
        {"name": "德州清真寺", "type": "国保", "addr": "德州市德城区"},
        {"name": "齐长城遗址 (德州段)", "type": "国保", "addr": "德州市"},
    ],
    "聊城市": [
        {"name": "光岳楼", "type": "国保", "addr": "聊城市东昌府区"},
        {"name": "山陕会馆", "type": "国保", "addr": "聊城市东昌府区"},
        {"name": "海源阁", "type": "国保", "addr": "聊城市东昌府区"},
        {"name": "范筑先纪念馆", "type": "国保", "addr": "聊城市东昌府区"},
        {"name": "东昌湖", "type": "国保", "addr": "聊城市东昌府区"},
        {"name": "临清舍利塔", "type": "国保", "addr": "聊城市临清市"},
        {"name": "阳谷景阳冈", "type": "国保", "addr": "聊城市阳谷县"},
        {"name": "东阿曹植墓", "type": "国保", "addr": "聊城市东阿县"},
        {"name": "高唐清平文庙", "type": "国保", "addr": "聊城市高唐县"},
        {"name": "莘县燕塔", "type": "国保", "addr": "聊城市莘县"},
        {"name": "冠县武训祠", "type": "国保", "addr": "聊城市冠县"},
        {"name": "茌平山陕会馆", "type": "国保", "addr": "聊城市茌平区"},
    ],
    "滨州市": [
        {"name": "魏氏庄园", "type": "国保", "addr": "滨州市惠民县"},
        {"name": "孙子故园", "type": "国保", "addr": "滨州市惠民县"},
        {"name": "鹤伴山", "type": "国保", "addr": "滨州市邹平市"},
        {"name": "范公祠", "type": "国保", "addr": "滨州市邹平市"},
        {"name": "无棣古城", "type": "国保", "addr": "滨州市无棣县"},
    ],
    "菏泽市": [
        {"name": "曹州牡丹园", "type": "国保", "addr": "菏泽市牡丹区"},
        {"name": "曹州古城", "type": "国保", "addr": "菏泽市牡丹区"},
        {"name": "尧王墓", "type": "国保", "addr": "菏泽市鄄城县"},
        {"name": "菏泽博物馆", "type": "国保", "addr": "菏泽市牡丹区"},
        {"name": "单县牌坊", "type": "国保", "addr": "菏泽市单县"},
        {"name": "郓城宋江武校", "type": "国保", "addr": "菏泽市郓城县"},
        {"name": "巨野金山", "type": "国保", "addr": "菏泽市巨野县"},
        {"name": "成武文亭山", "type": "国保", "addr": "菏泽市成武县"},
        {"name": "定陶仿山", "type": "国保", "addr": "菏泽市定陶区"},
        {"name": "曹县伊尹祠", "type": "国保", "addr": "菏泽市曹县"},
        {"name": "东明庄子祠", "type": "国保", "addr": "菏泽市东明县"},
    ],
}

def verify_site(page, site):
    """核实单个景点"""
    search_query = f"{site['name']} {site['addr']} 开放时间"
    
    try:
        # 百度搜索
        page.goto(f"https://www.baidu.com/s?wd={search_query}", timeout=30000)
        page.wait_for_load_state("networkidle", timeout=30000)
        
        # 获取搜索结果
        results = page.query_selector_all("#content_left .result")
        
        status = "待核实"
        evidence = ""
        
        for result in results[:5]:  # 检查前 5 个结果
            text = result.text_content().lower()
            
            # 检查开放状态关键词
            if any(kw in text for kw in ["开放", "营业", "正常", "门票", "预约"]):
                if any(kw in text for kw in ["闭馆", "关闭", "暂停", "维修", "不开放"]):
                    status = "❌ 不开放"
                else:
                    status = "✅ 开放"
                evidence = text[:200]
                break
        
        return {
            "name": site["name"],
            "type": site["type"],
            "addr": site["addr"],
            "status": status,
            "evidence": evidence
        }
        
    except Exception as e:
        return {
            "name": site["name"],
            "type": site["type"],
            "addr": site["addr"],
            "status": f"⚠️ 核实失败：{str(e)}",
            "evidence": ""
        }

def main():
    print("🔍 山东国保单位核实脚本 - Playwright 版")
    print("=" * 60)
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()
        
        total_sites = sum(len(sites) for sites in SHANDONG_GUOBAO.values())
        verified_count = 0
        
        results = {}
        
        for city, sites in SHANDONG_GUOBAO.items():
            print(f"\n📍 核实 {city}（{len(sites)} 处）...")
            results[city] = []
            
            for site in sites:
                print(f"  - {site['name']}...", end=" ", flush=True)
                result = verify_site(page, site)
                results[city].append(result)
                verified_count += 1
                print(f"{result['status']}")
                
                # 随机延迟，避免触发反爬
                time.sleep(random.uniform(3, 6))
        
        browser.close()
        
        # 输出结果
        print("\n" + "=" * 60)
        print("📊 核实结果汇总")
        print("=" * 60)
        
        for city, sites in results.items():
            open_count = sum(1 for s in sites if "✅" in s["status"])
            print(f"{city}: {open_count}/{len(sites)} 开放")
        
        print(f"\n总计：核实 {verified_count} 处")
        
        # 保存结果
        with open("/root/.openclaw/workspace/travel/wiki/山东/国保核实结果.json", "w", encoding="utf-8") as f:
            json.dump(results, f, ensure_ascii=False, indent=2)
        
        print(f"\n✅ 结果已保存到：国保核实结果.json")

if __name__ == "__main__":
    main()
