Работает обработка ссылок на таблицы с численностью
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user