将Hexo的JSON转换为WordPress的WXR
This commit is contained in:
parent
c58a9da126
commit
d88d7e5715
1
content.json
Normal file
1
content.json
Normal file
File diff suppressed because one or more lines are too long
114
hexo_to_wp.py
Normal file
114
hexo_to_wp.py
Normal file
@ -0,0 +1,114 @@
|
||||
import json
|
||||
import datetime
|
||||
import xml.etree.ElementTree as ET
|
||||
from xml.dom import minidom
|
||||
|
||||
|
||||
def create_wxr_element():
|
||||
root = ET.Element("rss", version="2.0",
|
||||
attrib={
|
||||
"xmlns:excerpt": "http://wordpress.org/export/1.2/excerpt/",
|
||||
"xmlns:content": "http://purl.org/rss/1.0/modules/content/",
|
||||
"xmlns:wfw": "http://wellformedweb.org/CommentAPI/",
|
||||
"xmlns:dc": "http://purl.org/dc/elements/1.1/",
|
||||
"xmlns:wp": "http://wordpress.org/export/1.2/"
|
||||
})
|
||||
channel = ET.SubElement(root, "channel")
|
||||
title = ET.SubElement(channel, "title")
|
||||
title.text = "Hexo to WordPress"
|
||||
link = ET.SubElement(channel, "link")
|
||||
link.text = ""
|
||||
description = ET.SubElement(channel, "description")
|
||||
description.text = ""
|
||||
pubDate = ET.SubElement(channel, "pubDate")
|
||||
pubDate.text = datetime.datetime.now().strftime('%a, %d %b %Y %H:%M:%S +0000')
|
||||
language = ET.SubElement(channel, "language")
|
||||
language.text = "en"
|
||||
wxr_version = ET.SubElement(channel, "wp:wxr_version")
|
||||
wxr_version.text = "1.2"
|
||||
return root, channel
|
||||
|
||||
|
||||
def add_post_to_channel(channel, post):
|
||||
item = ET.SubElement(channel, "item")
|
||||
title = ET.SubElement(item, "title")
|
||||
title.text = post['title']
|
||||
link = ET.SubElement(item, "link")
|
||||
link.text = post['link']
|
||||
pubDate = ET.SubElement(item, "pubDate")
|
||||
pubDate.text = post['date']
|
||||
dc_creator = ET.SubElement(item, "dc:creator")
|
||||
dc_creator.text = 'admin'
|
||||
guid = ET.SubElement(item, "guid", isPermaLink="false")
|
||||
guid.text = post['link']
|
||||
description = ET.SubElement(item, "description")
|
||||
description.text = ""
|
||||
|
||||
content_encoded = ET.SubElement(item, "content:encoded")
|
||||
content_encoded.text = post['content']
|
||||
|
||||
excerpt_encoded = ET.SubElement(item, "excerpt:encoded")
|
||||
excerpt_encoded.text = ""
|
||||
|
||||
post_id = ET.SubElement(item, "wp:post_id")
|
||||
post_id.text = post['path']
|
||||
post_date = ET.SubElement(item, "wp:post_date")
|
||||
post_date.text = post['date']
|
||||
post_date_gmt = ET.SubElement(item, "wp:post_date_gmt")
|
||||
post_date_gmt.text = post['date']
|
||||
comment_status = ET.SubElement(item, "wp:comment_status")
|
||||
comment_status.text = "open"
|
||||
ping_status = ET.SubElement(item, "wp:ping_status")
|
||||
ping_status.text = "open"
|
||||
post_name = ET.SubElement(item, "wp:post_name")
|
||||
post_name.text = post['slug']
|
||||
status = ET.SubElement(item, "wp:status")
|
||||
status.text = "publish"
|
||||
post_parent = ET.SubElement(item, "wp:post_parent")
|
||||
post_parent.text = "0"
|
||||
menu_order = ET.SubElement(item, "wp:menu_order")
|
||||
menu_order.text = "0"
|
||||
post_type = ET.SubElement(item, "wp:post_type")
|
||||
post_type.text = "post"
|
||||
post_password = ET.SubElement(item, "wp:post_password")
|
||||
post_password.text = ""
|
||||
is_sticky = ET.SubElement(item, "wp:is_sticky")
|
||||
is_sticky.text = "0"
|
||||
|
||||
# 添加分类和标签
|
||||
for category in post.get('categories', []):
|
||||
cat = ET.SubElement(item, "category", domain="category", nicename=category['name'])
|
||||
cat.text = category['name']
|
||||
|
||||
for tag in post.get('tags', []):
|
||||
tg = ET.SubElement(item, "category", domain="post_tag", nicename=tag['name'])
|
||||
tg.text = tag['name']
|
||||
|
||||
|
||||
def prettify(element):
|
||||
"""Return a pretty-printed XML string for the Element."""
|
||||
rough_string = ET.tostring(element, 'utf-8')
|
||||
reparsed = minidom.parseString(rough_string)
|
||||
return reparsed.toprettyxml(indent=" ")
|
||||
|
||||
|
||||
def save_wxr_file(root, filename):
|
||||
pretty_xml = prettify(root)
|
||||
with open(filename, 'w', encoding='utf-8') as f:
|
||||
f.write(pretty_xml)
|
||||
|
||||
|
||||
def main():
|
||||
with open('content.json', 'r', encoding='utf-8') as f:
|
||||
hexo_data = json.load(f)
|
||||
|
||||
root, channel = create_wxr_element()
|
||||
|
||||
for post in hexo_data['posts']:
|
||||
add_post_to_channel(channel, post)
|
||||
|
||||
save_wxr_file(root, 'hexo_to_wp.xml')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user