前两天试了试Blogger的导入和导出功能,今天才发现就这么一试导致链接地址全变了。PR什么的我倒是不在乎,可看着也挺不舒服的。Blogger后端没有修改POST URL的功能,API里也没有。等空了找找看有没有什么办法吧,不过暂时只能这么放着了。
要是有人链到我这儿,对不起先。
Update:
折腾了一下,总算是解决了这个问题,部分解决。
首先,打开导出的XML文件,检查每一个entry元素的link子元素,确保href是你想要的。接着写一个脚本,将entry的title子元素改成链接的文件名部分。这里跟直接发帖一样,不改的话Blogger会根据entry的title给你自动生成一个。
# coding: UTF-8 require 'rexml/document' doc = REXML::Document.new(File.open(ARGV[0], 'r')) posts = {} doc.root.elements.each('/feed/entry') do |entry| # 有5个link的元素才是blog文章 next if entry.get_elements('link').length != 5 link = entry.elements['link[@rel="alternate"]'] url = link.attribute('href').value posts[url] = entry.elements['title'].text url = url[url.rindex('/')+1..-6] entry.elements['title'].text = url end doc.write(File.open(ARGV[1], 'w')) File.open(ARGV[2], 'w') { |f| f.write(posts.to_s) }
其次,在Blogger控制台新建一个blog,名字照旧,域名换一个如otnthnew。选择好模板之后,切忌按照向导的提示立刻导入旧帖子。先去设置中,将所有设置改成跟原blog一样。尤其需要注意的是“格式设置”中的“转换断行”选择为“否”,还有“基本”中的“选择帖子编辑器”选择为“旧编辑器”。
最后,导入备份的XML。把原blog的域名改成otnthold,再把otnthnew改成otnth。再然后还是写一个脚本,把帖子标题给改回来。
# coding: UTF-8 require 'gdata' GMAIL = '' PWD = '' BLOGID = 'xxxxxxxxxxxxxxxxxxx' =begin 因为墙的问题,gdata需要一点小hack。打开lib/gdata/http/default_service.rb,将: http = Net::HTTP.new(url.host, url.port) 修改为: http = Net::HTTP::Proxy(ENV['PROXY_ADD'], ENV['PROXY_PORT']).new(url.host, url.port) =end ENV['PROXY_ADD'] = '127.0.0.1' ENV['PROXY_PORT'] = '8118' posts = eval(File.open(ARGV[0], 'r:utf-8') { |f| f.read }) client = GData::Client::Blogger.new client.clientlogin(GMAIL, PWD) url = 'http://www.blogger.com/feeds/#{BLOGID}/posts/default?max-results=10' idx = 1 while true feed = client.get(url + '&start-index=' + idx.to_s).to_xml feed.elements.each('entry') do |entry| entry.elements.each('link') do |link| link = entry.elements['link[@rel="alternate"]'] entry.elements['title'].text = posts[link.attribute('href').value] entry.add_namespace('http://www.w3.org/2005/Atom') entry.add_namespace('gd','http://schemas.google.com/g/2005') entry.delete_element('thr:total') edit_uri = entry.elements['link[@rel="edit"]'].attributes['href'] response = client.put(edit_uri, entry.to_s) end end idx += 10 break if idx >= feed.elements['openSearch:totalResults'].text.to_i end
因为blogid已经变了,对于Blogger来说这就是一个全新的blog,会不会有什么严重的后遗症还有待观察。
没有评论 :
发表评论