Skip to content

Instantly share code, notes, and snippets.

@karstengresch
Forked from MalphasWats/get_blog_post.py
Last active August 25, 2015 21:16
Show Gist options
  • Save karstengresch/578aafbdb5ccfcdf5cad to your computer and use it in GitHub Desktop.
Save karstengresch/578aafbdb5ccfcdf5cad to your computer and use it in GitHub Desktop.
Get blog post from GitHub Pages site in Editorial
#coding: utf-8
import keychain
import console
import editor
import time
import re
import requests
import json
import base64
SITE_BRANCH = 'gh-pages' # either master or gh-pages
#keychain.delete_password('GitHub', 'username')
#keychain.delete_password('GitHub', 'token')
#keychain.delete_password('GitHub', 'repository')
# Get Username, API Token and Repository
username = keychain.get_password('GitHub', 'username')
if not username:
username = console.input_alert("Username", "Enter your GitHub Username", '', "Save")
keychain.set_password('GitHub', 'username', username)
tokn = keychain.get_password('GitHub', 'token')
if not tokn:
tokn = console.password_alert("API Token", "Enter your GitHub API Token", '', "Save")
keychain.set_password('GitHub', 'token', tokn)
repo = keychain.get_password('GitHub', 'repository')
if not repo:
repo = console.input_alert("Repository", "Enter your GitHub Repository name", '', "Save")
keychain.set_password('GitHub', 'repository', repo)
# Mangle the post ;)
post_text = editor.get_text()
post_sections = post_text.split('---')
if len(post_sections) > 1:
yaml_header = post_sections[1].splitlines()
# Find the title in the YAML
post_title = None
date = None
for line in yaml_header:
if line[:6] == 'title:':
post_title = line[6:].strip()
elif line[:5] == 'date:':
date = line[5:].strip()[:10]
if post_title and date:
safe_title = re.sub('[^a-zA-Z0-9\s]', '', post_title).replace(' ', '-')
safe_title.replace('--', '-')
post_filename = '_posts/%s-%s.markdown' % (date, safe_title)
URL = 'https://api.github.com/repos/%s/%s/contents/%s' % (username, repo, post_filename)
header = {
'Authorization': 'token %s' % tokn,
'User-Agent': username
}
get_data = {
'path': post_filename,
'ref': SITE_BRANCH
}
response = requests.get(URL, headers=header, params=get_data)
response_json = response.json()
if response.status_code == 200:
new_text = base64.b64decode(response_json['content'])
editor.replace_text(0, len(post_text), new_text)
console.hud_alert("Post downloaded from GitHub.", 'success', 2.0)
else: # Something went wrong!
console.alert("This post does not exist.")
else:
console.alert("Couldn't find a title or date.\n\nAction Halted.")
else:
console.alert("No YAML header found.\n\nAction Halted.")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment