diff --git a/src/feed.cpp b/src/feed.cpp index 57201674eddf4e901740a224c131cce8ab9c691c..56a539adc92cfe4e2c2721c905aedd78f8eec384 100644 --- a/src/feed.cpp +++ b/src/feed.cpp @@ -7,6 +7,10 @@ bool Feed::verify_feed() { type = FeedType::RSS; return true; } + if (root_name == "rdf:rdf") { + type = FeedType::RDF; + return true; + } if (root_name == "feed") { type = FeedType::ATOM; return true; @@ -16,7 +20,7 @@ bool Feed::verify_feed() { } xml_node Feed::get_feed_node() { - if (type == FeedType::RSS) { + if (type == FeedType::RSS || type == FeedType::RDF) { return doc.document_element().child("channel"); } return doc.document_element(); @@ -96,6 +100,20 @@ void Feed::extract_feed_data() { } void Feed::extract_feed_items() { + if (type == FeedType::RDF) { + xml_node item = feed_node.child("items").child("rdf:Seq").child( + "rdf:li"); + while (item) { + std::string url = item.attribute("rdf:resource").value(); + xml_node item_info = doc.document_element().find_child_by_attribute( + "item", "rdf:about", url.c_str()); + if (item_info) { + feed_items.push_back(FeedItem(item_info, url)); + } + item = item.next_sibling("rdf:li"); + } + return; + } std::string item_tag = "item"; xml_node first_item = feed_node.child(item_tag.c_str()); if (!first_item) { diff --git a/src/feed.hpp b/src/feed.hpp index a6e9dd186fe6c788a9103f81a71ddfee25ca2f35..5bd94b6dd85d7419c0b86f0fac746bfae9e3e728 100644 --- a/src/feed.hpp +++ b/src/feed.hpp @@ -63,7 +63,8 @@ private: static inline const std::vector __LAST_UPDATE_PARAMS{ {ExtractionParam::ParamType::CHILD, {"updated"}}, {ExtractionParam::ParamType::CHILD, {"lastBuildDate"}}, - {ExtractionParam::ParamType::CHILD, {"pubDate"}} + {ExtractionParam::ParamType::CHILD, {"pubDate"}}, + {ExtractionParam::ParamType::CHILD, {"dc:date"}} }; /** * Tries to extract and return the last update date and time, alternatively diff --git a/src/feed_type.hpp b/src/feed_type.hpp index d1039f6fcaff17aa37be6bf7b6c2ad3231baa633..e1410cb9caa3bec651825d7344726464d02f5abc 100644 --- a/src/feed_type.hpp +++ b/src/feed_type.hpp @@ -1,5 +1,5 @@ #pragma once enum FeedType { - INVALID, RSS, ATOM + INVALID, RSS, ATOM, RDF };