Library2Notion: crea tu librería digital en Notion con Python

Helguera
Escrito por Helguera el
Link

Introducción

Últimamente mi biblioteca digital ha crecido muy deprisa, conteniendo en este momento más de 600 libros. Me resultaba imposible hacer un seguimiento de todos los libros que tengo.

Por eso decidí crear una herramienta sencilla para subir todos los libros (sólo los metadatos, no el libro en sí) a una base de datos en Notion. Gracias a ello, podré asignar estados, prioridades, etiquetas, filtrar por una propiedad o autor y añadir comentarios a los libros.

Básicamente, la herramienta analizará todos los libros (pdf o epub) de una ruta determinada, creará un archivo .csv con los metadatos extraídos y lo subirá a una base de datos de Notion. Llevará un registro de los libros cargados, de modo que la próxima vez que se ejecute la herramienta, sólo se cargarán los nuevos.


Instalación

Con Homebrew (Recomendado para MacOS)


brew install helguera/tap/library2notion

Con PIPX (Recomendado para Linux y Windows)


pipx install library2notion

Con PIP


pip install --user library2notion

Nota: requiere Python 3.7 o posterior.

Desde GitHub

Este proyecto utiliza poetry para la gestión de dependencias y empaquetado. Tendrás que instalarlo primero. Consulte la documentación oficial de poetry para obtener instrucciones.

git clone https://github.com/helguera/library2notion.git
cd library2notion/
poetry install 
poetry run library2notion

Cómo se utiliza


$ library2notion --help
usage: library2notion [-h] -p PATH [-l LOGFILEPATH] [-e EXTENSIONS [EXTENSIONS ...]] [-t NOTIONTOKEN] [-u NOTIONDBURL] [-f] [-o OUTPUTFOLDER]

Import/Merge your digital library collection in .PFD or .EPUB format to Notion.

general options:
  -p, --Path PATH                    Path where to start looking for books. It will also check all subfolders
  -l, --LogFilePath LOGFILEPATH      Location of the log file if exists. If not, a new one will be created in the specified location
  -e, --Extensions EXTENSIONS        List of extensions to be taken into account. At this moment .PDF and .EPUB are supported.
  -t, --NotionToken NOTIONTOKEN      Notion token, stored in token_v2 cookie for notion.so
  -u, --NotionDbUrl NOTIONDBURL      Notion DB URL
  -f, --ForceUpload FORCEUPLOAD      Force upload to Notion (if token and db url are provided) ignoring the log file. If no Notion data is provided it will generate the .csv file.
  -o, --OutputFolder OUTPUTFOLDER    Folder to store .csv, .xlsx, and deleted.json files. If not provided it will use './'
  -h, --help                         show this help message and exit

Datos de entrada

Se debe pasar una ruta de inicio para que la aplicación comience a buscar libros con la opción --Path. Además, se necesita un archivo de registro si ya ha ejecutado la herramienta anteriormente.

Se puede pasar con la opción --LogFilePath. Este archivo de registro contendrá el estado de la ejecución anterior, de modo que los libros que ya se hayan escaneado y cargado no se verán afectados. Si no se proporciona este archivo de registro, se creará uno nuevo.

Opcionalmente puede especificar qué extensiones de libros quiere que analice la aplicación con la opción --Extension. En este momento soporta .PDF y .EPUB.

Si quieres que la aplicación cargue los datos en Notion, debes proporcionar una URL a una base de datos Notion existente con la opción --NotionDbUrl; la URL debe enlazar a una vista de la base de datos, no a una página.

La herramienta también requiere que proporcione una cookie token_v2 para el sitio web de Notion mediante la opción --NotionToken. Si quieres saber cómo obtener dicha cookie consulta este post

Atención: La cookie token_v2 proporciona acceso completo a tu cuenta Notion. No la compartas con nadie.

Metadata

La herramienta extraerá los siguientes datos para subirlos a Notion:

  • Nombre del fichero: es la ruta completa al fichero. Se utiliza como clave primaria de la tabla en Notion, por lo que no se puede duplicar.
  • Título: título del libro.
  • Etiquetas: las categorías del libro. Se generan automáticamente a partir de la ruta. Por ejemplo, si la ruta es ./Tech Books/Programming/Python/mybook.pdf, las etiquetas serán Tech Books, Programming, Python.
  • Autor: el autor o autores del libro.
  • Editor: el editor del libro.
  • Formatos: los formatos disponibles del libro. Un libro disponible en varios formatos sólo aparecerá una vez en la base de datos.
  • ISBN: el ISBN.

Columnas

La herramienta creará una columna por cada metadato extraído. Además, se crearán las siguientes, que estarán vacías porque sólo están pensadas para ser utilizadas en Notion:

  • Prioridad: permite seleccionar una prioridad y filtrar por esa propiedad en Notion.
  • Estado: el estado del libro (leído, no empezado, en espera...)
  • Comentarios: si necesitamos añadir algún comentario al libro

Fichero de Log

El archivo de registro es un archivo json que contiene información sobre los libros que ya se han cargado en Notion. Se generará automáticamente la primera vez que se utilice la aplicación. En las siguientes ejecuciones, si se han añadido uno o más archivos a la ruta, se debe proporcionar el archivo de registro para que la herramienta sepa que sólo hay que escanear y cargar esos nuevos libros.

Libros eliminados

Si se borra un libro de la ruta, la herramienta lo detectará la próxima vez que se ejecute (sólo, por supuesto, si se proporciona un archivo de registro). Esto generará un archivo deleted.json en la carpeta ouput con los libros borrados.

Pero, hay que tener en cuenta, el libro no será borrado de Notion. Eso tiene que hacerse manualmente.

Ejemplos

1. Escanear carpeta en busca de ficheros .pdf y .epub por primera vez y subir a Notion

library2notion 
    -p "YOUR_PATH" 
    -l "./your_log_file.json" 
    -e .pdf .epub 
    -t YOUR_NOTION_TOKEN 
    -u YOUR_NOTION_DB_URL

2. Escanear carpeta en busca de ficheros .pdf y .epub teniendo ya un fichero de log y subir a Notion

library2notion 
    -p "YOUR_PATH" 
    -l "./your_log_file.json" 
    -e .pdf .epub 
    -t YOUR_NOTION_TOKEN 
    -u YOUR_NOTION_DB_URL

3. Escanear carpeta en busca de ficheros .pdf y .epub y crear el documento .csv exclusivamente

library2notion 
    -p "YOUR_PATH" 
    -l "./your_log_file.json" 
    -e .pdf .epub 

4. Escanear carpeta en busca de ficheros .pdf y .epub y forzar la subida a Notion ignorando el fichero de registro

library2notion 
    -p "YOUR_PATH" 
    -l "./your_log_file.json" 
    -e .pdf .epub 
    -t YOUR_NOTION_TOKEN 
    -u YOUR_NOTION_DB_URL
    -f

5. Escanear carpeta en busca de ficheros .pdf y .epub, subir el resultado a Notion y especifar una ruta para los ficheros generados

library2notion 
    -p "YOUR_PATH" 
    -l "./your_log_file.json" 
    -e .pdf .epub 
    -t YOUR_NOTION_TOKEN 
    -u YOUR_NOTION_DB_URL
    -o "YOUR_OUTPUT_FOLDER"

Repositorio en GitHub

Puedes encontrar el repositorio completo en mi GitHub haciendo click aquí.

Ayuda

Si necesitas ayuda con cómo se usa la herramienta o has encontrado un problema puedes contactarme en javier@javierhelguera.

Espero que te haya resultado útil este post.

Javier Helguera.

Comentarios