From fd52b9b9a487cd6693455ed6df36d6b805adb1f7 Mon Sep 17 00:00:00 2001 From: ORelio Date: Fri, 13 Oct 2023 19:27:33 +0200 Subject: [PATCH] [CssSelectorFeedExpander] Fix ArgumentCountError (#3739) (#3751) * [CssSelectorFeedExpander] Fix ArgumentCountError (#3739) Fix ArgumentCountError (#3739) using new FeedParser class (#3740) Implement default value for feed name / url if missing * [CssSelectorFeedExpander] Skip empty fields in source feed Fix empty feed properties being passed down from source feed rssbridge.DEBUG lib/FeedItem.php(177): Author must be a string! rssbridge.DEBUG lib/FeedItem.php(267): Unique id must be a string! If "don't expand metadata" is checked, then source feed is passed down verbatim (only content is expanded) so the debug messages will persist, but the issue is in source feed, not in the bridge. --- bridges/CssSelectorFeedExpanderBridge.php | 40 ++++++++++++----------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/bridges/CssSelectorFeedExpanderBridge.php b/bridges/CssSelectorFeedExpanderBridge.php index 008921b1..9f332fb9 100644 --- a/bridges/CssSelectorFeedExpanderBridge.php +++ b/bridges/CssSelectorFeedExpanderBridge.php @@ -1,16 +1,5 @@ getInput('discard_thumbnail'); $limit = $this->getInput('limit'); - //$xmlString = getContents($url); - //$feed = (new FeedParser())->parseFeed($xmlString); - //$items = $feed['items']; + $source_feed = (new FeedParser())->parseFeed(getContents($url)); + $items = $source_feed['items']; - $feed_expander = new CssSelectorFeedExpanderBridgeInternal(); - $items = $feed_expander->collectExpandableDatas($url)->getItems(); + // Map Homepage URL (Default: Root page) + if (isset($source_feed['uri'])) { + $this->homepageUrl = $source_feed['uri']; + } else { + $this->homepageUrl = urljoin($url, '/'); + } - $this->homepageUrl = urljoin($url, '/'); - $this->feedName = $feed_expander->getName(); + // Map Feed Name (Default: Domain name) + if (isset($source_feed['title'])) { + $this->feedName = $source_feed['title']; + } else { + $this->feedName = explode('/', urljoin($url, '/'))[2]; + } + // Apply item limit (Default: Global limit) + if ($limit > 0) { + $items = array_slice($items, 0, $limit); + } + + // Expand feed items (CssSelectorBridge) foreach ($items as $item_from_feed) { $item_expanded = $this->expandEntryWithSelector( $item_from_feed['uri'], @@ -86,7 +88,7 @@ class CssSelectorFeedExpanderBridge extends CssSelectorBridge } else { // Take expanded item, but give priority to metadata already in source item foreach ($item_from_feed as $field => $val) { - if ($field !== 'content') { + if ($field !== 'content' && !empty($val)) { $item_expanded[$field] = $val; } }