diff --git a/bridges/AllegroBridge.php b/bridges/AllegroBridge.php index 55457416..be240857 100644 --- a/bridges/AllegroBridge.php +++ b/bridges/AllegroBridge.php @@ -16,14 +16,20 @@ class AllegroBridge extends BridgeAbstract 'sessioncookie' => [ 'name' => 'The \'wdctx\' session cookie', 'title' => 'Paste the value of the \'wdctx\' cookie from your browser if you want to prevent Allegro imposing rate limits', - 'pattern' => '^.{250,};?$', + 'pattern' => '^.{70,};?$', // phpcs:ignore 'exampleValue' => 'v4.1-oCrmXTMqv2ppC21GTUCKLmUwRPP1ssQVALKuqwsZ1VXjcKgL2vO5TTRM5xMxS9GiyqxF1gAeyc-63dl0coUoBKXCXi_nAmr95yyqGpq2RAFoneZ4L399E8n6iYyemcuGARjAoSfjvLHJCEwvvHHynSgaxlFBu7hUnKfuy39zo9sSQdyTUjotJg3CAZ53q9v2raAnPCyGOAR4ytRILd9p24EJnxp7_oR0XbVPIo1hDa4WmjXFOxph8rHaO5tWd', 'required' => false, ], 'includeSponsoredOffers' => [ 'type' => 'checkbox', - 'name' => 'Include Sponsored Offers' + 'name' => 'Include Sponsored Offers', + 'defaultValue' => 'checked' + ], + 'includePromotedOffers' => [ + 'type' => 'checkbox', + 'name' => 'Include Promoted Offers', + 'defaultValue' => 'checked' ] ]]; @@ -63,58 +69,57 @@ class AllegroBridge extends BridgeAbstract return; } - $results = $html->find('._6a66d_V7Lel article'); + $results = $html->find('article[data-analytics-view-custom-context="REGULAR"]'); if (!$this->getInput('includeSponsoredOffers')) { - $results = array_filter($results, function ($node) { - return $node->{'data-analytics-view-label'} != 'showSponsoredItems'; - }); + $results = array_merge($results, $html->find('article[data-analytics-view-custom-context="SPONSORED"]')); + } + + if (!$this->getInput('includePromotedOffers')) { + $results = array_merge($results, $html->find('article[data-analytics-view-custom-context="PROMOTED"]')); } foreach ($results as $post) { $item = []; - $item['uri'] = $post->find('._6a66d_LX75-', 0)->href; - -//TODO: port this over, whatever it does, from https://github.com/MK-PL/AllegroRSS -// if (arrayLinks.includes('events/clicks?')) { -// let sponsoredLink = new URL(arrayLinks).searchParams.get('redirect') -// arrayLinks = sponsoredLink.slice(0, sponsoredLink.indexOf('?')) -// } - - $item['title'] = $post->find('._6a66d_LX75-', 0)->innertext; - $item['uid'] = $post->{'data-analytics-view-value'}; + $item_link = $post->find('a[href*="' . $item['uid'] . '"], a[href*="allegrolokalnie"]', 0); + + $item['uri'] = $item_link->href; + + $item['title'] = $item_link->find('img', 0)->alt; + + $image = $item_link->find('img', 0)->{'data-src'} ?: $item_link->find('img', 0)->src ?? false; + + if ($image) { + $item['enclosures'] = [$image . '#.image']; + } + + $price = $post->{'data-analytics-view-json-custom-price'}; + if ($price) { + $priceDecoded = json_decode(html_entity_decode($price)); + $price = $priceDecoded->amount . ' ' . $priceDecoded->currency; + } + $descriptionPatterns = ['/<\s*dt[^>]*>\b/', '/<\/dt>/', '/<\s*dd[^>]*>\b/', '/<\/dd>/']; $descriptionReplacements = ['', ': ', '', '  ']; $description = $post->find('.m7er_k4.mpof_5r.mpof_z0_s', 0)->innertext; $descriptionPretty = preg_replace($descriptionPatterns, $descriptionReplacements, $description); - $buyNowAuction = $post->find('.mqu1_g3.mvrt_0.mgn2_12', 0)->innertext ?? ''; - $buyNowAuction = str_replace(' find('._6a66d_ImOzU', 0)->innertext ?? ''; - - $price = $post->find('._6a66d_6R3iN', 0)->plaintext; - $price = empty($auctionTimeLeft) ? $price : $price . '- kwota licytacji'; - - $image = $post->find('._6a66d_44ioA img', 0)->{'data-src'} ?: $post->find('._6a66d_44ioA img', 0)->src ?? false; - if ($image) { - $item['enclosures'] = [$image . '#.image']; - } - - $offerExtraInfo = array_filter($post->find('.mqu1_g3.mgn2_12'), function ($node) { + $pricingExtraInfo = array_filter($post->find('.mqu1_g3.mgn2_12'), function ($node) { return empty($node->find('.mvrt_0')); }); - $offerExtraInfo = $offerExtraInfo[0]->plaintext ?? ''; + $pricingExtraInfo = $pricingExtraInfo[0]->plaintext ?? ''; - $isSmart = $post->find('._6a66d_TC2Zk', 0)->innertext ?? ''; - if (str_contains($isSmart, 'z kurierem')) { - $offerExtraInfo .= ', Smart z kurierem'; - } else { - $offerExtraInfo .= ', Smart'; + $offerExtraInfo = array_map(function ($node) { + return str_contains($node->plaintext, 'zapłać później') ? '' : $node->outertext; + }, $post->find('div.mpof_ki.mwdn_1.mj7a_4.mgn2_12')); + + $isSmart = $post->find('img[alt="Smart!"]', 0) ?? false; + if ($isSmart) { + $pricingExtraInfo .= $isSmart->outertext; } $item['categories'] = []; @@ -131,11 +136,9 @@ class AllegroBridge extends BridgeAbstract . '
' . $price . '
' - . $auctionTimeLeft - . '
' - . $buyNowAuction + . implode('
', $offerExtraInfo) . '
' - . $offerExtraInfo + . $pricingExtraInfo . '

'; $this->items[] = $item;