back to wordpress

又从Typecho换回了Wordpress,好在一切顺利,感谢https://github.com/panxianhai/TypExport 提供的插件。


慢着,发现问题了,原本markdown写的文章,居然被截断了!最终的内容只有原来的一丢丢,而且是html格式。我勒个去,有点不靠谱啊大哥。

看来只能花点时间写个脚本从数据库里自己导出来了,唉,我这事办得……


总算大致搞掂!

  • 把原来的数据库typecho_contents表中的titletext字段dump出来:
    mysql -u root --password=xxx --database=typecho --execute='SELECT title, text FROM typecho_contents LIMIT 0, 10000 ' -X > heihei.xml
    
  • 用以下Python脚本生成sql:

# -*- coding: utf-8 -*-

from lxml import etree
from lxml.etree import _Element
import markdown

md = markdown.Markdown(output_format='html5', extensions=['fenced_code'])
fd = open('heihei.xml')
parser = etree.XMLParser()
root = etree.parse(fd, parser)

rows = root.xpath("//row")

with open('sql.sql', 'wb') as sql:
    for row in reversed(rows):
        title = row.xpath("field[@name='title']/text()")
        content = row.xpath("field[@name='text']/text()")
        if len(title) != 1 or len(content) != 1:
            continue
        title = title[0]
        content = content[0]
        if content.startswith(u'<!--markdown-->'):
            content = content[len('<!--markdown-->'):]
            html = md.convert(content)
            sql.write(u'update wp_posts set post_content_filtered = "{}", post_content = "{}" where post_title = "{}";'.format(
                content.replace(u"\"", u"\"\""),
                html.replace(u"\"", u"\"\""),
                title.replace(u"\"", u"\"\"")
            ).encode(encoding='utf-8'))
        else:
            sql.write(
                u'update wp_posts set post_content = "{}" where post_title = "{}";'.format(
                    content.replace(u"\"", u"\"\""),
                    title.replace(u"\"", u"\"\"")
                ).encode(encoding='utf-8'))

        sql.write('\n')

fd.close()

使用方法:把上面脚本保存成xxx.py,跟heihei.xml放在同一目录下,然后cd到该目录,执行python xxx.py即可,最后会在该目录生成sql.sql,贴到mysql中执行即可

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据