mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2025-01-17 22:28:22 +01:00
[AllegroBridge] fix non-functional bridge (#3571)
— fix cookie pattern – use data analytics attributes wherever possible to avoid relying on obfuscated class names — add support for promoted offers — include sponsored and promoted offers by default — some additional refactoring
This commit is contained in:
parent
1f6c2cd32c
commit
2cc89b767c
@ -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 = ['<span>', ':</span> ', '<strong>', ' </strong> '];
|
||||
$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('</span><span', '</span> <span', $buyNowAuction);
|
||||
|
||||
$auctionTimeLeft = $post->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
|
||||
. '<div><strong>'
|
||||
. $price
|
||||
. '</strong></div><div>'
|
||||
. $auctionTimeLeft
|
||||
. '</div><div>'
|
||||
. $buyNowAuction
|
||||
. implode('</div><div>', $offerExtraInfo)
|
||||
. '</div><dl>'
|
||||
. $offerExtraInfo
|
||||
. $pricingExtraInfo
|
||||
. '</dl><hr>';
|
||||
|
||||
$this->items[] = $item;
|
||||
|
Loading…
x
Reference in New Issue
Block a user