DC

Obsidian WordPress poster. Script python para postear entradas en tu blog con imagenes

enero 1, 2025

Introduccion

En esta oportunidad voy a explicar como cree un script de Python que me ayuda a postear notas de Obsidian como contenido en mi blog WordPress.

Link a GitHub

Ultimamente estoy usando bastante Obsidian y me gusta mucho para anotar cosas de mi dia a dia ya sean notas de mi trabajo, guias propias, notas de reuniones, etc. Tengo bastantes notas las cuales me gustaria convertir en entradas de un blog, pero queria hacerlo sin salir de la interfaz de Obsidian… Busque alternativas pero ninguna me convencio del todo, asi que se me ocurrio crear un script en Python que convierta el markdown de un archivo creado en Obsidian a html y asi publicarlo en mi blog.

Desafios

El desafio principal fue subir las imagenes a WordPress. Eso lo pude resolver subiendo las imagenes mediante SFTP.

El segundo desafio fue convertir el markdown a html, por suerte ya existen muchas librerias para eso. Adapte un poco los estilos con css y quedo muy bien.

Funcionalidades

  • Postear notas markdown de Obsidian como posts de WordPress, usando la API Rest de WordPress.
  • Postear imagenes guardadas en el Vault de Obsidian en mi sitio de WordPress por medio de SFTP.
  • Trabajar de manera local en mi blog, sin salir de Obsidian practicamente.

Como funciona el script

El script Python tiene dos componentes principales:
1. Postear contenido (notas de blog) a WordPress. Uso la WordPress REST API.
2. Subir imagenes a mi sitio WordPress. Uso SFTP.

1 WordPress REST API

Para poder hacer funcionar la WordPress REST API, tuve que generar una clave especial de WordPress mas info aqui para autenticarme contra mi sitio web. Usando requests puedo hacer envios HTTP hacia mi sitio web.

def sendPost(postData):

    url = mainurl + "/wp-json/wp/v2/posts" 

    if postData["post_id"] > -1:
        url = mainurl + "/wp-json/wp/v2/posts/" + str(postData["post_id"])

    headers = {
        "Content-Type": "application/json"
    }

    response = requests.post(
        url,
        auth=HTTPBasicAuth(username, password),
        headers=headers,
        json=postData
    )

    return response

2 SFTP

Para poder subir las imagenes, tuve que:

1 Tomar todas las imagenes que estan en el archivo markdown, obtener los nombres de los archivos.

def getFilenames(md_file):

    with open(md_file, 'r') as file:
        filedata = file.read()

    pattern = r'!\[\[(.*?)\.png\]\]'

    # Find all image names in the file
    image_names = re.findall(pattern, filedata)

    arr = []

    for image_name in image_names:
        full_image_name = image_name
        arr.append(full_image_name)

    return arr

2 Subir una por una por medio de SFTP a mi hosting.

def sftpupload(mdp):

    parsed_url = urlparse(SFTPTOGO_URL)

    sftp = Sftp(
        hostname=parsed_url.hostname,
        username=parsed_url.username,
        password=parsed_url.password,
    )

    sftp.connect()

    arr = getFilenames(mdp)

    for image_name2 in arr:
        local_path = images_path + f"{image_name2}.png"
        remote_path_file = remote_path + f"{image_name2}.png"
        sftp.upload(local_path, remote_path_file)

    sftp.disconnect()

Como usar el script

Simplemente llamamos al script de la siguiente manera:

# --opt = u (subir post), i (subir imagenes), d (draft mode)
# --mdp = path al archivo markdown
# --cat = categorias de wordpress como (id)

python3 main.py --opt='ui' --mdp='/home/MyMDFile.md'

Es posible tambien editar posts ya existentes, para eso hacemos uso de las properties de Obsidian, agregamos una propertie llamada post_id que el script va a leer correctamente.

Funcionalidades que me gustaria agregar

  • Cuando aparece un nuevo archivo en mi Obsidian Vault automaticamente se publique en WordPress.
  • Subir imagenes usando la WordPress REST API, en vez de SFTP.
  • Otorgar los nombres en vez de ids de categorias a la hora de postear notas.
  • Selector de atributos a la hora de actualizar un post.

Eso es todo, muchas gracias por leer!

Contenido relacionado

Instalar Drupal 10 y drush en Opalstack

Esta es una guía de cómo instalar Drupal 10 (o superior) en el hosting Opalstack. Pre requisitos: – Debemos tener instalado composer en nuestro entorno de Opalstack. Para hacerlo seguir...

Desarrollo remoto 1

En este seminario buscamos en dos horas poder enseñarle a una persona a crear su sitio web, aprender lo básico de Drupal y cómo usamos HTML y CSS, cómo cargamos...

Crear vistas en Drupal 10 (Views Module)

Views es un modulo que nos sirve para mostrar contenidos que provienen de nuestra base de datos, con diferentes formatos, filtros, estilos, orden, cantidad. Son basicamente una Query SQL. En...