Ruby script to convert Greymatter blog entries to Jekyll post format
#!/usr/bin/env ruby | |
source_dir = ARGV[0] | |
dest_dir = ARGV[1] | |
def get_timestamp(components) | |
month = components[0].to_i | |
day = components[1].to_i | |
year = components[2].to_i | |
hour = components[3].to_i | |
minute = components[4].to_i | |
second = components[5].to_i | |
ampm = components[6] | |
if ampm == 'AM' and hour == 12 | |
hour = 0 | |
elsif ampm == 'PM' and hour < 12 | |
hour = hour + 12 | |
end | |
Time.local(year, month, day, hour, minute, second) | |
end | |
Dir.glob(File.join(source_dir, '*.cgi')).each do |file| | |
content = File.readlines(file) | |
# grab the post metadata | |
metadata = content[0].split('|') | |
title = metadata[2] | |
timestamp = get_timestamp(metadata[4..10]) | |
puts "#{file} - #{timestamp.strftime('%Y-%m-%d %H:%M:%S')}: #{title}" | |
# parse the rest of the file | |
in_comments = false | |
post_lines = [] | |
comment_lines = [] | |
content[2..-1].each do |line| | |
if line=="\n" | |
in_comments = true | |
elsif in_comments | |
comment_lines << line | |
else | |
post_lines << line | |
end | |
end | |
jekyll_file = "#{timestamp.strftime('%Y-%m-%d-')}#{title.gsub(/\W/, '-')}".gsub(/-+/,'-').chomp('-') | |
jekyll_file = jekyll_file + '.markdown' | |
jekyll_path = File.join(dest_dir, jekyll_file) | |
File.open(jekyll_path, 'w') do |file| | |
file.write("---\n") | |
file.write("layout: post\n") | |
file.write("title: \"#{title}\"\n") | |
file.write("date: #{timestamp.strftime('%Y-%m-%d %H:%M:%S')}\n") | |
file.write("categories: \n") | |
file.write("---\n") | |
post_lines.each do |line| | |
line.split('|*|').each do |subline| | |
file.write(subline.gsub("<p>","").gsub("</p>","")) | |
file.write("\n") | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment