diff options
| author | John Conway <john.a.conway@gmail.com> | 2019-05-17 15:36:59 +0100 |
|---|---|---|
| committer | John Conway <john.a.conway@gmail.com> | 2019-05-17 15:36:59 +0100 |
| commit | e6affb91d689161971d73a70f22400e32a14324a (patch) | |
| tree | 0621b1fa4c8a37ec5579514aaef2925c6a8f5ea1 | |
| parent | 289cd01606adcdf4803307c8fc761c7bdc5a84f7 (diff) | |
| download | feed-nim-e6affb91d689161971d73a70f22400e32a14324a.tar.gz feed-nim-e6affb91d689161971d73a70f22400e32a14324a.zip | |
Pack structure (capitalised FeedNim)
| -rw-r--r-- | FeedNim.nimble | 2 | ||||
| -rw-r--r-- | src/FeedNim/wrangler.nim | 85 | ||||
| -rw-r--r-- | src/feednim/atom.nim | 4 | ||||
| -rw-r--r-- | src/feednim/jsonfeed.nim | 2 | ||||
| -rwxr-xr-x | tests/test_atom | bin | 707272 -> 707128 bytes | |||
| -rw-r--r-- | tests/test_atom.nim | 4 | ||||
| -rwxr-xr-x | tests/test_jsonfeed | bin | 607872 -> 612136 bytes | |||
| -rwxr-xr-x | tests/test_rss | bin | 470960 -> 470952 bytes |
8 files changed, 91 insertions, 6 deletions
diff --git a/FeedNim.nimble b/FeedNim.nimble index 3a2ed49..1377e06 100644 --- a/FeedNim.nimble +++ b/FeedNim.nimble @@ -1,6 +1,6 @@ # Package -version = "0.2.0" +version = "0.2.1" author = "John Conway" description = "An Atom, RSS, and JSONfeed parser" license = "MIT" diff --git a/src/FeedNim/wrangler.nim b/src/FeedNim/wrangler.nim new file mode 100644 index 0000000..2afc99c --- /dev/null +++ b/src/FeedNim/wrangler.nim @@ -0,0 +1,85 @@ +import + strUtils + +import + atom, + jsonfeed, + rss + +type + Feed = ref object of JSONFeed + +func wrangleAtomItems( xml_feed:( Atom | Rss ) ):seq[JsonFeedItem] = + var items: seq[JsonFeedItem] = @[] + for atom_item in xml_feed.entries: + + var item = JsonFeedItem() + + item.author.name = atom_item.author.name + item.author.url = atom_item.author.uri + item.title = atom_item.title + + if atom_item.content == "": + item.content_text = atom_item.summary + else: + if atom_item.content.textType == "html" or atom_item.content.textType == "xhtml": + item.content_html = atom_item.content + else: item.content_text = atom_item.content + + item.date_published = atom_item.published + item.date_modified = atom_item.updated + + for category in atom_item.categories: + item.tags.add( category.term ) + + item.attachments[0].url = atom_item.link.href + item.attachments[0].mime_type = atom_item.link.linktype # WONT WORK! + item.attachments[0].title = atom_item.link.title + item.attachments[0].size_in_bytes = atom_item.link.length + + items.add( item ) + + return items + +func wrangleAtom( xml_feed: Atom ): Feed = + var feed = Feed() + + feed.author.name = xml_feed.author.name + feed.author.url = xml_feed.author.uri + feed.author.avatar = xml_feed.icon # Munged! + feed.title = xml_feed.title + feed.home_page_url = xml_feed.link.href # MAYBE NOT + feed.feed_url = xml_feed.link.href + feed.description = xml_feed.subtitle + feed.icon = xml_feed.icon + feed.favicon = xml_feed.icon + feed.items = xml_feed.wrangleAtomItems() + + return feed + +func wrangleRss( xml_feed: Rss ): Feed = + var feed = Feed() + + func rssAuthor( feild:string ): JSONFeedAuthor = + var author = JSONFeedAuthor() + var name = feild.split(" ")[1] # RSS author feilds look like this remember: + if name.len > 3: # <element>joe@bloggs.com (Joe Bloggs)</element> + author.name = name.substr[1 .. name.len()-2] + return author + + feed.author = rssAuthor( xml_feed.managingEditor ) # Munged! + feed.title = xml_feed.title + feed.home_page_url = xml_feed.link.link # MAYBE NOT + feed.feed_url = xml_feed.link.href + feed.description = xml_feed.description + feed.icon = xml_feed.image.url # Munged! + feed.items = xml_feed.wrangleAtomItems() + + return feed + + +proc wrangle*( xml_feed:( Atom | Rss ) ):Feed = + if xml_feed.kind == Atom: + return wrangleAtom( xml_feed ) + elif xml_feed.kind == Rss: + return wrangleRss( xml_feed )
\ No newline at end of file diff --git a/src/feednim/atom.nim b/src/feednim/atom.nim index bbdcbe9..ee60672 100644 --- a/src/feednim/atom.nim +++ b/src/feednim/atom.nim @@ -58,7 +58,7 @@ type linktype*: string hreflang*: string title*: string - length*: string + length*: int AtomEntry* = ref object of AtomCommon id*: string # Required Atom field @@ -137,7 +137,7 @@ func parseLink ( node: XmlNode ): AtomLink = if node.attr("type") != "": link.linktype = node.attr("type") if node.attr("hreflang") != "": link.hreflang = node.attr("hreflang") if node.attr("title") != "": link.title = node.attr("title") - if node.attr("length") != "": link.length = node.attr("length") + if node.attr("length") != "": link.length = node.attr("length").parseInt() return link func parseText ( node: XmlNode ): string = diff --git a/src/feednim/jsonfeed.nim b/src/feednim/jsonfeed.nim index e6562a2..e523778 100644 --- a/src/feednim/jsonfeed.nim +++ b/src/feednim/jsonfeed.nim @@ -10,7 +10,7 @@ import streams import sugar type - JSONFeed* = object + JSONFeed* = ref object of RootObj author*: JSONFeedAuthor version*: string title*: string diff --git a/tests/test_atom b/tests/test_atom Binary files differindex a8473ff..e1e300a 100755 --- a/tests/test_atom +++ b/tests/test_atom diff --git a/tests/test_atom.nim b/tests/test_atom.nim index 88b6916..3b8a4c7 100644 --- a/tests/test_atom.nim +++ b/tests/test_atom.nim @@ -45,7 +45,7 @@ test "Read Valid Atom Feed": check feed.link.linktype == "application/xml+atom" check feed.link.hreflang == "en-GB" check feed.link.title == "Bloggs's Planes Trains and Automobiles" - check feed.link.length == "1000000" + check feed.link.length == 1000000 check feed.logo == "http://joe.bloggs/logo.jpeg" check feed.rights == "Copyright Joe and Jane Bloggs" @@ -97,7 +97,7 @@ test "Read Valid Atom Feed": check feed.entries[1].link.linktype == "text/html" check feed.entries[1].link.hreflang == "en-GB" check feed.entries[1].link.title == "Trains!" - check feed.entries[1].link.length == "1000000" + check feed.entries[1].link.length == 1000000 check feed.entries[1].published == "2003-12-13T18:20:02Z" check feed.entries[1].rights == "Copyright Jane Bloggs" check feed.entries[1].summary == "Trains!" diff --git a/tests/test_jsonfeed b/tests/test_jsonfeed Binary files differindex 6779f58..6e809a1 100755 --- a/tests/test_jsonfeed +++ b/tests/test_jsonfeed diff --git a/tests/test_rss b/tests/test_rss Binary files differindex ed877b2..acdb45f 100755 --- a/tests/test_rss +++ b/tests/test_rss |
