From 5dbeaf12c97a263c8a0252fb1d6e7077845e78cc Mon Sep 17 00:00:00 2001 From: Dylan Greene Date: Sun, 30 Jun 2013 15:45:10 -0400 Subject: [PATCH] added support for enclosure Author: Victor Jonsson --- lib/rss.js | 33 +++++++++++++++++++++++++++++++-- package.json | 3 ++- readme.md | 3 ++- test/image.png | Bin 0 -> 16650 bytes test/test.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 test/image.png diff --git a/lib/rss.js b/lib/rss.js index b2a99d9..a903c77 100644 --- a/lib/rss.js +++ b/lib/rss.js @@ -2,7 +2,9 @@ Documentation coming soon. */ -var XML = require('xml'); +var XML = require('xml'), + mime = require('mime'), + fs = require('fs'); function RSS (options, items) { options = options || {}; @@ -24,7 +26,8 @@ function RSS (options, items) { guid: options.guid, categories: options.categories || [], author: options.author, - date: options.date + date: options.date, + enclosure: options.enclosure || false }; this.items.push(item); @@ -72,7 +75,33 @@ 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() }); + + if( item.enclosure && item.enclosure.url ) { + if( item.enclosure.file ) { + item_values.push({ + enclosure : { + _attr : { + url : item.enclosure.url, + length : fs.statSync(item.enclosure.file).size, + type : mime.lookup(item.enclosure.file) + } + } + }); + } else { + item_values.push({ + enclosure : { + _attr : { + url : item.enclosure.url, + length : item.enclosure.size || 0, + type : mime.lookup(item.enclosure.url) + } + } + }); + } + } + channel.push({ item: item_values }); + }); return { rss: [ diff --git a/package.json b/package.json index f2889ea..d69a64e 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ }, "dependencies": { - "xml": ">= 0.0.4" + "xml": ">= 0.0.4", + "mime": ">= 1.2.9" }, "main": "lib/rss.js", "engines": { "node": ">=0.4.0" }, diff --git a/readme.md b/readme.md index 575450e..e39b531 100644 --- a/readme.md +++ b/readme.md @@ -35,6 +35,7 @@ guid: '1123', // optional - defaults to url author: 'Guest Author', // optional - defaults to feed author property date: 'May 27, 2012' // any format that js Date can parse. + enclosure : {url:'...', file:'path-to-file'} // optional }); // cache the xml @@ -97,7 +98,7 @@ especially when tests are included. (The MIT License) -Copyright (c) 2011 Dylan Greene +Copyright (c) 2011-2013 Dylan Greene Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/test/image.png b/test/image.png new file mode 100644 index 0000000000000000000000000000000000000000..9405f519ed537bebd71124540e29c3a10cb06bb8 GIT binary patch literal 16650 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 j=Zc$dGQKS!=V2GY3d(f literal 0 HcmV?d00001 diff --git a/test/test.js b/test/test.js index 597c5c4..b0a60ab 100644 --- a/test/test.js +++ b/test/test.js @@ -99,6 +99,51 @@ module.exports = { var expectedResult = '\n<![CDATA[title]]>http://example.comNodeJS RSS Module' + new Date().toUTCString() +'<![CDATA[item 1]]>http://example.com/article1http://example.com/article1Thu, 24 May 2012 04:00:00 GMT<![CDATA[item 2]]>http://example.com/article2http://example.com/article2Fri, 25 May 2012 04:00:00 GMT<![CDATA[item 3]]>http://example.com/article3item3Sat, 26 May 2012 04:00:00 GMT<![CDATA[item 4 & html test with <strong>]]>html]]>http://example.com/article4?this&thathttp://example.com/article4?this&thatSun, 27 May 2012 04:00:00 GMT'; var result = feed.xml(); + test.equal(result.length, expectedResult.length); + test.equal(result, expectedResult); + test.done(); + }, + + 'test with enclosure' : function(test) { + 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', + enclosure : 'incorrect value' + }); + + feed.item({ + title: 'item 2', + description: 'description 2', + url: 'http://example.com/article1', + date: 'May 24, 2012 04:00:00 GMT', + enclosure : {url: '/media/some-file.flv'} + }); + + feed.item({ + title: 'item 3', + description: 'description 3', + url: 'http://example.com/article1', + date: 'May 24, 2012 04:00:00 GMT', + enclosure : {url: '/media/image.png', file : __dirname+'/image.png'} + }); + + var expectedResult = '\n<![CDATA[title]]>http://example.comNodeJS RSS Module' + new Date().toUTCString() +''+ + '<![CDATA[item 1]]>http://example.com/article1http://example.com/article1Thu, 24 May 2012 04:00:00 GMT'+ + '<![CDATA[item 2]]>http://example.com/article1http://example.com/article1Thu, 24 May 2012 04:00:00 GMT'+ + '<![CDATA[item 3]]>http://example.com/article1http://example.com/article1Thu, 24 May 2012 04:00:00 GMT'+ + ''; + var result = feed.xml(); + test.equal(result.length, expectedResult.length); test.equal(result, expectedResult); test.done();