From: Vladimir Fomichev Date: Tue, 2 Sep 2025 13:31:25 +0000 (+0300) Subject: Парсинг видео X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=701082a491ad48a88cac29ae2269ba5872da6653;p=erp24_rep%2Fyii-erp24%2F.git Парсинг видео --- 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