105 lines
3.3 KiB
PHP
105 lines
3.3 KiB
PHP
|
<?php
|
|||
|
namespace ContingentParser;
|
|||
|
|
|||
|
use ContingentParser\Database\DatabaseFacade;
|
|||
|
use ContingentParser\Http\HttpClientFacade;
|
|||
|
use ContingentParser\Http\UrlBuilder;
|
|||
|
use ContingentParser\Logger\HtmlLogger;
|
|||
|
use ContingentParser\Parser\ContingentFacade;
|
|||
|
|
|||
|
class Facade
|
|||
|
{
|
|||
|
private DatabaseFacade $databaseFacade;
|
|||
|
private HttpClientFacade $httpClientFacade;
|
|||
|
private ContingentFacade $contingentFacade;
|
|||
|
private UrlBuilder $urlBuilder;
|
|||
|
private HtmlLogger $htmlLogger;
|
|||
|
/**
|
|||
|
* Конструктор
|
|||
|
*/
|
|||
|
public function __construct()
|
|||
|
{
|
|||
|
$this->databaseFacade = new DatabaseFacade();
|
|||
|
$this->httpClientFacade = new HttpClientFacade();
|
|||
|
$this->urlBuilder = new UrlBuilder();
|
|||
|
$this->contingentFacade = new ContingentFacade();
|
|||
|
$this->htmlLogger = new HtmlLogger('log/html.log');
|
|||
|
}
|
|||
|
/**
|
|||
|
* Получить массив сайтов
|
|||
|
* @param array $params
|
|||
|
* Массив сайтов, у которых нужны обновиленные URL
|
|||
|
* @return array
|
|||
|
*/
|
|||
|
public function getSites(array $params = []) : array
|
|||
|
{
|
|||
|
if (empty($params)) {
|
|||
|
return $this->databaseFacade->getSitesFromNiimko();
|
|||
|
} else {
|
|||
|
return $this->databaseFacade->getSitesFromMiccedu($params);
|
|||
|
}
|
|||
|
}
|
|||
|
/**
|
|||
|
* Cобирает из микроразметки данные таблицы
|
|||
|
* "Информация о численности обучающихся" в разделе "Образование"
|
|||
|
* @param array $site
|
|||
|
* Сайт содержащий id организации и URL
|
|||
|
* @return 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())) {
|
|||
|
return;
|
|||
|
}
|
|||
|
$url = $this->urlBuilder->build($url);
|
|||
|
print(implode(' ', $site). "\033[0m" . PHP_EOL);
|
|||
|
$html = $this->httpClientFacade->processEducationContingentSites(
|
|||
|
$url,
|
|||
|
$site
|
|||
|
);
|
|||
|
|
|||
|
$contingent = $this->contingentFacade->getContingent(
|
|||
|
$html,
|
|||
|
$this->databaseFacade->specialties(),
|
|||
|
$orgId
|
|||
|
);
|
|||
|
|
|||
|
if (empty($contingent)) {
|
|||
|
print("\033[91mNo result\033[0m\n");
|
|||
|
$this->htmlLogger->log("$orgId $url");
|
|||
|
} else {
|
|||
|
if ($this->contingentFacade->isValidContingent($contingent)) {
|
|||
|
// Заносим в базу
|
|||
|
print_r($contingent);
|
|||
|
// $this->databaseFacade->insertContingent($contingent);
|
|||
|
} else {
|
|||
|
$this->htmlLogger->log("$orgId $url");
|
|||
|
print("\033[91mNo result\033[0m\n");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
unset($contingent);
|
|||
|
print(PHP_EOL);
|
|||
|
}
|
|||
|
|
|||
|
public function getExclusionSites(string $path) : array
|
|||
|
{
|
|||
|
$logs = file($path);
|
|||
|
$result = [];
|
|||
|
foreach ($logs as $log) {
|
|||
|
$data = explode(' ', $log);
|
|||
|
$result[] = [
|
|||
|
'org_id' => $data[2],
|
|||
|
'site' => $data[3] ? $data[3] : ''
|
|||
|
];
|
|||
|
}
|
|||
|
return $result;
|
|||
|
}
|
|||
|
}
|