46426d586e
Фазы 2-3 плана self-render. Только новые файлы — существующий код не тронут, xf4-путь цел. 281/281 юнит-тестов зелёные, Pint чисто. - TwoGisReader — интерфейс разбора 2ГИС (3 метода: listing/card/branchList), единый контракт поверх HTML (xf4) ИЛИ initialState-JSON (self-render). - HtmlTwoGisReader — xf4-путь: тонкий делегат к CategoryListingParser/ DirectoryParser, поведение 1:1 (4 теста контракт-идентичности на реальных фикстурах 2gis-*-kraslombard). - TwoGisJsonReader — self-render путь: разбор window.initialState по карте путей спайка (pagination-список → entity.profile), фильтр type=branch (фирма-в-фирму, без зданий/улиц). 5 тестов на реальных фикстурах: 12 фирм листинга, телефон+сайт карточки, 2 пути поиска-по-телефону, деградация. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
38 lines
1.5 KiB
PHP
38 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services\Autopodbor\Agent\Extract;
|
|
|
|
use App\Services\Autopodbor\Agent\Fetch\DirectoryCard;
|
|
|
|
/**
|
|
* Шов разбора 2ГИС: единый контракт поверх «сырья» страницы (HTML от xf4 ИЛИ initialState-JSON
|
|
* от своего рендера). Реализации: {@see HtmlTwoGisReader} (xf4-путь, делегирует старым парсерам) и
|
|
* {@see TwoGisJsonReader} (self-render, разбирает initialState). Выход по форме идентичен нынешним
|
|
* парсерам, поэтому потребители (шаг 1/2, разворот) не замечают разницы источника.
|
|
*/
|
|
interface TwoGisReader
|
|
{
|
|
/**
|
|
* Список фирм со страницы поиска-рубрики (как {@see CategoryListingParser::parse}).
|
|
*
|
|
* @return list<array{name:string,card_url:string,site:?string}>
|
|
*/
|
|
public function listing(string $payload): array;
|
|
|
|
/**
|
|
* Карточка фирмы: телефоны+сайт+описание (как {@see DirectoryParser::parse2gisCard}).
|
|
*
|
|
* @return list<DirectoryCard>
|
|
*/
|
|
public function card(string $payload, string $url): array;
|
|
|
|
/**
|
|
* Пути карточек филиалов со страницы списка/поиска (как {@see DirectoryParser::parseBranchList}).
|
|
*
|
|
* @return list<string>
|
|
*/
|
|
public function branchList(string $payload): array;
|
|
}
|