From 701082a491ad48a88cac29ae2269ba5872da6653 Mon Sep 17 00:00:00 2001 From: Vladimir Fomichev Date: Tue, 2 Sep 2025 16:31:25 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20?= =?utf8?q?=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/services/MarketplaceService.php | 2 +- erp24/services/ProductParserService.php | 54 +++++++++++++++---------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php index 3fa395dd..934f8268 100644 --- a/erp24/services/MarketplaceService.php +++ b/erp24/services/MarketplaceService.php @@ -528,7 +528,7 @@ class MarketplaceService $shop->addChild('name', 'Интернет магазин База Цветов 24'); $shop->addChild('company', 'Интернет магазин База Цветов 24'); $shop->addChild('url', 'https://bazacvetov24.ru'); - $shop->addChild('platform', 'BSM/Yandex/Market'); + //$shop->addChild('platform', 'BSM/Yandex/Market'); // Добавление валюты $currencies = $shop->addChild('currencies'); diff --git a/erp24/services/ProductParserService.php b/erp24/services/ProductParserService.php index d05f2fa0..29bd650b 100644 --- a/erp24/services/ProductParserService.php +++ b/erp24/services/ProductParserService.php @@ -15,11 +15,14 @@ class ProductParserService { $xpath = new DOMXPath($dom); + return [ 'name' => $this->extractName($xpath), - 'image_url' => $this->extractImageUrl($xpath), + 'image_url' => ($this->extractImageUrls($xpath))[0], 'description' => $this->extractDescription($xpath), 'properties' => $this->extractProperties($xpath), + 'video_url' => $this->extractVideoUrl($xpath), + 'image_urls' => $this->extractImageUrls($xpath), ]; } @@ -30,34 +33,41 @@ class ProductParserService { } - - - - private function extractImageUrl(DOMXPath $xpath): string + private function extractVideoUrl(DOMXPath $xpath): string { - $q1 = "//div[@id='js-detect-events']" . - "//div[contains(concat(' ', normalize-space(@class), ' '), ' swiper-slide-active ')]" . - "//img[contains(concat(' ', normalize-space(@class), ' '), ' main-image-content ')]"; - - $img = $xpath->query($q1)->item(0); - - if (!$img) { - $q2 = "//div[@id='js-detect-events']//img[contains(concat(' ', normalize-space(@class), ' '), ' main-image-content ')]"; - $img = $xpath->query($q2)->item(0); - } + $video = $xpath->query("//video")->item(0); $src = null; - if ($img) { - $src = $img->getAttribute('data-src'); + if ($video) { + $src = $video->getAttribute('src'); + } + return $src; + } - if (!$src) { - $zoom = $xpath->query("//div[@id='js-image-zoom']")->item(0); - if ($zoom && preg_match('/background-image:\s*url\([\"\']?(.*?)[\"\']?\)/i', $zoom->getAttribute('style'), $m)) { - $src = $m[1]; + private function extractImageUrls(\DOMXPath $xpath): array + { + $urls = []; + + $queryImages = "( + //div[starts-with(@id,'mainslider_') or contains(concat(' ', normalize-space(@class), ' '), ' swiper-container ')] + //img[contains(concat(' ', normalize-space(@class), ' '), ' main-image-content ')] + )"; + foreach ($xpath->query($queryImages) as $img) { + /** @var \DOMElement $img */ + $src = $img->getAttribute('src'); + if (!$src) { + $src = $img->getAttribute('data-src'); + } + if ($src) { + $urls[] = $src; } } - return $src; + + $urls = array_values(array_unique($urls)); + $urls = array_values(array_filter($urls, fn($u) => preg_match('~flowwow-images\.com/data/flowers/~', $u))); + + return $urls; } private function extractDescription(DOMXPath $xpath): string -- 2.39.5