pdo = $pdo; $this->case_number = $case_number; $this->uid = $uid; $this->skip_duplicate_check = $skip_duplicate_check; $this->project_id = $project_id; } /** * Определить, может ли этот парсер обработать данную ссылку */ abstract public function canHandle($url); /** * Парсить страницу дела * @return array|null Массив с данными последнего события или null */ abstract public function parse($url, $status); /** * Логирование */ protected function log($message) { $date = date('Y-m-d H:i:s'); file_put_contents('logs/parser.log', "[$date] $message" . PHP_EOL, FILE_APPEND); } /** * Сохранить событие в БД */ protected function saveEvent($event) { // Проверяем на дублирование (если не отключена проверка) if (!$this->skip_duplicate_check) { $checkQuery = "SELECT COUNT(*) FROM subject WHERE event_name = ? AND event_date = ? AND publication_date = ?"; $checkStmt = $this->pdo->prepare($checkQuery); $checkStmt->execute([$event['event_name'], $event['event_date'], $event['publication_date']]); $exists = $checkStmt->fetchColumn() > 0; if ($exists) { $this->log("Дубликат найден для события: {$event['event_name']}, пропускаем запись."); return false; } } else { $this->log("⚠️ ТЕСТОВЫЙ РЕЖИМ: Проверка дубликатов отключена для события: {$event['event_name']}"); } // Запись данных в таблицу 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 = $this->pdo->prepare($insertQuery); $insertStmt->execute([ $this->case_number, $this->uid, $event['event_name'], $event['event_date'], $event['event_time'], $event['location'], $event['event_result'], $event['event_basis'], $event['note'], $event['publication_date'], date('Y-m-d H:i:s') ]); $this->log("Данные успешно записаны в таблицу subject для события: {$event['event_name']}"); return true; } } ?>