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