Skip to content

busbud/feedhandler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

feedhandler

Circle CI

An extensible RSS/RDF/Atom feed parser for use with html-parser2.

Example

Assuming the following RSS, with a custom my:tag you want to extract into your object model

<?xml version="1.0"?>
<rss version="2.0" xmlns:my="http://example.com/my">
   <channel>
      <title>Liftoff News</title>
      <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>
      <item>
         <title>Star City</title>
         <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
         <description>How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's &lt;a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm"&gt;Star City&lt;/a&gt;.</description>
         <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
         <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
         <!-- custom extension to RSS payload -->
         <my:tag>So glad I could sneak this new content in</my:tag>
      </item>
   </channel>
</rss>

You can extract the value of the custom tag using the extensions property.

var htmlparser2 = require('htmlparser2');
var FeedHandler = require('feedhandler');

function parse(xml, cb) {
  var handler = new FeedHandler(cb, {
    extensions: [
      {input: "my:tag", output: "my_tag"}
    ]
  });

  try {
    new htmlparser2.Parser(handler, {xmlMode: true}).parseComplete(xml);
  } catch (ex) {
    cb(ex);
  }
}

module.exports = parse;

Running parse against the xml sample will return the following object:

{
  "type": "rss",
  "id": "",
  "title": "Liftoff News",
  "link": "http://liftoff.msfc.nasa.gov/",
  "description": "Liftoff to Space Exploration.",
  "updated": "2003-06-10T09:41:01.000Z",
  "items": [
    {
      "id": "http://liftoff.msfc.nasa.gov/2003/06/03.html#item573",
      "title": "Star City",
      "link": "http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp",
      "description": "How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's &lt;a href=\"http://howe.iki.rssi.ru/GCTC/gctc_e.htm\"&gt;Star City&lt;/a&gt;.",
      "pubDate": "2003-06-03T09:39:21.000Z",
      "my_tag": "So glad I could sneak this new content in"
    }
  ]
}