Javi Moreno Apuntes Fichas de Lectura Archivo Sobre mi
Blog Logo

Javi


3 minutos de lectura

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.

Detalle del workflow

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()