大海Online的博客

Looking for Interest

iteye 博客迁移

之前一直是在iteye上写博客的, 后来建立了本博客系统后, 就希望将博客从iteye上迁移过来

然而iteye上博客的文章太多了, 手动一篇一篇拷贝很不现实, 所以写了个工具来辅助迁移

iteye2markdown是一款博客迁移工具,可以将博客从iteye迁移至octopress

  • 此工具会自动下载iteye博客上的所有文章
  • 接着会将博客中的bbcode代码转换成markdown
  • 下载转换后的markdown可用于octopress,迁移至自己的博客系统上

使用方式:

  • 修改download.rb中的cookie配置, cookie将用于连接iteye.com的后台系统, 下载博客内容
  • 修改download.rb中的博客地址
  • 使用以下命令
    ruby download.rb
    

    执行下载转换, 结果保存于blog目录中

源代码见: github

核心代码如下:

re 'open-uri'
require 'nokogiri'

def process(id, date)
	host = 'http://seavers.iteye.com'
	cookie = ''      #IO.read('cookie.txt')
	agent = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.14 Safari/537.36'

	html = open(host + '/admin/blogs/' + id + '/edit', 'User-Agent'=>agent, 'Cookie'=>cookie).read
	doc = Nokogiri::HTML(html)

	title = doc.search('#blog_title').attr('value').to_s
	text = doc.search('#editor_body').text
	category = doc.search('#blog_category_list').attr('value').to_s
	tag = doc.search('#blog_tag_list').attr('value').to_s
	

	content = text
		.gsub('[size=xx-large]', '#')
		.gsub('[size=x-large]', '##')
		.gsub('[size=large]', '###')
		.gsub('[size=medium]', '####')
		.gsub('[size=small]', '')
		.gsub('[size=x-small]', '')
		.gsub('[size=xx-small]', '')
		.gsub('[/size]', '')
		.gsub(/\[url=(.*)\](.*)\[\/url\]/, '[\2](\1)')
		.gsub('[url]', '').gsub('[/url]', '')
		.gsub('[b]', '*').gsub('[/b]', '*')
		.gsub('[list]', '').gsub('[/list]', '')
		.gsub('[b]', '*').gsub('[/b]', '*')
		.gsub('[*]', '* ')
		.gsub('[code]', '```').gsub('[ne/code]', '```')
		.gsub(/\[code="(.*)"\]/, '```')


	filename = date[0..9] + '-' + id + '.markdown'
	File.open('blog/' + filename, 'w') { |file|
		file.puts '---'
		file.puts 'layout: post'
		file.puts 'title: "' + title.to_s + '"'
		file.puts 'date: ' + date + ':00 +0800'
		file.puts 'comments: true'
		file.puts 'categories:'
		file.puts '- ' + category.to_s
		file.puts 'tags:'
		tag.split(',').each {|x|
			file.puts '- ' + x
		}
		file.puts '---'

		file.puts ''
		file.puts content 
	}

end

def spider(page)
	agent = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.14 Safari/537.36'

	url = 'http://seavers.iteye.com/?page='+page.to_s
	html = open(url, 'User-Agent'=>agent)

	doc = Nokogiri::HTML(html)
	doc.search('.blog_main').each {|x|
		id = x.search('h3 a').attr('href').text[/[0-9]+/, 0]
		date = x.search('.blog_bottom .date').text
		puts id + "\t" + date
		process(id, date)
	}

	return doc.search('.pagination a.next_page').length == 0
end

##process('1416013', '2013-12-31 14:01')
(1..100).each {|page|
	break if spider(page)
}