He creado un workflow de Editorial para publicar en Medium. No es que sea algo excesivamente complicado pero creo que puede ser de gran utilidad para los que utilicen este servicio de publicación y quieran probar otras alternativas para cargar sus contenidos. Lo único que se necesita es un token de integración que puedes conseguir en tus ajustes de Medium.
El workflow puedes verlo o instalarlo desde aquí
No tiene mucha configuración, en el mismo lugar del workflow donde se indica el token de integración se puede seleccionar si la publicación quedará en borrador, se hará publica inmediatamente o no aparecerá listada.
El workflow toma un texto en markdown y lo envía a Medium. Antes de esto pedirá confirmación del título de la publicación.
El script en Python que gobierna el workflow es, con algunas variaciones, el siguiente:
import urllib2
import json
contentTypeHeader = 'application/json'
acceptHeader = 'application/json'
acceptCharsetHeader = 'utf-8'
integrationToken = 'tu propio token de integracion'
urlUserInfo = 'https://api.medium.com/v1/me'
request = urllib2.Request(urlUserInfo)
request.add_header("Authorization", "Bearer %s" % integrationToken)
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:
if e.code == 401:
print "The integration token is invalid"
print e.reason
else:
responseJson = json.loads(response.read())
authorId = responseJson["data"]["id"]
urlPost = 'https://api.medium.com/v1/users/%s/posts' % authorId
values = dict()
values['title'] = "Hola Medium!"
values['contentFormath'] = "html"
values['content'] = "<h1>Hola Medium!</h1><p>Probando el API de Medium desde Pythonista.</p>"
values['publishStatus'] = "draft"
data = json.dumps(values)
request = urllib2.Request(urlPost)
request.add_header("Authorization", "Bearer %s" % integrationToken)
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:
if e.code == 400:
print "Incorrect fields. Bad request"
print e.reason
elif e.code == 401:
print "The integration token is invalid"
print e.reason
elif e.code == 403:
print "User without permission to publish."
print e.reason
elif e.code == 404:
print "User unknown"
print e.reason
else:
print "Ups! something is wrong with the world today..."
print e.reason
else:
print response.read()