Files
EWF/library/text/parser/feed/src/atom/atom_feed_parser.e
Jocelyn Fiat a928f27b1a Updated or added timestamp to obsolete and fixme messages.
Fixed ecf file exclusion for .svn and .git .
Cosmetic changed.
2017-05-12 14:31:35 +02:00

117 lines
3.4 KiB
Plaintext

note
description: "[
ATOM Parser.
Warning: the implementation may not support the full ATOM specification.
]"
date: "$Date$"
revision: "$Revision$"
EIS: "name=ATOM at wikipedia", "protocol=URI", "src=https://en.wikipedia.org/wiki/Atom_(standard)"
EIS: "name=RSS at wikipedia", "protocol=URI", "src=https://en.wikipedia.org/wiki/RSS"
EIS: "name=ATOM 1.0 RFC4287", "protocol=URI", "src=https://tools.ietf.org/html/rfc4287"
class
ATOM_FEED_PARSER
inherit
FEED_PARSER
feature -- Access
name: STRING = "atom1"
-- Associated name.
is_detected (xdoc: XML_DOCUMENT): BOOLEAN
-- Is `xdoc' an ATOM feed representation?
do
Result := attached {XML_ELEMENT} xdoc.element_by_name ("feed") as x_feed and then
(
not attached xml_attribute_text (x_feed, "xmlns") as l_xmlns
or else l_xmlns.same_string ("http://www.w3.org/2005/Atom")
)
end
feed (xdoc: XML_DOCUMENT): detachable FEED
-- Feed from `xdoc' XML document.
local
l_title: READABLE_STRING_32
x_entry, x_link: detachable XML_ELEMENT
e: FEED_ITEM
l_author: FEED_AUTHOR
lnk: FEED_LINK
s: STRING_32
do
if
attached xdoc.element_by_name ("feed") as x_feed and then
-- (not attached xml_attribute_text (x_feed, "xmlns") as l_xmlns or else l_xmlns.same_string ("http://www.w3.org/2005/Atom"))
attached xml_element_text (x_feed, "title") as t
then
l_title := t
create Result.make (l_title)
Result.set_description (xml_element_text (x_feed, "subtitle"), "plain")
Result.set_id (xml_element_text (x_feed, "id"))
Result.set_date_with_text (xml_element_text (x_feed, "updated"))
if attached links_from_xml (x_feed, "link") as l_links then
across
l_links as link_ic
loop
lnk := link_ic.item
Result.links.force (lnk, lnk.relation)
end
end
if attached x_feed.elements_by_name ("entry") as x_entries then
across
x_entries as ic
loop
x_entry := ic.item
if attached xml_element_text (x_entry, "title") as e_title then
create e.make (e_title)
e.set_description (xml_element_text (x_entry, "summary"))
e.set_id (xml_element_text (x_entry, "id"))
e.set_date_with_text (xml_element_text (x_entry, "updated"))
if attached links_from_xml (x_entry, "link") as l_links then
across
l_links as link_ic
loop
lnk := link_ic.item
e.links.force (lnk, lnk.relation)
end
end
if attached x_entry.element_by_name ("content") as x_content then
e.set_content (xml_element_code (x_content), xml_attribute_text (x_content, "type"))
end
if attached x_entry.element_by_name ("author") as x_author then
if attached x_author.element_by_name ("name") as x_name and then
attached x_name.text as l_author_name
then
create l_author.make (l_author_name)
if attached x_author.element_by_name ("email") as x_email then
l_author.set_email (x_email.text)
end
e.set_author (l_author)
end
end
-- Optional "category"
if attached x_entry.elements_by_name ("category") as x_categories then
across
x_categories as cats_ic
loop
if attached xml_attribute_text (cats_ic.item, "term") as l_term then
e.set_category (l_term)
end
end
end
Result.extend (e)
end
end
end
end
end
end