From 8e6dd8736e73f8f5f90200f21ae02d35f8617246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nu=C5=A1a=20Puk=C5=A1i=C4=8D?= Date: Tue, 7 Oct 2025 18:46:40 +0200 Subject: [PATCH] Magazine from RSS, continued --- src/Command/RssFetchCommand.php | 8 ++++++++ src/Service/RssFeedService.php | 17 ++++++++++++++++- src/Service/RssToNostrConverter.php | 20 ++++++++++++-------- templates/layout.html.twig | 2 ++ templates/pages/article.html.twig | 4 ++-- 5 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/Command/RssFetchCommand.php b/src/Command/RssFetchCommand.php index d05a2e7..bfd7653 100644 --- a/src/Command/RssFetchCommand.php +++ b/src/Command/RssFetchCommand.php @@ -347,6 +347,14 @@ class RssFetchCommand extends Command $existing->setPublishedAt($item['pubDate']); } + // Extract and set image from tags + foreach ($eventObject->tags as $tag) { + if ($tag[0] === 'image' && isset($tag[1])) { + $existing->setImage($tag[1]); + break; + } + } + // Extract and set summary from tags (now with HTML stripped) foreach ($eventObject->tags as $tag) { if ($tag[0] === 'summary' && isset($tag[1])) { diff --git a/src/Service/RssFeedService.php b/src/Service/RssFeedService.php index a0bd8fe..88e9504 100644 --- a/src/Service/RssFeedService.php +++ b/src/Service/RssFeedService.php @@ -121,6 +121,21 @@ class RssFeedService } } + // Extract image from media:content + $imageUrl = null; + if (isset($namespaces['media'])) { + $mediaChildren = $item->children($namespaces['media']); + if (isset($mediaChildren->content)) { + foreach ($mediaChildren->content as $mediaContent) { + $medium = (string) $mediaContent['medium']; + if ($medium === 'image' || empty($medium)) { + $imageUrl = (string) $mediaContent['url']; + break; + } + } + } + } + // Parse publication date $pubDate = null; if (isset($item->pubDate)) { @@ -135,6 +150,7 @@ class RssFeedService 'content' => $content, 'categories' => $categories, 'guid' => (string) ($item->guid ?? ''), + 'image' => $imageUrl, ]; } @@ -186,4 +202,3 @@ class RssFeedService ]; } } - diff --git a/src/Service/RssToNostrConverter.php b/src/Service/RssToNostrConverter.php index c08250d..5492c54 100644 --- a/src/Service/RssToNostrConverter.php +++ b/src/Service/RssToNostrConverter.php @@ -51,14 +51,8 @@ class RssToNostrConverter $event = new Event(); $event->setKind(KindsEnum::LONGFORM->value); - // Set content + // Set content (without appending the link) $content = $rssItem['content'] ?? $rssItem['description'] ?? ''; - - // If we have both content and link, append a reference - if (!empty($rssItem['link'])) { - $content .= "\n\n---\n\nOriginal article: " . $rssItem['link']; - } - $event->setContent($content); // Generate unique slug from title and timestamp @@ -76,6 +70,11 @@ class RssToNostrConverter $event->addTag(['summary', $summary]); } + // Add image tag if available + if (!empty($rssItem['image'])) { + $event->addTag(['image', $rssItem['image']]); + } + // Add published_at tag if ($rssItem['pubDate'] instanceof \DateTimeImmutable) { $event->addTag(['published_at', (string) $rssItem['pubDate']->getTimestamp()]); @@ -86,7 +85,12 @@ class RssToNostrConverter $event->addTag(['t', $matchedCategory['slug']]); } - // Add reference to original URL + // Add source tag for original article URL + if (!empty($rssItem['link'])) { + $event->addTag(['source', $rssItem['link']]); + } + + // Add reference to original URL (r tag for generic reference) if (!empty($rssItem['link'])) { $event->addTag(['r', $rssItem['link']]); } diff --git a/templates/layout.html.twig b/templates/layout.html.twig index f17ed5b..52e4109 100644 --- a/templates/layout.html.twig +++ b/templates/layout.html.twig @@ -14,9 +14,11 @@
  • Reading Lists
  • + {% if is_granted('ROLE_ADMIN') %}
  • My NZines
  • + {% endif %}
  • {{ 'heading.search'|trans }}
  • diff --git a/templates/pages/article.html.twig b/templates/pages/article.html.twig index 632c6de..c2e7f3d 100644 --- a/templates/pages/article.html.twig +++ b/templates/pages/article.html.twig @@ -32,7 +32,7 @@ {% endif %} -
    +

    {{ article.title }}

    @@ -83,7 +83,7 @@
    -
    +
    {% endblock %} {% block aside %}