Files
domainCheck/update_update_thread.py
2026-05-06 16:30:59 +08:00

290 lines
19 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 读取文件内容
with open('G:\PyCode\domainScanDemo\app\ui\domain_filter.py', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 找到UpdateThread类的开始和结束行
start_line = -1
end_line = -1
for i, line in enumerate(lines):
if 'class UpdateThread(QThread):' in line:
start_line = i
elif start_line != -1 and 'class QueryThread(QThread):' in line:
end_line = i
break
if start_line != -1 and end_line != -1:
# 构建新的UpdateThread类
new_update_thread = [
'class UpdateThread(QThread):\n',
' """\n',
' 批量更新线程\n',
' """\n',
' update_finished = Signal(int, dict)\n',
' \n',
' def __init__(self, selected_domains, update_values):\n',
' super().__init__()\n',
' self.selected_domains = selected_domains\n',
' self.update_values = update_values\n',
' \n',
' def run(self):\n',
' """\n',
' 执行批量更新\n',
' """\n',
' # 转换状态值的映射\n',
' status_mappings = {\n',
' \'复核状态\': {\n',
' \'无需复核\': 0,\n',
' \'待人工复核\': 1,\n',
' \'人工通过\': 2,\n',
' \'人工拒绝\': 3\n',
' },\n',
' \'备案历史\': {\n',
' \'待检测\': 1,\n',
' \'有备案记录\': 2,\n',
' \'没有备案记录\': 3\n',
' },\n',
' \'备案年份\': {\n',
' \'2026\': 2026,\n',
' \'2025\': 2025,\n',
' \'2024\': 2024,\n',
' \'2023\': 2023,\n',
' \'2022\': 2022,\n',
' \'2021\': 2021,\n',
' \'2020\': 2020\n',
' },\n',
' \'域名快照年份\': {\n',
' \'2026,2025,2024\': \'2026,2025,2024\',\n',
' \'2026\': \'2026\',\n',
' \'2025\': \'2025\',\n',
' \'2024\': \'2024\',\n',
' \'2023\': \'2023\',\n',
' \'2022\': \'2022\',\n',
' \'2021\': \'2021\',\n',
' \'2020\': \'2020\'\n',
' },\n',
' \'单位性质\': {\n',
' \'企业\': \'企业\',\n',
' \'个人\': \'个人\'\n',
' },\n',
' \'百度历史收录状态\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'百度site收录状态\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'title是否简体中文\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'360 site收录状态\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'Google site收录状态\': {\n',
' \'\': True,\n',
' \'\': False\n',
' },\n',
' \'快照历史友链数量是否大于10\': {\n',
' \'\': True,\n',
' \'\': False\n',
' }\n',
' }\n',
' \n',
' updated_count = 0\n',
' update_data = {}\n',
' \n',
' try:\n',
' db = Database()\n',
' # 获取一个数据库连接,在整个批量更新过程中使用\n',
' conn, cur = db.connect()\n',
' if not conn or not cur:\n',
' logger.error("获取数据库连接失败")\n',
' self.update_finished.emit(0, {})\n',
' return\n',
' \n',
' try:\n',
' for domain in self.selected_domains:\n',
' # 获取域名ID\n',
' domain_info = db.get_domain_by_name(domain)\n',
' if domain_info:\n',
' try:\n',
' domain_update_data = {}\n',
' \n',
' # 1. 复核状态\n',
' review_status_value = self.update_values[\'review_status\']\n',
' if review_status_value != \'不更新\':\n',
' status_value = status_mappings[\'复核状态\'][review_status_value]\n',
' cur.execute("UPDATE domains SET review_status = %s WHERE id = %s", (status_value, domain_info[\'id\']))\n',
' domain_update_data[\'review_status\'] = review_status_value\n',
' \n',
' # 2. 域名过期时间\n',
' expire_date_value = self.update_values[\'expire_date\']\n',
' if expire_date_value and expire_date_value != \'不更新\':\n',
' if expire_date_value == \'当前时间\':\n',
' cur.execute("UPDATE domains SET expire_date = CURRENT_TIMESTAMP WHERE id = %s", (domain_info[\'id\'],))\n',
' import datetime\n',
' domain_update_data[\'expire_date\'] = datetime.datetime.now().strftime(\'%Y-%m-%d %H:%M:%S\')\n',
' else:\n',
' cur.execute("UPDATE domains SET expire_date = %s WHERE id = %s", (expire_date_value, domain_info[\'id\']))\n',
' domain_update_data[\'expire_date\'] = expire_date_value\n',
' \n',
' # 3. 备案历史\n',
' has_beian_value = self.update_values[\'has_beian\']\n',
' if has_beian_value != \'不更新\':\n',
' status_value = status_mappings[\'备案历史\'][has_beian_value]\n',
' cur.execute("UPDATE domains SET has_beian = %s WHERE id = %s", (status_value, domain_info[\'id\']))\n',
' domain_update_data[\'has_beian\'] = has_beian_value\n',
' \n',
' # 4. 备案年份\n',
' beian_year_value = self.update_values[\'beian_year\']\n',
' if beian_year_value and beian_year_value != \'不更新\':\n',
' cur.execute("UPDATE domains SET beian_year = %s WHERE id = %s", (beian_year_value, domain_info[\'id\']))\n',
' domain_update_data[\'beian_year\'] = beian_year_value\n',
' \n',
' # 5. 域名快照年份\n',
' snapshot_years_value = self.update_values[\'snapshot_years\']\n',
' if snapshot_years_value and snapshot_years_value != \'不更新\':\n',
' cur.execute("UPDATE domains SET snapshot_years = %s WHERE id = %s", (snapshot_years_value, domain_info[\'id\']))\n',
' domain_update_data[\'snapshot_years\'] = snapshot_years_value\n',
' \n',
' # 6. 单位性质\n',
' company_type_value = self.update_values[\'company_type\']\n',
' if company_type_value != \'不更新\':\n',
' status_value = status_mappings[\'单位性质\'][company_type_value]\n',
' cur.execute("UPDATE domains SET company_type = %s WHERE id = %s", (status_value, domain_info[\'id\']))\n',
' domain_update_data[\'company_type\'] = company_type_value\n',
' \n',
' # 7. 检测时间\n',
' detect_time_value = self.update_values[\'detect_time\']\n',
' if detect_time_value and detect_time_value != \'不更新\':\n',
' if detect_time_value == \'当前时间\':\n',
' cur.execute("UPDATE domains SET detect_time = CURRENT_TIMESTAMP WHERE id = %s", (domain_info[\'id\'],))\n',
' import datetime\n',
' domain_update_data[\'detect_time\'] = datetime.datetime.now().strftime(\'%Y-%m-%d %H:%M:%S\')\n',
' else:\n',
' cur.execute("UPDATE domains SET detect_time = %s WHERE id = %s", (detect_time_value, domain_info[\'id\']))\n',
' domain_update_data[\'detect_time\'] = detect_time_value\n',
' \n',
' # 8. 检查domain_detections表中是否存在记录\n',
' cur.execute("SELECT id FROM domain_detections WHERE domain_id = %s", (domain_info[\'id\'],))\n',
' detection_id = cur.fetchone()\n',
' \n',
' # 9. 首页网址\n',
' website_url_value = self.update_values[\'website_url\']\n',
' if website_url_value != \'不更新\':\n',
' # 更新域名表中的website_url字段\n',
' cur.execute("UPDATE domains SET website_url = %s WHERE id = %s", (website_url_value, domain_info[\'id\']))\n',
' domain_update_data[\'website_url\'] = website_url_value\n',
' \n',
' # 10. 百度历史收录状态\n',
' baidu_history_value = self.update_values[\'baidu_history\']\n',
' if baidu_history_value != \'不更新\':\n',
' status_value = status_mappings[\'百度历史收录状态\'][baidu_history_value]\n',
' # 转换为JSON格式\n',
' import json\n',
' json_value = json.dumps({"status": status_value})\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET baidu_history = %s WHERE domain_id = %s", (json_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, baidu_history) VALUES (%s, %s)", (domain_info[\'id\'], json_value))\n',
' domain_update_data[\'baidu_history\'] = baidu_history_value\n',
' \n',
' # 11. 百度site收录状态\n',
' baidu_site_value = self.update_values[\'baidu_site\']\n',
' if baidu_site_value != \'不更新\':\n',
' status_value = status_mappings[\'百度site收录状态\'][baidu_site_value]\n',
' # 转换为JSON格式\n',
' import json\n',
' json_value = json.dumps({"status": status_value})\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET baidu_site = %s WHERE domain_id = %s", (json_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, baidu_site) VALUES (%s, %s)", (domain_info[\'id\'], json_value))\n',
' domain_update_data[\'baidu_site\'] = baidu_site_value\n',
' \n',
' # 12. title是否简体中文\n',
' is_chinese_title_value = self.update_values[\'is_chinese_title\']\n',
' if is_chinese_title_value != \'不更新\':\n',
' status_value = status_mappings[\'title是否简体中文\'][is_chinese_title_value]\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET is_chinese_title = %s WHERE domain_id = %s", (status_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, is_chinese_title) VALUES (%s, %s)", (domain_info[\'id\'], status_value))\n',
' domain_update_data[\'is_chinese_title\'] = is_chinese_title_value\n',
' \n',
' # 13. 360 site收录状态\n',
' qihu360_site_value = self.update_values[\'qihu360_site\']\n',
' if qihu360_site_value != \'不更新\':\n',
' status_value = status_mappings[\'360 site收录状态\'][qihu360_site_value]\n',
' # 转换为JSON格式\n',
' import json\n',
' json_value = json.dumps({"status": status_value})\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET qihu360_site = %s WHERE domain_id = %s", (json_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, qihu360_site) VALUES (%s, %s)", (domain_info[\'id\'], json_value))\n',
' domain_update_data[\'qihu360_site\'] = qihu360_site_value\n',
' \n',
' # 14. Google site收录状态\n',
' google_site_value = self.update_values[\'google_site\']\n',
' if google_site_value != \'不更新\':\n',
' status_value = status_mappings[\'Google site收录状态\'][google_site_value]\n',
' # 转换为JSON格式\n',
' import json\n',
' json_value = json.dumps({"status": status_value})\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET google_site = %s WHERE domain_id = %s", (json_value, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, google_site) VALUES (%s, %s)", (domain_info[\'id\'], json_value))\n',
' domain_update_data[\'google_site\'] = google_site_value\n',
' \n',
' # 15. 友链数量\n',
' backlink_count_value = self.update_values[\'backlink_count\']\n',
' if backlink_count_value and backlink_count_value != \'不更新\':\n',
' # 更新domains表中的backlink_count字段\n',
' cur.execute("UPDATE domains SET backlink_count = %s WHERE id = %s", (backlink_count_value, domain_info[\'id\']))\n',
' # 同时更新domain_detections表中的backlink_count_gt_10字段是否大于10\n',
' backlink_count_gt_10 = int(backlink_count_value) > 10\n',
' if detection_id:\n',
' cur.execute("UPDATE domain_detections SET backlink_count_gt_10 = %s WHERE domain_id = %s", (backlink_count_gt_10, domain_info[\'id\']))\n',
' else:\n',
' cur.execute("INSERT INTO domain_detections (domain_id, backlink_count_gt_10) VALUES (%s, %s)", (domain_info[\'id\'], backlink_count_gt_10))\n',
' domain_update_data[\'backlink_count\'] = backlink_count_value\n',
' \n',
' # 提交事务\n',
' conn.commit()\n',
' updated_count += 1\n',
' update_data[domain] = domain_update_data\n',
' except Exception as e:\n',
' logger.error(f"更新域名状态失败: {e}")\n',
' if conn:\n',
' try:\n',
' conn.rollback()\n',
' except:\n',
' pass\n',
' except Exception as e:\n',
' logger.error(f"批量更新失败: {e}")\n',
' finally:\n',
' # 关闭连接\n',
' db.close(conn, cur)\n',
' except Exception as e:\n',
' logger.error(f"更新状态失败: {e}")\n',
' \n',
' # 发送更新完成信号\n',
' self.update_finished.emit(updated_count, update_data)\n',
'\n',
'\n'
]
# 替换UpdateThread类
new_lines = lines[:start_line] + new_update_thread + lines[end_line:]
# 写回文件
with open('G:\PyCode\domainScanDemo\app\ui\domain_filter.py', 'w', encoding='utf-8') as f:
f.writelines(new_lines)
print('UpdateThread class updated successfully')
else:
print('UpdateThread class not found')