Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
blogger_docpad importer for jekyll-import
# Modified by JoongSeob Vito Kim (https://github.com/dorajistyle) on 2014-11-18.
# Created by Kendall Buchanan (https://github.com/kendagriff) on 2011-12-22.
# Use at your own risk. The end.
#
# Usage:
# (URL)
# ruby -r 'jekyll/jekyll-import/rss' -e "JekyllImport::BLOGGER_DOCPAD.process(:source => 'http://yourdomain.com/your-favorite-feed.xml')"
#
# (Local file)
# ruby -r 'jekyll/jekyll-import/rss' -e "JekyllImport::BLOGGER_DOCPAD.process(:source => './somefile/on/your/computer.xml')"
module JekyllImport
module Importers
class BLOGGER_DOCPAD < Importer
def self.specify_options(c)
c.option 'source', '--source NAME', 'The RSS file or URL to import'
end
def self.validate(options)
if options['source'].nil?
abort "Missing mandatory option --source."
end
end
def self.require_deps
JekyllImport.require_with_fallback(%w[
rss/1.0
rss/2.0
open-uri
fileutils
safe_yaml
])
end
# Process the import.
#
# source - a URL or a local file String.
#
# Returns nothing.
def self.process(options)
source = options.fetch('source')
dest = "_posts"
layout = "post"
if !options['dest'].nil?
dest = options.fetch("dest")
end
if !options['layout'].nil?
layout = options.fetch("layout")
end
content = ""
open(source) { |s| content = s.read }
rss = ::RSS::Parser.parse(content, false)
raise "There doesn't appear to be any RSS items at the source (#{source}) provided." unless rss
rss.items.each do |item|
formatted_date = item.date.strftime('%Y-%m-%d')
post_name = item.title.split(%r{ |!|/|:|&|-|$|,}).map do |i|
i.downcase if i != ''
end.compact.join('-')
name = "#{post_name}-#{formatted_date}".gsub(/[&$+:;=?@#.\/]+/i,'')
categories = Array.new()
item.categories.each do |category|
categories.push(category.content)
end
header = {
'layout' => layout,
'title' => item.title.tr("\n",""),
'date' => formatted_date,
#'categories' => categories.join(","),
'comments' => true,
'adsense' => true,
'ignored' => false,
'tags' => categories
}
FileUtils.mkdir_p(dest)
File.open(dest+"/#{name}.html", "w") do |f|
f.puts header.to_yaml(options = {:line_width => -1})
f.puts "---\n\n"
f.puts item.description
end
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.