81 lines
3.1 KiB
PHP
81 lines
3.1 KiB
PHP
|
|
<?php
|
|||
|
|
/**
|
|||
|
|
* Базовый класс для парсеров судов
|
|||
|
|
*/
|
|||
|
|
abstract class BaseCourtParser {
|
|||
|
|
protected $pdo;
|
|||
|
|
protected $case_number;
|
|||
|
|
protected $uid;
|
|||
|
|
protected $skip_duplicate_check;
|
|||
|
|
protected $project_id;
|
|||
|
|
|
|||
|
|
public function __construct($pdo, $case_number, $uid, $skip_duplicate_check = false, $project_id = null) {
|
|||
|
|
$this->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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
?>
|
|||
|
|
|