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; } }