feat(FeedParser): recursively parse rss modules (#4422)

Also stop excluding the media module

fix #4415
This commit is contained in:
Dag 2025-01-25 18:29:01 +01:00 committed by GitHub
parent 952a2d99a3
commit dd8bc077ed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 88 additions and 3 deletions

View file

@ -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;
}