Files
crm.clientright.ru/cron/courtpars.php

125 lines
7.0 KiB
PHP
Raw Permalink Normal View History

<?php
// Функция для записи логов
function log_message($message) {
$date = date('Y-m-d H:i:s');
file_put_contents('../logs/parser5.log', "[$date] $message" . PHP_EOL, FILE_APPEND);
}
// Подключение к базе данных
$host = 'localhost'; // хост
$dbname = 'court'; // имя базы данных
$user = 'court_usr'; // пользователь
$password = 'yOrjA9HdgwXO4JGJ'; // пароль
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
log_message("Успешное подключение к базе данных '$dbname'.");
} catch (PDOException $e) {
log_message("Ошибка подключения к базе данных: " . $e->getMessage());
die("Ошибка подключения: " . $e->getMessage());
}
// Запрос на получение данных из таблицы project
$query = "SELECT * FROM project WHERE status IN ('представительство в суде 1й инстанции', 'апелляция', 'кассация') LIMIT 7";
$stmt = $pdo->prepare($query);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
log_message("Всего записей в таблице project: " . count($results));
if (count($results) === 0) {
log_message("Нет записей для парсинга.");
echo "<p>Нет записей для парсинга.</p>";
} else {
foreach ($results as $row) {
$status = $row['status'];
$case_number = $row['case_number'];
$uid = $row['uid'];
$link = '';
// Определяем, какую ссылку использовать для парсинга
if ($status === 'представительство в суде 1й инстанции') {
$link = $row['link1'];
} elseif ($status === 'апелляция') {
$link = $row['link2'];
} elseif ($status === 'кассация') {
$link = $row['link3'];
}
log_message("Парсим данные из ссылки: $link для дела: $case_number");
// Загружаем HTML-контент страницы дела
$html = @file_get_contents($link);
if ($html === false) {
log_message("Ошибка: не удалось загрузить страницу по ссылке: $link");
continue;
}
log_message("Страница успешно загружена. Начинаем парсинг...");
// Парсим HTML с помощью DOMDocument и XPath
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
// Определяем div для парсинга
$div_id = ($status === 'представительство в суде 1й инстанции') ? 'cont2' : 'cont3';
$rows = $xpath->query("//div[@id='$div_id']//tr");
log_message("Найдено строк (tr) в div с id '$div_id': " . $rows->length);
// Обрабатываем каждую строку таблицы
foreach ($rows as $row) {
$event_name = $xpath->query('./td[1]', $row)->item(0)->nodeValue ?? 'Не указано';
$event_date = $xpath->query('./td[2]', $row)->item(0)->nodeValue ?? 'Не указано';
$event_time = $xpath->query('./td[3]', $row)->item(0)->nodeValue ?? 'Не указано';
$location = $xpath->query('./td[4]', $row)->item(0)->nodeValue ?? 'Не указано';
$event_result = $xpath->query('./td[5]', $row)->item(0)->nodeValue ?? 'Не указано';
$event_basis = $xpath->query('./td[6]', $row)->item(0)->nodeValue ?? 'Не указано';
$note = $xpath->query('./td[7]', $row)->item(0)->nodeValue ?? 'Не указано';
$publication_date = $xpath->query('./td[8]', $row)->item(0)->nodeValue ?? 'Не указано';
// Пропускаем записи, если название события не указано
if ($event_name === 'Не указано' || $event_name === 'Наименование события') {
log_message("Пропущено событие: название не указано.");
continue; // Пропустить итерацию
}
// Пропускаем записи, если дата имеет неверный формат
if ($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));
log_message("Обрабатываем событие: $event_name, Дата: $formatted_date, Время: $event_time");
// Проверяем, существует ли запись в таблице subject
$checkQuery = "SELECT COUNT(*) FROM subject WHERE case_number = ? AND uid = ? AND event_name = ?";
$checkStmt = $pdo->prepare($checkQuery);
$checkStmt->execute([$case_number, $uid, $event_name]);
$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_name, $formatted_date, $event_time, $location, $event_result, $event_basis, $note, $formatted_publication_date, $current_datetime]);
log_message("Данные успешно записаны в таблицу subject для события: $event_name");
echo "<p>Записано: $event_name, Дата: $formatted_date, Время: $event_time</p>";
} else {
log_message("Дубликат найден для события: $event_name, пропускаем запись.");
}
}
}
}
?>