diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/feed.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/scripts/feed.js b/scripts/feed.js new file mode 100644 index 0000000..f60ed90 --- /dev/null +++ b/scripts/feed.js @@ -0,0 +1,62 @@ +'use strict'; + +const xml = require("xml"); +const podcast = require("podcast"); + +hexo.extend.generator.register("feed", (locals) => { + + // Load config + const config = hexo.config; + const theme = hexo.theme.config; + const urler = hexo.extend.helper.get("url_for").bind(hexo); + const strip = hexo.extend.helper.get("strip_html").bind(hexo); + if (!theme.rss || !theme.rss.enable) return; + + // Render for site config + const feed = new podcast({ + title: config.title, + description: config.description, + copyright: theme.copyright, + language: config.language.slice(0, 2), + siteUrl: config.url, + imageUrl: theme.logo, + itunesSubtitle: config.subtitle, + itunesSummary: config.description, + itunesAuthor: config.author, + itunesExplicit: theme.rss.config.explicit, + itunesCategory: theme.rss.config.category, + itunesOwner: { + name: config.author, + email: theme.rss.config.email + } + }); + + // Rendor for podcasts + locals.posts.sort('date', -1).each(function (post) { + if (!post.podcast) return; + feed.addItem({ + title: post.title, + description: post.excerpt, + url: config.url + urler(post.path), + guid: config.url + urler(post.path), + author: post.podcast.authors.join(', '), + date: post.date, + enclosure: { + url: post.podcast.media.url, + type: post.podcast.media.type, + size: post.podcast.media.size + }, + itunesAuthor: post.podcast.authors.join(', '), + itunesExplicit: theme.rss.config.explicit, + itunesSubtitle: post.podcast.subtitle, + itunesSummary: strip(post.excerpt), + itunesCategory: theme.rss.config.category, + itunesDuration: post.podcast.duration + }); + }); + + return { + path: theme.rss.path, + data: feed.buildXml() + }; +}); |