diff --git a/server/boot/story.js b/server/boot/story.js index ff20a9cd62..6ba36021dc 100755 --- a/server/boot/story.js +++ b/server/boot/story.js @@ -64,6 +64,7 @@ module.exports = function(app) { router.post('/news/userstories', userStories); router.get('/news/hot', hotJSON); + router.get('/news/feed', RSSFeed); router.get('/stories/hotStories', hotJSON); router.get( '/stories/submit', @@ -105,6 +106,26 @@ module.exports = function(app) { ); } + function RSSFeed(req, res, next) { + var query = { + order: 'timePosted DESC', + limit: 1000 + }; + findStory(query).subscribe( + function(stories) { + var sliceVal = stories.length >= 100 ? 100 : stories.length; + var data = stories.sort(sortByRank).slice(0, sliceVal); + res.render('feed', { + title: 'FreeCodeCamp Camper News RSS Feed', + description: 'RSS Feed for FreeCodeCamp Top 100 Hot Camper News', + url: 'http://www.freecodecamp.com/news', + FeedPosts: data + }); + }, + next + ); + } + function hot(req, res) { return res.render('stories/index', { title: 'Top Stories on Camper News', diff --git a/server/views/feed.jade b/server/views/feed.jade new file mode 100644 index 0000000000..67866c7bf7 --- /dev/null +++ b/server/views/feed.jade @@ -0,0 +1,15 @@ +doctype xml +rss(version="2.0", xmlns:atom="http://www.w3.org/2005/Atom") + channel + title= title + link= url + description= description + atom:link(href="http://www.freecodecamp.com/news/feed", rel="self", type="application/rss+xml") + for post in FeedPosts + if (post.link).match(/https*:\/\/\w+(\.\w+)*/) + item + title #{ post.headline.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"') } + description + pubDate= (new Date(post.timePosted)).toUTCString() + link= post.link + guid(isPermaLink="false")= post.link diff --git a/server/views/partials/meta.jade b/server/views/partials/meta.jade index 8ba19b0ca6..8336afb295 100644 --- a/server/views/partials/meta.jade +++ b/server/views/partials/meta.jade @@ -60,3 +60,4 @@ link(rel="mstile", sizes="310x150", href="https://s3.amazonaws.com/freecodecamp/ link(rel="mstile", sizes="70x70", href="https://s3.amazonaws.com/freecodecamp/favicons/mstile-70x70.png") link(rel="favicon", href="https://s3.amazonaws.com/freecodecamp/favicons/favicon.ico") link(rel='shortcut icon', href='//s3.amazonaws.com/freecodecamp/favicons/favicon.ico') +link(rel="alternate" type="application/rss+xml" title="RSS Feed for FreeCodeCamp Camper News" href="http://www.freecodecamp.com/news/feed")