Library2Notion (v1.1.1): crea tu librería digital en Notion con Python
Contenido
- Changelog
- Introducción
- Instalación
- Uso
- Datos de entrada
- Metadatos
- Libros no digitales (.paper)
- Ficheros de log
- Ejemplos
- Repositorio en GitHub
- Ayuda
Changelog
- Added -i (--Ignore) flag to exclude folders from being processed.
- Added -c (--Config) flag to be able to provide a config json file which includes pre-configured parameters. The tool will create this file for you in the first execution.
- The metadata will only be extracted from the books where it is needed, reducing considerably the execution time.
- -only_new: Only check new books.
- -only_updated: Only check changes in existing books (does not include removals).
- -only_deleted: Only check deleted books
- Added direct API calls to Notion.
- No need of csv files
- No need of token_v2
- Reduces complexity
- Now it can delete entries from Notion
- Idempotent executions
- Added support for physical books
- Fixed tool crashing when log file did not exist
- First working version
- Uploaded to PyPi
Introducción
Mi biblioteca digital ha crecido últimamente de manera rápida, conteniendo en este momento más de 600 libros. Me resultaba imposible llevar un registro de todos los libros que tengo.
Por eso decidí crear una herramienta sencilla para subir todos los libros (solo metadatos, no el libro en sí) a una base de datos en Notion. Gracias a eso, sería capaz de asignar estados, prioridades, etiquetas, filtrar por propiedad o autor y agregar comentarios a los libros.
La herramienta utiliza la API de Notion y tiene las siguientes características principales:
- Detecta todos los libros digitales de una ruta dada y todas las subcarpetas.
- Agrega, actualiza o elimina entradas en la base de datos de Notion para que coincidan con el estado de la carpeta local.
- Posibilidad de crear un archivo .paper para agregar libros no digitales que también se quieran rastrear.
- Extrae metadatos de archivos .pdf y .epub.
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: Python 3.7 o posterior requerido.
Desde la fuente
Este proyecto utiliza poetry para la gestión de dependencias y empaquetado. Primero, tendremos que instalarlo. Consulta la documentación oficial para obtener instrucciones.
git clone https://github.com/helguera/library2notion.git
cd library2notion/
poetry install
poetry run library2notion
Uso
$ library2notion --help
usage: library2notion [-h] -p PATH -t NOTIONTOKEN -d NOTIONDBID [-f FORMATS [FORMATS ...]] [--only_new | --only_updated | --only_deleted]
library2notion created by Javier Helguera (github.com/helguera) © 2023 MIT License
Opciones generales:
-p, --Path PATH Ruta donde empezar a buscar libros. También revisará todas las subcarpetas.
-t, --NotionToken NOTIONTOKEN Token de Notion.
-d, --NotionDbId NOTIONDBURL ID de la base de datos de Notion.
-f, --Formats FORMATS Lista de formatos a tener en cuenta. En este momento, se admiten .PDF, .EPUB y .PAPER.
--only_new, Solo verificar libros nuevos.
--only_updated Solo verificar cambios en libros existentes (no incluye eliminaciones).
--only_deleted Solo verificar libros eliminados.
-h, --help Mostrar este mensaje de ayuda y salir.
Datos de entrada
-p, --Path
La ruta donde buscar archivos (y subcarpetas). Es altamente recomendable utilizar rutas relativas. Esto es realmente importante, ya que también se utilizará para generar las etiquetas de cada libro. (Consulta la sección "Metadatos" para obtener más información).
Por ejemplo, si tu biblioteca se ve así:
/home/your_user/Documents/books/Programming/Python
/home/your_user/Documents/books/Programming/C
/home/your_user/Documents/books/History/Spanish History
La forma ideal de proceder es, primero, moverse a la carpeta books
, ya que es la común para todos los libros.
cd /home/your_user/Documents/books
Y desde aquí, ejecutar l2n con una ruta relativa:
library2notion -p "./"
⚠️ Importante: La manera en que se identifica de manera única un libro es mediante su ruta. Esto es crucial porque el libro
./books/Programming/Python/PythonCookbook
se tratará como uno diferente de./Programming/Python/PythonCookbook
.
-t, --NotionToken
Es el token secreto de Notion cuando se crea una integración. Visita la documentación oficial para obtener más información. No olvides darle permisos a la página de tu integración.
También puedes echar un vistazo a esta publicación que he creado y que explica todo lo que necesitas saber para crear una integración de Notion y conectarla con tu aplicación.
-d, --NotionDbId
El ID de la base de datos de Notion donde se cargarán todas las informaciones. Esta base de datos debe existir previamente y las columnas que necesita tener son fijas y no se pueden cambiar. Estas son:
Columna | Tipo | ||
---|---|---|---|
Nombre del Archivo | Título | ||
Título | Texto | ||
Prioridad | Selección | ||
Estado | Selección | ||
Formato | Selección Múltiple | ||
Etiquetas | Selección Múltiple | ||
Comentarios | Texto | ||
Autor | Texto | ||
Editorial | Texto | ||
ISBN | Texto |
Para obtener el valor del ID de la base de datos, abre la base de datos como una página completa en Notion. Utiliza el menú Compartir para Copiar enlace. Ahora pega el enlace en tu editor de texto para examinarlo más de cerca. La URL tiene el siguiente formato:
https://www.notion.so/{nombre_del_espacio_de_trabajo}/{id_de_la_base_de_datos}?v={id_de_la_vista}
-f, --Formats
These are the formats that will be taken into account. At this moment, .epub, .pdf and .paper are supported and used by default.
library2notion -f EPUB PAPER -> only look for .epub and .paper files
library2notion -f PDF -> only look for .pdf files
-c, --Config
Un fichero config.json puede ser utilizado como parámetro de entrada. Dicho fichero contendrá todos las configuraciones necesarias para el funcionamiento. De esta manera, las futuras ejecuciones serán más simples. La herramienta preguntará si se quiere crear el fichero automáticamente en la primera ejecución.
{
"notion_secret_token": "",
"notion_db_id": "",
"path": "",
"ignore": []
}
-i, --Ignore
Permite ignorar directorios o subdirectorios que no se quieren analizar. Por ejemplo:
-i History "./Tech Books/Programming"
La carpeta "History" será ignorada. Lo mismo para "Tech Books/Programming", pero no para el resto de libros en "Tech Books".
--only_new
Verifica solo los libros nuevos que se han agregado a la ruta desde la última ejecución. Omite aquellos que se han actualizado o eliminado.
--only_updated
Verifica solo los libros que se han actualizado desde la última ejecución. Omite los nuevos y los eliminados.
--only_deleted
Verifica solo los libros que se han eliminado desde la última ejecución. Omite los nuevos y los actualizados.
Metadatos
La herramienta extraerá los siguientes datos para cargar en Notion:
- Nombre del Archivo: es la ruta completa al archivo. Se utiliza como clave principal de la tabla en Notion, por lo que no puede duplicarse.
- 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
./Libros de Tecnología/Programación/Python/milibro.pdf
, las etiquetas seránLibros de Tecnología
,Programación
,Python
. - Autor: el autor o autores del libro.
- Editorial: la editorial del libro.
- Formatos: los formatos disponibles del libro. Un libro disponible en varios formatos solo aparecerá una vez en la base de datos.
- ISBN: el ISBN.
Libros no digitales (.paper)
Con la actualización 0.2.0, la herramienta admite libros no digitales. Solo tienes que crear un archivo .paper
en una carpeta por cada libro no digital que desees agregar con el siguiente contenido:
{
"Título": "",
"Autor": "",
"Editorial": "",
"ISBN": ""
}
Ficheros de log
Se creará un archivo de registro después de cada ejecución en la carpeta ./library2notion-logs
. Incluirá información sobre los libros creados, actualizados y eliminados.
Ejemplos
Supongamos que nuestra biblioteca local está ubicada en /home/user/Documents/mis-libros
.
cd /home/user/Documents/mis-libros
Ejecución normal
La ejecución normal funcionará en cualquier escenario, pero tarda más en finalizar porque se deben verificar más archivos. Es por eso que existen las opciones --only_new
, --only_updated
y --only_deleted
.
library2notion -p "./" -t TOKEN_DE_NOTION -d ID_DE_LA_BASE_DE_DATOS_DE_NOTION
Algunos libros se han agregado a la carpeta local
library2notion -p "./" -t TOKEN_DE_NOTION -d ID_DE_LA_BASE_DE_DATOS_DE_NOTION --only_new
Se ha agregado una nueva extensión a un libro existente en la carpeta local
library2notion -p "./" -t TOKEN_DE_NOTION -d ID_DE_LA_BASE_DE_DATOS_DE_NOTION --only_update
Algunos libros se han eliminado de la carpeta local
library2notion -p "./" -t TOKEN_DE_NOTION -d ID_DE_LA_BASE_DE_DATOS_DE_NOTION --only_deleted
Tomar en cuenta solo archivos PDF
library2notion -p "./" -t TOKEN_DE_NOTION -d ID_DE_LA_BASE_DE_DATOS_DE_NOTION -f PDF
Repositorio en GitHub
Puedes encontrar el repositorio completo de la herramienta en mi GitHub.
Ayuda
Si necesitas ayuda con cómo usar la herramienta o has encontrado algún problema, puedes contactarme en javier@javierhelguera. Espero que encuentres útil esta publicación.
Javier Helguera.
Comentarios