一开始的思路和转换工具一样,也是想自己写个脚本转换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都可以操作(参考这里):
没有评论:
发表评论