Skip to content
/ unread Public

A package for parsing RSS and Atom feeds

License

Notifications You must be signed in to change notification settings

z0al/unread

Folders and files

NameName
Last commit message
Last commit date
Aug 17, 2021
Sep 9, 2020
Aug 14, 2021
Jul 9, 2019
Feb 23, 2019
Sep 9, 2020
Feb 25, 2019
Jul 11, 2019
Nov 8, 2021
Jul 9, 2019

Repository files navigation

Unread

All Contributors Build Bundlephobia

NPM

A package for parsing RSS 2.0, Atom 1.0. Works on both Node.js and the browser.

Features

  • Small footprint
  • Query attributes helper (see below)
  • Cross-platform works on browser and Node.js
  • TypeScript ready

Installation

npm add unread

Usage

import { parse } from 'unread';

const res = await fetch('https://overreacted.io/rss.xml');
const rss = await res.text();

const output = await parse(rss);

// We support common attributes
const { feed, items } = output;
console.log(feed.title());
console.log(feed.feedLink());

// And you can also query custom ones (as long as we support that namespace)
console.log(item[0].get(['author', 'dc:creator'])); // returns first match or undefined
console.log(item[0].getMany(['atom:link[ref=enclosure]'])); // Array of nodes

Supported namespaces

We support the followings XML namespaces:

  • http://www.w3.org/2005/Atom (atom)
  • http://purl.org/rss/1.0/modules/content/ (content)
  • http://purl.org/dc/elements/1.1/ (dc)
  • http://purl.org/dc/elements/1.0/ (dc)
  • http://www.itunes.com/dtds/podcast-1.0.dtd (itunes)
  • http://search.yahoo.com/mrss/ (media)
  • http://www.w3.org/1999/xhtml (xhtml)
  • http://www.w3.org/XML/1998/namespace (xml)

Mapping

Feed

Helper RSS Atom
id() /feed/id
title() /rss/channel/title
/rss/channel/dc:title
/feed/title
description() /rss/channel/description
/rss/channel/itunes:subtitle
/feed/subtitle
links() /rss/channel/link /feed/link/@href
feedURL() /rss/channel/atom:link[@rel="self"]/@href /feed/link[@rel="self"]/@href
updated() /rss/channel/lastBuildDate
/rss/channel/dc:date
/feed/updated
published() /rss/channel/pubDate
language() /rss/channel/language
/rss/channel/dc:language
/feed/@xml:lang
image() /rss/channel/image
/rss/channel/itunes:image
/feed/logo
generator() /rss/channel/generator /feed/generator

Item

Helper RSS Atom
id() /rss/channel/item/guid /feed/entry/id
title() /rss/channel/item/title
/rss/channel/item/dc:title
/feed/entry/title
description() /rss/channel/item/description
/rss/channel/item/dc:description
/feed/entry/summary
content() /rss/channel/item/content:encoded /feed/entry/content
links() /rss/channel/item/link /feed/entry/@href
updated() /rss/channel/item/dc:date /feed/entry/updated
published() /rss/channel/item/pubDate
/rss/channel/item/dc:date
/feed/entry/published
image() /rss/channel/item/media:thumbnail
enclosures() /rss/channel/item/enclosure /feed/entry/link[@rel=”enclosure”]

Contributors

Thanks goes to these wonderful people (emoji key):

Ahmed T. Ali
Ahmed T. Ali

💻 📖 🚧 ⚠️

This project follows the all-contributors specification. Contributions of any kind welcome!

Credits

License

MIT © Ahmed T. Ali