aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Dag <me@dvikan.no> 2025-01-25 18:29:01 +0100
committerGravatar GitHub <noreply@github.com> 2025-01-25 18:29:01 +0100
commitdd8bc077edc5b1af664b4fae9d63a16467e02c17 (patch)
tree6b455d261c54230c1705853fbf6965f3be08d2eb /lib
parent952a2d99a338026af2a5f539c92cc420912867ea (diff)
downloadrss-bridge-dd8bc077edc5b1af664b4fae9d63a16467e02c17.tar.gz
rss-bridge-dd8bc077edc5b1af664b4fae9d63a16467e02c17.tar.zst
rss-bridge-dd8bc077edc5b1af664b4fae9d63a16467e02c17.zip
feat(FeedParser): recursively parse rss modules (#4422)
Also stop excluding the media module fix #4415
Diffstat (limited to 'lib')
-rw-r--r--lib/FeedParser.php12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/FeedParser.php b/lib/FeedParser.php
index 0ad90965..3b133b85 100644
--- a/lib/FeedParser.php
+++ b/lib/FeedParser.php
@@ -174,7 +174,7 @@ final class FeedParser
}
foreach ($namespaces as $namespaceName => $namespaceUrl) {
- if (in_array($namespaceName, ['', 'content', 'media'])) {
+ if (in_array($namespaceName, ['', 'content'])) {
continue;
}
$item[$namespaceName] = $this->parseModule($feedItem, $namespaceName, $namespaceUrl);
@@ -250,11 +250,17 @@ final class FeedParser
private function parseModule(\SimpleXMLElement $element, string $namespaceName, string $namespaceUrl): array
{
+ // Unfortunately this parses out only node values as string
+ // TODO: parse attributes too
+
$result = [];
$module = $element->children($namespaceUrl);
foreach ($module as $name => $value) {
- // todo: add custom parsing if it's something other than a string
- $result[$name] = (string) $value;
+ if (get_class($value) === 'SimpleXMLElement' && $value->count() !== 0) {
+ $result[$name] = $this->parseModule($value, $namespaceName, $namespaceUrl);
+ } else {
+ $result[$name] = (string) $value;
+ }
}
return $result;
}