2011年11月6日星期日

blog迁移成功

今天折腾Blog迁移,杯具的Micolog只能导出WordPress格式,而且导出的WordPress格式又似乎不标准,用网上的转换工具也没能转成Atom格式给Blogger(貌似因为时间格式的问题,虽然也可以尝试预处理一下再转换,但既然要处理,为啥不彻底点呢?)

一开始的思路和转换工具一样,也是想自己写个脚本转换WordPress schema成Atom schema,可是很杯具的总是失败,Blogger导入时也没提示,不知schema的什么地方不符合标准~~~

于是开始研究Atom schema,洗具的地方在于伟大的G公司给我们提供了详细的描述:http://code.google.com/apis/blogger/docs/2.0/developers_guide_protocol.html
更强大之处在于这个spec的若干种语言的实现都提供了:http://code.google.com/apis/blogger/docs/1.0/developers_guide.html,虽然python只是提供了1.0的spec,但于我已经足够了~~~

于是,几行代码就搞定了迁移:

import sys, os
from xml.dom import minidom
import gdata.blogger.client
import gdata.client
import gdata.data
import atom.data

def usage(cmd):
 print "Usage: %s account pwd in_file\n" % cmd
 sys.exit(-1)

def get_simple_node_value(node):
 for subnode in node.childNodes:
  if subnode.nodeType in (node.TEXT_NODE, node.CDATA_SECTION_NODE):
   return subnode.data

def handle(account, pwd, in_file):
 client = gdata.blogger.client.BloggerClient()
 client.ClientLogin(email = account,
  password = pwd,
  service = 'blogger',
  source = 'Blogger_Importer-0.1')
 feed = client.get_blogs()
 blog_id = feed.entry[0].get_blog_id()

 in_dom = minidom.parse(in_file)
 in_root = in_dom.documentElement

 items = in_root.getElementsByTagName("item")
 for item in items:
  title = get_simple_node_value(item.getElementsByTagName("title")[0])
  content = get_simple_node_value(item.getElementsByTagName("content:encoded")[0])
  pub_date = get_simple_node_value(item.getElementsByTagName("pubDate")[0])
  pub_date = pub_date.split(".")[0]

  print("Importing: %s ...\n" % title)

  client.add_post(blog_id, title, content, draft = True)

if __name__ == '__main__':
 if len(sys.argv) != 4:
  usage(sys.argv[0])
 
 handle(sys.argv[1], sys.argv[2], sys.argv[3])

另,gdata除了可以用来操作Blogger外,若干Google的service都可以操作(参考这里):

没有评论:

发表评论

Test Ads
Hello World