Skip to content

Instantly share code, notes, and snippets.

@tnmt
Created September 25, 2017 11:57
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 tnmt/28420c01a1142d12497b662bad53ec8b to your computer and use it in GitHub Desktop.
Save tnmt/28420c01a1142d12497b662bad53ec8b to your computer and use it in GitHub Desktop.
data exporter from Ghost (ready for 1.X) to Hugo (also Octopress) data format.
#!/bin/env python
# coding: utf-8
import os
import json
from datetime import datetime
def main():
# Read the Ghost export file
f = open('GhostData.json', 'r')
all_posts = json.load(f)['db'][0]['data']['posts']
f.close()
for post in all_posts:
# Create or use a folder for the date
created = datetime.strptime(post['created_at'], "%Y-%m-%dT%H:%M:%S.000Z")
if not os.path.exists('./output/%d/%02d/%02d' % (created.year, created.month, created.day)):
os.makedirs('./output/%d/%02d/%02d' % (created.year, created.month, created.day))
# Create the Markdown file
pf = open('./output/%d/%02d/%02d/%s.md' % (created.year, created.month, created.day, post['slug']), 'w')
# Format the permalink
post['url'] = '/%d/%02d/%02d/%s' % (created.year, created.month, created.day, post['slug'])
# Front matter
pf.write('+++\n')
pf.write('title = "%s"\n'.encode('utf8') % post['title'].encode('utf8').replace('"', '\\"'))
pf.write('slug = "%s"\n' % post['slug'])
pf.write('date = "%s"\n' % post['created_at'])
pf.write('url = "%s"\n' % post['url'])
if (post['status'] == 'draft'):
pf.write('draft = true\n')
pf.write('+++\n\n')
# Post body
pf.write(post['plaintext'].encode('utf8'))
# Close the Markdown file
pf.close()
if __name__=='__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment