import os
import pymysql.cursors
import html2text as ht
host = 'localhost'
port = 3306
username = 'root'
password = 'root'
database = 'wordpress'
# Connect to the database
connection = pymysql.connect(host=host,
port=port,
user=username,
password=password,
db=database)
work_path = os.getcwd() + os.path.sep + "posts"
if not os.path.exists(work_path):
os.makedirs(work_path)
print("文件将会导出到脚本同目录下的'posts'文件夹中")
hexo_md_head = """---
title: %s
category: auto_export
comments: false
comment: false
date: %s
updated:
tags:
permalink:
thumbnail:
toc:
top:
mathJax:
---\n\n
%s
"""
# 查询所有文章
sql_all = """SELECT `ID`,`post_date_gmt`,`post_title`,`post_status`,`post_modified_gmt`,`post_type`,`post_content`
FROM `wp_posts`
WHERE `post_parent`=0
AND `post_type`='post'
ORDER BY `post_date_gmt` DESC
"""
# 根据ID查询文章最新版本
sql_post_newest = """SELECT `ID`,`post_date_gmt`,`post_title`,`post_status`,`post_modified_gmt`,`post_type`,`post_content`
FROM `wp_posts`
WHERE `post_parent`=%s
AND `post_status`='inherit'
ORDER BY `post_date_gmt`
DESC """
try:
with connection.cursor() as cursor:
cursor.execute(sql_all)
results = cursor.fetchall()
print("共查询到 %d 篇文章,即将开始导出..." % (results.__len__()))
htmlWorker = ht.HTML2Text()
htmlWorker.bypass_tables = False
for i, row in enumerate(results):
ID = row[0]
date = row[1]
title = row[2]
content = row[6]
print("正在导出第 %d 篇文章: ID=%d, date=%s, title=《%s》" % (i+1, ID, date, title))
cursor.execute(sql_post_newest % ID)
new_post = cursor.fetchone()
if new_post:
title = new_post[2]
content = new_post[6]
content = htmlWorker.handle(content)
try:
tmpPost = open(work_path + os.path.sep + str(date)[0:10] + "-"
+ str(title).replace(" ", "-")
.replace("/", "").replace("|","").replace("\\","").replace("\"","'")
.replace(":","").replace("*","").replace("?","").replace("#","")
.replace("<","(").replace(">",")").replace("【","[").replace("】","]")
+ ".md",
mode='w', encoding="utf-8")
tmpPost.write(hexo_md_head % (title, date, content))
tmpPost.flush()
tmpPost.close()
except:
err_post_info = "文章导出失败: ID=%d, title=《%s》 " % (ID, title)
print(err_post_info + "请查看日志")
export_log = open("." + os.path.sep + "error.log", mode='a', encoding='utf-8')
export_log.write(err_post_info + "\n\n")
export_log.close()
cursor.close()
finally:
connection.close()