Instantly share code, notes, and snippets.

Embed
What would you like to do?
Quick Python script to allow you to post to github directly from an iOS device via the Editorial app.
#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
COMMITTER = {'name': 'Your Name', 'email': 'mail@example.com'}
username = 'Github User Name' # Your User Name Goes Here
tokn = 'api token here' # generate a token here https://github.com/settings/applications
repo = 'repository name here' # put the name of your repository here
# 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:
safe_title = re.sub('[^a-zA-Z0-9\s]', '', post_title).replace(' ', '-')
safe_title.replace('--', '-')
if not date:
date = time.strftime('%Y-%m-%d', time.gmtime())
post_filename = '_posts/%s-%s.md' % (date, safe_title) #you can swap md for .markdown if you prefer
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 == 404: # File doesn't exist, create it.
data = {
'path': post_filename,
'content': base64.b64encode(post_text),
'message': 'Blog Post - %s' % post_title,
'branch': SITE_BRANCH,
'committer': COMMITTER
}
response = requests.put(URL, headers=header, data=json.dumps(data))
if response.status_code == 201:
console.hud_alert("Blog post created successfully.", 'success', 2)
else:
console.alert("Commit failed.")
elif response.status_code == 200: # File exists, update it.
data = {
'path': post_filename,
'content': base64.b64encode(post_text),
'message': 'Blog Post - %s' % post_title,
'branch': SITE_BRANCH,
'committer': COMMITTER,
'sha': response_json['sha']
}
response = requests.put(URL, headers=header, data=json.dumps(data))
if response.status_code == 200:
console.hud_alert("Blog post updated successfully.", 'success', 2)
else:
console.alert("Commit failed.")
else: # Something went wrong!
console.alert("There was a problem with the server.")
else:
console.alert("Couldn't find a title.\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