feat(автоподбор): второй справочник канала А — Яндекс.Карты через локальный Playwright + слияние
Firecrawl Яндекс.Карты не рендерит (0-2 орг) — по §12.2 Яндекс берём локальным Playwright. render-yandex-list.cjs скроллит ленту результатов → 113 орг за ~18с (быстрее xfetch-2ГИС). YandexDirectory (граница) + PlaywrightYandexDirectory (живой, Process→node). Яндекс = имя+карточка (сайта в списке нет — только на карточке, не открываем). Оркестратор: канал А = 2ГИС(сайт)+Яндекс, слияние (mergeCompetitors union-find) схлопывает одного конкурента из обоих справочников в одну карточку с двумя directory_urls; сайт из 2ГИС. Провайдер подключает живой Яндекс. listingHtml → общий хелпер tests/Pest.php. Модуль 136 unit + 74 feature зелёные. За флагом; на проде не меняется. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -100,6 +100,28 @@ function stubPages(array $byNeedle): PageFetcher
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Разметка списка категории 2ГИС для тестов канала А: фирмы [[id,name,site?],...].
|
||||
* Общий хелпер (используют CategoryScraperTest и LiveFindCompetitorsTest).
|
||||
*
|
||||
* @param array<int, array{0:int|string,1:string,2?:?string}> $firms
|
||||
*/
|
||||
function listingHtml(array $firms): string
|
||||
{
|
||||
$h = '';
|
||||
foreach ($firms as $f) {
|
||||
$id = $f[0];
|
||||
$name = $f[1];
|
||||
$site = $f[2] ?? null;
|
||||
$h .= '<a href="/krasnoyarsk/firm/'.$id.'?stat=X" class="_1rehek"><span class="_lvwrwt"><span>'.$name.'</span></span></a>';
|
||||
if ($site !== null) {
|
||||
$h .= '{"caption":"Перейти на сайт","url":"https://link.2gis.ru/e/project7/'.$id.'/null/H?http://'.$site.'/"}';
|
||||
}
|
||||
}
|
||||
|
||||
return $h;
|
||||
}
|
||||
|
||||
/**
|
||||
* Link a Лидерра-project to a supplier_project via the M:N pivot
|
||||
* (Plan 1 model). Post-Plan-2 LeadRouter eligibility queries the pivot
|
||||
|
||||
Reference in New Issue
Block a user