Add Feed last_updated
This commit is contained in:
parent
e0dd659436
commit
79fafb99c6
|
@ -3,11 +3,12 @@ defmodule FeedParser.Feed do
|
|||
A feed. Contains some information about the site it originates from and a list of items it contains.
|
||||
"""
|
||||
|
||||
defstruct [:site_url, :title, :image_url, :items]
|
||||
defstruct [:site_url, :title, :image_url, :last_updated, :items]
|
||||
|
||||
@type t() :: %__MODULE__{
|
||||
site_url: String.t(),
|
||||
title: String.t(),
|
||||
last_updated: DateTime.t() | nil,
|
||||
image_url: String.t() | nil,
|
||||
items: [FeedParser.Item.t()]
|
||||
}
|
||||
|
|
|
@ -34,6 +34,14 @@ defmodule FeedParser.Parser.Atom do
|
|||
link = attr('/feed/link/@href', feed)
|
||||
icon = text('/feed/icon/text()', feed)
|
||||
|
||||
updated =
|
||||
text('/feed/updated/text()', feed)
|
||||
|> Timex.parse("{ISO:Extended}")
|
||||
|> case do
|
||||
{:ok, date} -> date
|
||||
_ -> nil
|
||||
end
|
||||
|
||||
items =
|
||||
:xmerl_xpath.string('/feed/entry', feed)
|
||||
|> Enum.map(fn entry ->
|
||||
|
@ -65,6 +73,7 @@ defmodule FeedParser.Parser.Atom do
|
|||
site_url: link,
|
||||
title: title,
|
||||
image_url: icon,
|
||||
last_updated: updated,
|
||||
items: items
|
||||
}}
|
||||
end
|
||||
|
|
|
@ -59,6 +59,7 @@ defmodule FeedParser.Parser.JSONFeed do
|
|||
site_url: home_page_url,
|
||||
title: title,
|
||||
image_url: icon,
|
||||
last_updated: nil,
|
||||
items: items
|
||||
}}
|
||||
end
|
||||
|
|
|
@ -35,6 +35,14 @@ defmodule FeedParser.Parser.RSS2 do
|
|||
link = text('/channel/link/text()', channel)
|
||||
image = text('/channel/image/url/text()', channel)
|
||||
|
||||
last_updated =
|
||||
text('/channel/lastBuildDate/text()', channel)
|
||||
|> Timex.parse("{RFC1123}")
|
||||
|> case do
|
||||
{:ok, date} -> date
|
||||
_ -> nil
|
||||
end
|
||||
|
||||
items =
|
||||
:xmerl_xpath.string('/channel/item', channel)
|
||||
|> Enum.map(fn item ->
|
||||
|
@ -65,6 +73,7 @@ defmodule FeedParser.Parser.RSS2 do
|
|||
site_url: link,
|
||||
title: title,
|
||||
image_url: image,
|
||||
last_updated: last_updated,
|
||||
items: items
|
||||
}}
|
||||
end
|
||||
|
|
|
@ -23,6 +23,14 @@ defmodule FeedParser.Parser.RSSInJSON do
|
|||
title = channel["title"]
|
||||
link = channel["link"]
|
||||
|
||||
last_updated =
|
||||
channel["lastBuildDate"]
|
||||
|> Timex.parse("{RFC1123}")
|
||||
|> case do
|
||||
{:ok, date} -> date
|
||||
_ -> nil
|
||||
end
|
||||
|
||||
image =
|
||||
case channel do
|
||||
%{"image" => %{"url" => url}} -> url
|
||||
|
@ -59,6 +67,7 @@ defmodule FeedParser.Parser.RSSInJSON do
|
|||
site_url: link,
|
||||
title: title,
|
||||
image_url: image,
|
||||
last_updated: last_updated,
|
||||
items: items
|
||||
}}
|
||||
end
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
<link>http://liftoff.msfc.nasa.gov/</link>
|
||||
<description>Liftoff to Space Exploration.</description>
|
||||
<language>en-us</language>
|
||||
<pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
|
||||
<lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
|
||||
<pubDate>Tue, 10 Jun 2003 04:00:00 UTC</pubDate>
|
||||
<lastBuildDate>Tue, 10 Jun 2003 09:41:01 UTC</lastBuildDate>
|
||||
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
|
||||
<generator>Weblog Editor 2.0</generator>
|
||||
<managingEditor>editor@example.com</managingEditor>
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
"title": "Scripting News",
|
||||
"link": "http://scripting.com/",
|
||||
"description": "Scripting News, the weblog started in 1994 that bootstrapped the blogging revolution. 🚀",
|
||||
"pubDate": "Sat, 31 Aug 2019 18:04:35 GMT",
|
||||
"lastBuildDate": "Sat, 31 Aug 2019 22:49:49 GMT",
|
||||
"pubDate": "Sat, 31 Aug 2019 18:04:35 UTC",
|
||||
"lastBuildDate": "Sat, 31 Aug 2019 22:49:49 UTC",
|
||||
"language": "en-us",
|
||||
"copyright": "© 1994-2019 <a href=\"http://davewiner.com/\">Dave Winer</a>.",
|
||||
"generator": "oldSchool v0.5.29",
|
||||
|
@ -55,4 +55,4 @@
|
|||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ defmodule FeedParser.Parser.AtomTest do
|
|||
assert {:ok, %FeedParser.Feed{} = feed} = Atom.parse_feed(parsed_data)
|
||||
assert feed.site_url == "http://example.org/"
|
||||
assert feed.title == "Example Feed"
|
||||
assert feed.last_updated == ~U[2003-12-13 18:30:02Z]
|
||||
assert [%FeedParser.Item{} = item] = feed.items
|
||||
assert item.guid == "urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a"
|
||||
assert item.title == "Atom-Powered Robots Run Amok"
|
||||
|
|
|
@ -14,7 +14,7 @@ defmodule FeedParser.Parser.JSONFeedTest do
|
|||
assert {:ok, %FeedParser.Feed{} = feed} = JSONFeed.parse_feed(parsed_data)
|
||||
assert feed.title == "My Example Feed"
|
||||
assert feed.site_url == "https://example.org/"
|
||||
IO.inspect(feed.items)
|
||||
assert feed.last_updated == nil
|
||||
assert [%FeedParser.Item{} = item2, %FeedParser.Item{} = item1] = feed.items
|
||||
assert item2.guid == "2"
|
||||
assert item2.content == "This is a second item."
|
||||
|
|
|
@ -15,6 +15,7 @@ defmodule FeedParser.Parser.RSS2Test do
|
|||
assert {:ok, %FeedParser.Feed{} = feed} = RSS2.parse_feed(parsed_data)
|
||||
assert feed.title == "Liftoff News"
|
||||
assert feed.site_url == "http://liftoff.msfc.nasa.gov/"
|
||||
assert feed.last_updated == ~U[2003-06-10 09:41:01Z]
|
||||
assert [%FeedParser.Item{} = item] = feed.items
|
||||
assert item.title == "Star City"
|
||||
assert item.url == "http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp"
|
||||
|
|
|
@ -14,6 +14,7 @@ defmodule FeedParser.Parser.RSSInJSONTest do
|
|||
assert {:ok, %FeedParser.Feed{} = feed} = RSSInJSON.parse_feed(parsed_data)
|
||||
assert feed.title == "Scripting News"
|
||||
assert feed.site_url == "http://scripting.com/"
|
||||
assert feed.last_updated == ~U[2019-08-31 22:49:49Z]
|
||||
assert [%FeedParser.Item{} = item] = feed.items
|
||||
assert item.url == "http://scripting.com/2019/08/31.html#a151142"
|
||||
assert item.guid == "http://scripting.com/2019/08/31.html#a151142"
|
||||
|
|
Loading…
Reference in New Issue