Работает обработка ссылок на таблицы с численностью

This commit is contained in:
2024-09-06 14:11:38 +03:00
parent 04374fef40
commit 2be45826c1
1698 changed files with 138656 additions and 174 deletions

View File

@ -7,7 +7,7 @@ use ContingentParser\Http\UrlBuilder;
use ContingentParser\Logger\HtmlLogger;
use ContingentParser\Parser\ContingentFacade;
class Facade
final class Facade
{
private DatabaseFacade $databaseFacade;
private HttpClientFacade $httpClientFacade;
@ -27,13 +27,12 @@ class Facade
}
/**
* Получить массив сайтов
* @param array $params
* Массив сайтов, у которых нужны обновиленные URL
* @param array $params Массив сайтов, у которых нужны обновиленные URL
* @return array
*/
public function getSites(array $params = []) : array
public function getSites(array $params = []): array
{
if (empty($params)) {
if (!$params) {
return $this->databaseFacade->getSitesFromNiimko();
} else {
return $this->databaseFacade->getSitesFromMiccedu($params);
@ -42,65 +41,72 @@ class Facade
/**
* Cобирает из микроразметки данные таблицы
* "Информация о численности обучающихся" в разделе "Образование"
* @param array $site
* Сайт содержащий id организации и URL
* @param array $site Сайт содержащий id организации и URL
* @return void
*/
public function collectDataFromContingent(array $site) : void
public function collectDataFromContingent(array $site): void
{
list('org_id' => $orgId, 'site' => $url) = $site;
// Нет URL сайта вуза
if (empty($site)) {
// $httpLogger->log($orgId);
return;
}
// Уже в базе
if (in_array($orgId, $this->databaseFacade->universities())) {
if ($this->isExit($site)) {
return;
}
$url = $this->urlBuilder->build($url);
Printer::println(implode(' ', $site), 'green');
$html = $this->httpClientFacade->processEducationContingentSites(
Printer::println(implode(' ', $site), Color::GREEN);
$html = $this->httpClientFacade->getContentOfSite(
$url,
$site
);
$uri = $this->contingentFacade->getLink($html);
if ($uri) {
$pattern = '/^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/';
if (preg_match($pattern, $uri)) {
$html = $this->httpClientFacade->getContentOfSite(
$url,
$site
);
} else if ($this->urlBuilder->checkUri($uri)) {
$html = $this->httpClientFacade->getContentOfSite(
$url,
$site,
$uri
);
}
}
// Получаем данные таблицы численности
$contingent = $this->contingentFacade->getContingent(
$html,
$this->databaseFacade->specialties(),
$orgId
$site['org_id']
);
if ($contingent) {
// $contingent = $this->contingentFacade->getContingentFromLink($html);
// if ($contingent) {
Printer::println("No result", 'red');
$this->htmlLogger->log("$orgId $url");
// }
if ($this->contingentFacade->isValidContingent($contingent)
&& $contingent
) {
// Заносим в базу
Printer::print_r($contingent, Color::BLUE);
$this->databaseFacade->insertContingent($contingent);
} else {
if ($this->contingentFacade->isValidContingent($contingent)) {
// Заносим в базу
Printer::print_r($contingent, 'blue');
$this->databaseFacade->insertContingent($contingent);
} else {
$this->htmlLogger->log("$orgId $url");
Printer::println("No result", 'red');
}
Printer::println("No result", Color::RED);
$this->htmlLogger->log("$orgId $url");
}
Printer::println();
}
public function getExclusionSites(string $path) : array
/**
* Условие выхода
* @param array $site
* @return bool
*/
private function isExit(array $site): bool
{
$logs = file($path);
$result = [];
foreach ($logs as $log) {
$data = explode(' ', $log);
$result[] = [
'org_id' => $data[2],
'site' => $data[3] ? $data[3] : ''
];
// Нет URL сайта вуза
if (!$site['site']) {
return true;
}
return $result;
// Уже в базе
if (in_array($site['org_id'], $this->databaseFacade->universities())) {
return true;
}
return false;
}
}