From 943f4fdea7445547a9bc7aa33893a0442be36c68 Mon Sep 17 00:00:00 2001
From: Shadowfacts
Date: Sat, 14 Jan 2023 15:22:11 -0500
Subject: [PATCH] Handle content:encoded in RSS2 feeds
---
lib/parser/rss2.ex | 5 ++++-
test/fixtures/rss2/shadowfacts.xml | 18 ++++++++++++++++++
test/parser/rss2_test.exs | 10 ++++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
create mode 100644 test/fixtures/rss2/shadowfacts.xml
diff --git a/lib/parser/rss2.ex b/lib/parser/rss2.ex
index 5650682..18a9bbb 100644
--- a/lib/parser/rss2.ex
+++ b/lib/parser/rss2.ex
@@ -58,6 +58,9 @@ defmodule FeedParser.Parser.RSS2 do
link = text('/item/link/text()', item)
description = text('/item/description/text()', item)
+ # http://purl.org/rss/1.0/modules/content/
+ content = text('/item/content:encoded/text()', item)
+
pubDate =
text('/item/pubDate/text()', item)
|> Timex.parse("{RFC1123}")
@@ -75,7 +78,7 @@ defmodule FeedParser.Parser.RSS2 do
title: title,
url: link,
links: [{link, nil}],
- content: description,
+ content: content || description,
date: pubDate,
creator: creator
}
diff --git a/test/fixtures/rss2/shadowfacts.xml b/test/fixtures/rss2/shadowfacts.xml
new file mode 100644
index 0000000..c113aef
--- /dev/null
+++ b/test/fixtures/rss2/shadowfacts.xml
@@ -0,0 +1,18 @@
+
+
+
+ Shadowfacts
+ https://shadowfacts.net
+
+ Fri, 06 Jan 2023 05:27:48 +0000
+ -
+
Rewritten in Rust
+ https://shadowfacts.net/2023/rewritten-in-rust/
+ meta
+ https://shadowfacts.net/2023/rewritten-in-rust/
+ Thu, 05 Jan 2023 19:30:42 +0000
+ So, about six months ago I decided I wanted to rewrite my perfectly-working blog backend in Rust. Why? Because I was bored and wanted an excuse to use Rust more.
+]]>
+
+
+
diff --git a/test/parser/rss2_test.exs b/test/parser/rss2_test.exs
index 6390818..d931633 100644
--- a/test/parser/rss2_test.exs
+++ b/test/parser/rss2_test.exs
@@ -36,4 +36,14 @@ defmodule FeedParser.Parser.RSS2Test do
assert [%FeedParser.Item{} = item] = feed.items
assert item.creator == "Jim Newell"
end
+
+ test "parses rss2 item with content:encoded" do
+ data = File.read!("test/fixtures/rss2/shadowfacts.xml")
+ {true, parsed_data} = RSS2.accepts(data, "text/xml")
+ assert {:ok, %FeedParser.Feed{} = feed} = RSS2.parse_feed(parsed_data)
+ assert [%FeedParser.Item{} = item] = feed.items
+
+ assert item.content ==
+ "So, about six months ago I decided I wanted to rewrite my perfectly-working blog backend in Rust. Why? Because I was bored and wanted an excuse to use Rust more.
"
+ end
end