Skip to content

jameslawler/react-native-rss-parser

Repository files navigation

react-native-rss-parser

React Native compatible RSS parser

npm version Build Status

Parse RSS data into a simple object structure. Currently supports;

  • RSS 2.0 specification
  • Atom 1.0 specification
  • Itunes elements for both RSS 2.0 and Atom 1.0 feeds

Installation

npm install react-native-rss-parser --save

Usage example

import * as rssParser from 'react-native-rss-parser';

return fetch('http://www.nasa.gov/rss/dyn/breaking_news.rss')
  .then((response) => response.text())
  .then((responseData) => rssParser.parse(responseData))
  .then((rss) => {
    console.log(rss.title);
    console.log(rss.items.length);
  });

Parsed model

{
  type: undefined,            // either `rss-v2` or `atom-v1`
  title: undefined,           // title of the channel
  links: [{
    url: undefined,           // url of the channel
    rel: undefined            // type of url (eg. alternate)
  }],
  description: undefined,     // description of the channel
  language: undefined,        // language of the channel in `en-us`
  copyright: undefined,       // copyright information about the channel
  authors: [{
    name: undefined           // channel author names
  }],
  lastUpdated: undefined,     // last updated date for the channel
  lastPublished: undefined,   // last published date for the channel
  categories: [{
    name: undefined           // categories the channel belong too
  }],
  image: {
    url: undefined,           // channel image url
    title: undefined,         // channel image title
    description: undefined,   // channel image description
    width: undefined,         // channel image width (pixels)
    height: undefined         // channel image height (pixels)
  },
  itunes: {                   // itunes specific channel information
    author: [{
      name: undefined         // channel author names
    }],
    block: undefined,         // if `yes` then the entire podcast isn't shown in iTunes directory
    categories: [{
      name: undefined,        // channel category names
      subCategories:[{
        name: undefined       // sub category names
      }]
    }],
    image: undefined,         // channel image url
    explicit: undefined,      // `yes`/`no` to indicate if channel contains explicit content
    complete: undefined,      // `yes` indicates the feed won't publish any new items in the future
    newFeedUrl: undefined,    // a url pointing to the new feed location
    owner: {
      name: undefined,        // owner name of the channel
      email: undefined,       // owner email address of the channel
    },
    subtitle: undefined,      // sub title of the channel
    summary: undefined,       // summary of the channel
  },
  items: [{                   // list of items in the feed
    id: undefined,            // item id
    title: undefined,         // item title
    imageUrl: undefined,      // item image url
    links: [{
      url: undefined,         // item link url
      rel: undefined          // type of item link
    }],
    description: undefined,   // item description
    content: undefined,       // item HTML content
    categories: [{
      name: undefined         // categories the item belongs too
    }],
    authors: [{
      name: undefined         // item author names
    }],
    published: undefined,     // item published date
    enclosures: [{
      url: undefined,         // item media url
      length: undefined,      // item media length (bytes)
      mimeType: undefined     // item media mime type (eg audio/mpeg)
    }],
    itunes: {                 // itunes specific item information
      authors: [{
        name: undefined,      // item author names
      }],
      block: undefined,       // `yes` indicates the item won't be displayed in the iTunes directory
      duration: undefined,    // HH:MM:SS length of the item
      explicit: undefined,    // `yes`/`no` to indicate if item contains explicit content
      image: undefined,       // image url for the item
      isClosedCaptioned: undefined, // `yes` indicates if the item contains closed captioning
      order: undefined,       // item order number
      subtitle: undefined,    // item subtitle
      summary: undefined,     // item summary
    }
  }]
}

Model mappings

Top Level elements

Parsed Value RSS v2.0 Atom v1.0
title title title
links link link
description description subtitle
language language
copyright copyright rights
authors managingEditor author
published pubDate published
updated lastBuildDate updated
categories category category
image image logo
items item entry

Item / Entry Level elements

Parsed Value RSS v2.0 Atom v1.0
id guid id
title title title
imageUrl icon
links link link
description description summary
content content:encoded content
categories category / dc:subject category
authors author / dc:creator contributor
published pubDate / dc:date published
enclosures enclosures link

CHANGELOG

1.5.1

  • Bug Fix: _this.getElementTextContentArray is not a function issue #16 (thanks to julianbragachi)

1.5.0

  • Updated xmldom to version 0.3.0
  • Change tests to use Jest to ensure refactoring did not break anything (using snapshot tests)
  • Updated entire codebase to use up-to-date JavaScript syntax (arrow functions, const & let instead of var)
  • Bug Fix: Atom v1 should return published date when no updated date available (thanks to Serra19)

Development setup

Clone this project from GitHub

npm install
npm test

Bugs / feature requests

If you find any bugs or have a feature request, please create an issue in GitHub.

Contributing

  1. Fork it (https://github.com/jameslawler/react-native-rss-parser)
  2. Create your feature branch (git checkout -b feature/fooBar)
  3. Commit your changes (git commit -am 'Add some fooBar')
  4. Push to the branch (git push origin feature/fooBar)
  5. Create a new Pull Request

License

Distributed under the MIT license. See LICENSE for more information.

About

React Native compatible package to parse RSS feeds

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published