Skip to content

Instantly share code, notes, and snippets.

@jmoreno
Last active June 1, 2017 00:57
Show Gist options
  • Select an option

  • Save jmoreno/00629b0b1148e9910f82 to your computer and use it in GitHub Desktop.

Select an option

Save jmoreno/00629b0b1148e9910f82 to your computer and use it in GitHub Desktop.
Python script that publish a post to Medium in draft status
import urllib2
import json
import workflow
import console
import keychain
params = workflow.get_parameters()
userAgent = 'Mozilla/5.0'
contentTypeHeader = 'application/json'
acceptHeader = 'application/json'
acceptCharsetHeader = 'utf-8'
integrationToken = params.get('Integration Token', None)
if not integrationToken:
console.hud_alert('Integration Token Missing', 'error', 2.0)
workflow.stop()
authorId = keychain.get_password('Medium', integrationToken)
if authorId == None:
urlUserInfo = 'https://api.medium.com/v1/me'
request = urllib2.Request(urlUserInfo)
request.add_header("Authorization", "Bearer %s" % integrationToken)
request.add_header("User-agent", userAgent)
request.add_header("Content-Type", contentTypeHeader)
request.add_header("Accept", acceptHeader)
request.add_header("Accept-Charset", acceptCharsetHeader)
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError as e:
console.hud_alert(e.reason, 'error', 2.0)
workflow.stop()
else:
responseJson = json.loads(response.read())
authorId = responseJson["data"]["id"]
keychain.set_password('Medium', integrationToken, authorId)
urlPost = 'https://api.medium.com/v1/users/%s/posts' % authorId
content = params.get('Content')
content = content.encode('utf8')
title = params.get('Title')
publishStatusSelected = params.get('Publish Status', None)
if publishStatusSelected == 0:
publishStatus = 'public'
elif publishStatusSelected == 1:
publishStatus = 'draft'
else:
publishStatus = 'unlisted'
values = dict()
values['title'] = title
values['contentFormat'] = "markdown"
values['content'] = content
values['publishStatus'] = publishStatus
data = json.dumps(values)
request = urllib2.Request(urlPost)
request.add_header("Authorization", "Bearer %s" % integrationToken)
request.add_header("User-agent", userAgent)
request.add_header("Content-Type", contentTypeHeader)
request.add_header("Accept", acceptHeader)
request.add_header("Accept-Charset", acceptCharsetHeader)
request.add_data(data)
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError as e:
msg = e.reason
type = 'error'
else:
msg = 'Posted to Medium'
type = 'success'
console.hud_alert(msg, type, 2.0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment