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

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

@ -1,23 +1,20 @@
<?php
namespace ContingentParser\Parser;
class ContingentFacade
final class ContingentFacade
{
/**
* Получить данные о численности
* @param string $html
* Разметка сайта вуза
* @param mixed $specialties
* Массив специальностей
* @param int $orgId
* Идентификатор организации
* @param string $html Разметка сайта вуза
* @param mixed $specialties Массив специальностей
* @param int $orgId Идентификатор организации
* @return array
*/
public function getContingent(
string $html,
array $specialties,
int $orgId
) : array {
): array {
$parser = new ContingentParser($html);
$contingent = $parser->getDataTable();
$this->addSpecId($contingent, $specialties);
@ -27,11 +24,10 @@ class ContingentFacade
}
/**
* Проверка на валидность записи численнести
* @param array $contingent
* Массив численности по специальностям
* @param array $contingent Массив численности по специальностям
* @return bool
*/
public function isValidContingent(array $contingent) : bool
public function isValidContingent(array $contingent): bool
{
$count = 0;
foreach ($contingent as $value) {
@ -41,13 +37,11 @@ class ContingentFacade
}
/**
* Добавить идентификатор специальности в запись численности
* @param array $contingent
* Массив численности по специальностям
* @param array $specialties
* Массив специальностей
* @param array $contingent Массив численности по специальностям
* @param array $specialties Массив специальностей
* @return void
*/
private function addSpecId(array &$contingent, array $specialties) : void
private function addSpecId(array &$contingent, array $specialties): void
{
$specIdMap = array_column($specialties, 'spec_id', 'spec_code');
foreach ($contingent as $key => $con) {
@ -56,10 +50,8 @@ class ContingentFacade
}
/**
* Добавить идентификатор организации в запись численности
* @param array $contingent
* Массив численности по специальностям
* @param int $orgId
* Идентифиактор организации
* @param array $contingent Массив численности по специальностям
* @param int $orgId Идентифиактор организации
* @return void
*/
private function addOrgId(array &$contingent, int $orgId): void
@ -69,13 +61,13 @@ class ContingentFacade
}
}
/**
* Summary of getContingentFromLink
*
* @param string $html
* @return array
* @return string
*/
// public function getContingentFromLink(string $html): array
// {
// $parser = new ContingentParser($html);
// $
// }
public function getLink(string $html): string
{
$parser = new ContingentParser($html);
return $parser->getLink();
}
}

View File

@ -1,10 +1,14 @@
<?php
/**
* Парсер информации об образовательной организации
* с её сайта с использованием микроразметки
*/
namespace ContingentParser\Parser;
use DOMDocument;
use DOMXPath;
class ContingentParser
final class ContingentParser
{
private ?DOMXPath $xpath;
private DOMDocument $dom;
@ -33,7 +37,7 @@ class ContingentParser
}
}
private function setEncoding(string &$html) : void
private function setEncoding(string &$html): void
{
$encoding = mb_detect_encoding($html, 'UTF-8, windows-1251');
if ($encoding != self::ENCODING) {
@ -46,7 +50,7 @@ class ContingentParser
}
$html = mb_convert_encoding($html,'HTML-ENTITIES','UTF-8');
}
public function getDataTable() : array
public function getDataTable(): array
{
if (empty($this->xpath)) return [];
@ -77,7 +81,7 @@ class ContingentParser
return $records;
}
private function parseContingent() : array
private function parseContingent(): array
{
$data = [];
foreach (self::FIELDS as $field => $tag) {
@ -100,8 +104,15 @@ class ContingentParser
public function getLink(): string
{
$needle = "Информация о численности обучающихся";
$data = $this->dom->getElementsByTagName('a');
var_dump($data->item(0)->getAttribute('href'));
for ($i = 0; $i < $data->length; $i++) {
$haystack = $data->item($i)->textContent;
$isInformationOfContingent = strpos($haystack, $needle) !== false;
if ($isInformationOfContingent) {
return $data->item($i)->getAttribute('href');
}
}
return '';
}
}

View File

@ -1,7 +1,7 @@
<?php
namespace ContingentParser\Parser;
class ContingentRow
final class ContingentRow
{
public function __construct(
private string $eduCode,
@ -20,7 +20,7 @@ class ContingentRow
$this->contingent = $contingent;
}
public function getData() : array
public function getData(): array
{
return [
"spec_code" => $this->eduCode,