mirror of
https://github.com/LightAir/turbo-rss.git
synced 2026-02-04 03:56:19 +00:00
added GeoRSS support thanks to @fredzilla. Fixes #15.
This commit is contained in:
28
lib/rss.js
28
lib/rss.js
@@ -24,8 +24,8 @@ function RSS (options, items) {
|
||||
this.managingEditor = options.managingEditor;
|
||||
this.webMaster = options.webMaster;
|
||||
this.ttl = options.ttl;
|
||||
//option to return feed as GeoRSS
|
||||
this.georss = options.georss || false;
|
||||
//option to return feed as GeoRSS is set automatically if feed.lat/long is used
|
||||
this.geoRSS = options.geoRSS || false;
|
||||
this.items = items || [];
|
||||
|
||||
this.item = function (options) {
|
||||
@@ -39,7 +39,7 @@ function RSS (options, items) {
|
||||
author: options.author,
|
||||
date: options.date,
|
||||
lat: options.lat,
|
||||
lng: options.lng,
|
||||
long: options.long,
|
||||
enclosure: options.enclosure || false
|
||||
};
|
||||
|
||||
@@ -61,7 +61,6 @@ function ifTruePush(bool, array, data) {
|
||||
}
|
||||
|
||||
function generateXML (data){
|
||||
// todo: xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
|
||||
|
||||
var channel = [];
|
||||
channel.push({ title: { _cdata: data.title } });
|
||||
@@ -105,11 +104,10 @@ function generateXML (data){
|
||||
ifTruePush(item.author || data.author, item_values, { 'dc:creator': { _cdata: item.author || data.author } });
|
||||
ifTruePush(item.date, item_values, { pubDate: new Date(item.date).toGMTString() });
|
||||
|
||||
//Add lat and long if GeoRSS is true.
|
||||
if(data.georss){
|
||||
//Set GeoRSS to true if lat and long are set
|
||||
data.geoRSS = data.geoRSS || (item.lat && item.long);
|
||||
ifTruePush(item.lat, item_values, {'geo:lat': item.lat});
|
||||
ifTruePush(item.lng, item_values, {'geo:long': item.lng});
|
||||
}
|
||||
ifTruePush(item.long, item_values, {'geo:long': item.long});
|
||||
|
||||
if( item.enclosure && item.enclosure.url ) {
|
||||
if( item.enclosure.file ) {
|
||||
@@ -144,18 +142,20 @@ function generateXML (data){
|
||||
'xmlns:dc': 'http://purl.org/dc/elements/1.1/',
|
||||
'xmlns:content': 'http://purl.org/rss/1.0/modules/content/',
|
||||
'xmlns:atom': 'http://www.w3.org/2005/Atom',
|
||||
'version': '2.0'
|
||||
version: '2.0'
|
||||
};
|
||||
|
||||
//only add namespace if GeoRSS is true
|
||||
if(data.georss){
|
||||
if(data.geoRSS){
|
||||
_attr['xmlns:geo'] = 'http://www.w3.org/2003/01/geo/wgs84_pos#';
|
||||
}
|
||||
|
||||
return { rss: [
|
||||
{ '_attr': _attr },
|
||||
{ 'channel': channel }
|
||||
] };
|
||||
return {
|
||||
rss: [
|
||||
{ _attr: _attr },
|
||||
{ channel: channel }
|
||||
]
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = RSS;
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
"Michael R. Lange",
|
||||
"Victor Jonsson",
|
||||
"Danny Graham",
|
||||
"Patrick Garman <contact@pmgarman.me>"
|
||||
"Patrick Garman <contact@pmgarman.me>",
|
||||
"Fred Morstatter"
|
||||
],
|
||||
"repository":
|
||||
{
|
||||
@@ -24,8 +25,8 @@
|
||||
},
|
||||
"dependencies":
|
||||
{
|
||||
"xml": ">= 0.0.4",
|
||||
"mime": ">= 1.2.9"
|
||||
"xml": "~0.0.4",
|
||||
"mime": "~1.2.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"chai": "~1.7.2",
|
||||
|
||||
16
readme.md
16
readme.md
@@ -2,7 +2,7 @@
|
||||
|
||||
[](https://nodei.co/npm/rss/)
|
||||
|
||||
> Fast and simple RSS generator/builder for Node projects.
|
||||
> Fast and simple RSS generator/builder for Node projects. Supports enclosures and GeoRSS.
|
||||
|
||||
## Install
|
||||
|
||||
@@ -34,7 +34,6 @@ var feed = new RSS(feedOptions);
|
||||
* `language` _optional_ **string** The language of the content of this feed.
|
||||
* `categories` _optional_ **array of strings** One or more categories this feed belongs to.
|
||||
* `pubDate` _optional_ **Date object or date string** The publication date for content in the feed
|
||||
* `georss` _optional_ **boolean** Whether to make the feed a GeoRSS feed. Default is `false`.
|
||||
* `ttl` _optional_ **integer** Number of minutes feed can be cached before refreshing from source.
|
||||
|
||||
### Add items to a feed
|
||||
@@ -61,8 +60,8 @@ feed.item(itemOptions);
|
||||
* `date` **Date object or date string** The date and time of when the item was created. Feed
|
||||
readers use this to determine the sort order. Some readers will also use it to determine
|
||||
if the content should be presented as unread.
|
||||
* `lat` _required if is a GeoRSS feed_ **number** The latitude coordinate of the item.
|
||||
* `lng` _required if is a GeoRSS feed_ **number** The longitude coordinate of the item.
|
||||
* `lat` _optional_ **number** The latitude coordinate of the item.
|
||||
* `long` _optional_ **number** The longitude coordinate of the item.
|
||||
|
||||
#### Feed XML
|
||||
|
||||
@@ -95,9 +94,8 @@ var feed = new RSS({
|
||||
language: 'en',
|
||||
categories: ['Category 1','Category 2','Category 3'],
|
||||
pubDate: 'May 20, 2012 04:00:00 GMT',
|
||||
georss: true, //set this flag if you wish for the feed to be returned in GeoRSS. A lat/lng field will be expected for each item.
|
||||
ttl: '60'
|
||||
});
|
||||
});
|
||||
|
||||
/* loop over data and add to feed */
|
||||
feed.item({
|
||||
@@ -108,9 +106,9 @@ feed.item({
|
||||
categories: ['Category 1','Category 2','Category 3','Category 4'], // optional - array of item categories
|
||||
author: 'Guest Author', // optional - defaults to feed author property
|
||||
date: 'May 27, 2012' // any format that js Date can parse.
|
||||
// lat: 33.417974, //latitude field. Provide if georss is true in the feed setup.
|
||||
// lng: -111.933231, //longitude field. Provide if georss is true in the feed setup.
|
||||
enclosure : {url:'...', file:'path-to-file'} // optional
|
||||
lat: 33.417974, //optional latitude field for GeoRSS
|
||||
long: -111.933231, //optional longitude field for GeoRSS
|
||||
enclosure : {url:'...', file:'path-to-file'} // optional enclosure
|
||||
});
|
||||
|
||||
// cache the xml to send to clients
|
||||
|
||||
@@ -72,7 +72,6 @@ describe('rss module', function(done) {
|
||||
var expectedResult = '<?xml version="1.0" encoding="UTF-8"?>\n<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[title]]></title><description><![CDATA[description]]></description><link>http://example.com</link><image><url>http://example.com/icon.png</url><title>title</title><link>http://example.com</link></image><generator>Example Generator</generator><lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate><atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/><author><![CDATA[Dylan Greene]]></author><pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate><copyright><![CDATA[2013 Dylan Green]]></copyright><language><![CDATA[en]]></language><managingEditor><![CDATA[Dylan Green]]></managingEditor><webMaster><![CDATA[Dylan Green]]></webMaster><docs>http://example.com/rss/docs.html</docs><ttl>60</ttl><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><item><title><![CDATA[item 1]]></title><description><![CDATA[description 1]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 2]]></title><description><![CDATA[description 2]]></description><link>http://example.com/article2</link><guid isPermaLink="true">http://example.com/article2</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Fri, 25 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 3]]></title><description><![CDATA[description 3]]></description><link>http://example.com/article3</link><guid isPermaLink="false">item3</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Sat, 26 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 4 & html test with <strong>]]></title><description><![CDATA[description 4 uses some <strong>html</strong>]]></description><link>http://example.com/article4?this&that</link><guid isPermaLink="true">http://example.com/article4?this&that</guid><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Sun, 27 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 5 & test for categories]]></title><description><![CDATA[description 5]]></description><link>http://example.com/article5</link><guid isPermaLink="true">http://example.com/article5</guid><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><category><![CDATA[Category 4]]></category><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Mon, 28 May 2012 04:00:00 GMT</pubDate></item></channel></rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.have.length(expectedResult.length);
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
@@ -132,7 +131,6 @@ describe('rss module', function(done) {
|
||||
var expectedResult = '<?xml version="1.0" encoding="UTF-8"?>\n<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[title]]></title><description><![CDATA[description]]></description><link>http://example.com</link><generator>RSS for Node</generator><lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate><atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/><author><![CDATA[Dylan Greene]]></author><pubDate>Sun, 20 May 2012 04:00:00 GMT</pubDate><copyright><![CDATA[2013 Dylan Green]]></copyright><language><![CDATA[en]]></language><managingEditor><![CDATA[Dylan Green]]></managingEditor><webMaster><![CDATA[Dylan Green]]></webMaster><docs>http://example.com/rss/docs.html</docs><ttl>60</ttl><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><item><title><![CDATA[item 1]]></title><description><![CDATA[description 1]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 2]]></title><description><![CDATA[description 2]]></description><link>http://example.com/article2</link><guid isPermaLink="true">http://example.com/article2</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Fri, 25 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 3]]></title><description><![CDATA[description 3]]></description><link>http://example.com/article3</link><guid isPermaLink="false">item3</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Sat, 26 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 4 & html test with <strong>]]></title><description><![CDATA[description 4 uses some <strong>html</strong>]]></description><link>http://example.com/article4?this&that</link><guid isPermaLink="true">http://example.com/article4?this&that</guid><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Sun, 27 May 2012 04:00:00 GMT</pubDate></item><item><title><![CDATA[item 5 & test for categories]]></title><description><![CDATA[description 5]]></description><link>http://example.com/article5</link><guid isPermaLink="true">http://example.com/article5</guid><category><![CDATA[Category 1]]></category><category><![CDATA[Category 2]]></category><category><![CDATA[Category 3]]></category><category><![CDATA[Category 4]]></category><dc:creator><![CDATA[Guest Author]]></dc:creator><pubDate>Mon, 28 May 2012 04:00:00 GMT</pubDate></item></channel></rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.have.length(expectedResult.length);
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
@@ -178,7 +176,43 @@ describe('rss module', function(done) {
|
||||
'</channel></rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.have.length(expectedResult.length);
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
it('should work with geoRSS', function(done) {
|
||||
var feed = new RSS({
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
feed_url: 'http://example.com/rss.xml',
|
||||
site_url: 'http://example.com',
|
||||
author: 'Dylan Greene'
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 1',
|
||||
description: 'description 1',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT',
|
||||
lat: 12232,
|
||||
long: 13333.23323
|
||||
});
|
||||
|
||||
feed.item({
|
||||
title: 'item 2',
|
||||
description: 'description 2',
|
||||
url: 'http://example.com/article1',
|
||||
date: 'May 24, 2012 04:00:00 GMT'
|
||||
});
|
||||
|
||||
var expectedResult = '<?xml version="1.0" encoding="UTF-8"?>\n<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"><channel><title><![CDATA[title]]></title><description><![CDATA[description]]></description><link>http://example.com</link><generator>RSS for Node</generator><lastBuildDate>' + new Date().toUTCString() +'</lastBuildDate><atom:link href="http://example.com/rss.xml" rel="self" type="application/rss+xml"/>'+
|
||||
'<author><![CDATA[Dylan Greene]]></author>' +
|
||||
'<item><title><![CDATA[item 1]]></title><description><![CDATA[description 1]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate><geo:lat>12232</geo:lat><geo:long>13333.23323</geo:long></item>'+
|
||||
'<item><title><![CDATA[item 2]]></title><description><![CDATA[description 2]]></description><link>http://example.com/article1</link><guid isPermaLink="true">http://example.com/article1</guid><dc:creator><![CDATA[Dylan Greene]]></dc:creator><pubDate>Thu, 24 May 2012 04:00:00 GMT</pubDate></item>'+
|
||||
'</channel></rss>';
|
||||
var result = feed.xml();
|
||||
|
||||
expect(result).to.equal(expectedResult);
|
||||
done();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user