setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); log_message("Успешное подключение к базе данных '$dbname'."); } catch (PDOException $e) { log_message("Ошибка подключения к базе данных: " . $e->getMessage()); die("Ошибка подключения: " . $e->getMessage()); } // Переменные для статуса и ссылки $status = 'представительство в суде 1й инстанции'; // статус $link = 'https://leninsky--pnz.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=case&case_id=170692229&case_uid=576762af-00bc-4346-8f15-f142608f0b4c&delo_id=1540005&case_type=0&new=0&srv_num=1'; // ссылка // Определяем case_number и uid, чтобы избежать ошибок $case_number = '170692229'; // Подставьте актуальный номер дела $uid = '576762af-00bc-4346-8f15-f142608f0b4c'; // Подставьте актуальный uid log_message("Старт парсинга для статуса: $status"); log_message("Парсим данные из ссылки: $link"); // Загружаем HTML-контент страницы дела $html = @file_get_contents($link); if ($html === false) { log_message("Ошибка: не удалось загрузить страницу по ссылке: $link"); die("Ошибка: не удалось загрузить страницу по ссылке: $link"); } log_message("Страница успешно загружена. Начинаем парсинг..."); // Парсим HTML с помощью DOMDocument и XPath $dom = new DOMDocument(); libxml_use_internal_errors(true); // Убираем предупреждения @$dom->loadHTML($html); $xpath = new DOMXPath($dom); libxml_clear_errors(); // Очищаем ошибки // Определяем div для парсинга $div_id = ($status === 'представительство в суде 1й инстанции') ? 'cont2' : 'cont3'; $rows = $xpath->query("//div[@id='$div_id']//tr"); log_message("Найдено строк (tr) в div с id '$div_id': " . $rows->length); // Проверяем, если строки не найдены if ($rows->length === 0) { log_message("Ошибка: нет строк для парсинга в div с id '$div_id'. Проверьте структуру страницы."); die("Ошибка: нет строк для парсинга."); } $events = []; // Массив для хранения событий // Обрабатываем каждую строку таблицы foreach ($rows as $row) { // Используем try-catch для обработки каждой строки try { $event_name = trim($xpath->query('./td[1]', $row)->item(0)->nodeValue ?? ''); $event_date = trim($xpath->query('./td[2]', $row)->item(0)->nodeValue ?? ''); $event_time = trim($xpath->query('./td[3]', $row)->item(0)->nodeValue ?? ''); $location = trim($xpath->query('./td[4]', $row)->item(0)->nodeValue ?? ''); $event_result = trim($xpath->query('./td[5]', $row)->item(0)->nodeValue ?? ''); $event_basis = trim($xpath->query('./td[6]', $row)->item(0)->nodeValue ?? ''); $note = trim($xpath->query('./td[7]', $row)->item(0)->nodeValue ?? ''); $publication_date = trim($xpath->query('./td[8]', $row)->item(0)->nodeValue ?? ''); log_message("Найдено событие: $event_name, Дата: $event_date, Время: $event_time, Место: $location, Результат: $event_result, Основание: $event_basis, Примечание: $note, Дата размещения: $publication_date"); // Пропускаем записи, если название события не указано или дата неверная if (empty($event_name) || empty($event_date) || $event_date === '1970-01-01') { log_message("Пропущено событие: название или дата не указаны."); continue; // Пропустить итерацию } // Форматируем даты $formatted_date = date('Y-m-d', strtotime($event_date)); $current_datetime = date('Y-m-d H:i:s'); $formatted_publication_date = date('Y-m-d', strtotime($publication_date)); // Добавляем событие в массив $events[] = [ 'event_name' => $event_name, 'event_date' => $formatted_date, 'event_time' => $event_time, 'location' => $location, 'event_result' => $event_result, 'event_basis' => $event_basis, 'note' => $note, 'publication_date' => $formatted_publication_date, 'update_datetime' => $current_datetime ]; } catch (Exception $e) { log_message("Ошибка при обработке строки: " . $e->getMessage()); } } // Запись данных в таблицу subject foreach ($events as $event) { try { // Проверяем, существует ли запись в таблице subject $checkQuery = "SELECT COUNT(*) FROM subject WHERE event_name = ? AND event_date = ? AND publication_date = ?"; $checkStmt = $pdo->prepare($checkQuery); $checkStmt->execute([$event['event_name'], $event['event_date'], $event['publication_date']]); $exists = $checkStmt->fetchColumn() > 0; if (!$exists) { // Запись данных в таблицу subject $insertQuery = "INSERT INTO subject (case_number, uid, event_name, event_date, event_time, location, event_result, event_basis, note, publication_date, update_datetime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $insertStmt = $pdo->prepare($insertQuery); $insertStmt->execute([$case_number, $uid, $event['event_name'], $event['event_date'], $event['event_time'], $event['location'], $event['event_result'], $event['event_basis'], $event['note'], $event['publication_date'], $event['update_datetime']]); log_message("Данные успешно записаны в таблицу subject для события: " . $event['event_name']); } else { log_message("Дубликат найден для события: " . $event['event_name'] . ", пропускаем запись."); } } catch (Exception $e) { log_message("Ошибка при записи данных в таблицу subject: " . $e->getMessage()); } } log_message("Парсинг завершен."); ?>