Skip to content

Instantly share code, notes, and snippets.

@kstrauser
Forked from tzangms/ghost2wp.py
Last active August 2, 2018 07:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kstrauser/cbce4e3fd5fa4525e4b3e33ae3e1bee4 to your computer and use it in GitHub Desktop.
Save kstrauser/cbce4e3fd5fa4525e4b3e33ae3e1bee4 to your computer and use it in GitHub Desktop.
Migrate Ghost to Wordpress
"""
Requirements:
* A Wordpress Blog
* Ghost export file (json).
* Python Packages: python-wordpress-xmlrpc
>>> pip install python-wordpress-xmlrpc
WARNING:
USE THIS AT YOUR OWN RISK.
If your have any questions, please comment here below.
"""
from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import NewPost
from dateutil.parser import parse
from time import sleep
import json
xmlrpc_endpoint = ''
username = ''
password = ''
wp = Client(xmlrpc_endpoint, username, password)
filename = 'ghost.export.json'
with open(filename) as f:
text = f.read()
data = json.loads(text)['db'][0]['data']
# Build the tags map
tags_by_id = {tag['id']: tag['name'] for tag in data['tags']}
posts_tags = {}
for pt in data['posts_tags']:
posts_tags.setdefault(pt['post_id'], []).append(tags_by_id[pt['tag_id']])
for p in data['posts']:
print(p['title'])
date = p.get('published_at', None)
if date is None:
p.get('created_at')
post = WordPressPost()
post.slug = p['slug']
post.content = p['html']
post.title = p['title']
post.post_status = 'publish'
try:
post.terms_names = {'post_tag': posts_tags[p['id']]}
except:
print('> Post {id} ("{title}") has no tags'.format(**p))
try:
post.date = parse(date)
except:
continue
wp.call(NewPost(post))
@dausruddin
Copy link

How to get xmrpc endpoint

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment