BabelIO à Joplin : L'extraction de mes lectures

Plongez dans le monde de la lecture 2.0 avec BabelIO, une plateforme de gestion de bibliothèque qui va au-delà de la simple compilation de titres. Dans cet article, je vous invite à découvrir comment j'utilise BabelIO pour organiser ma bibliothèque personnelle, et surtout, comment j'ai développé un système d'extraction de données sur mesure pour tirer le meilleur parti de cette expérience littéraire digitale. Suivez-moi à travers les pages virtuelles de ma bibliothèque et explorez l'univers de BabelIO enrichi par ma propre touche personnelle.

Présentation de BabelIO

BabelIO est une plateforme de gestion de bibliothèque, offrant bien plus qu'une simple liste de livres. Cette application web et mobile permet aux utilisateurs de répertorier aisément leur collection littéraire, que ce soit par la saisie manuelle des titres ou grâce à une fonctionnalité de scan. Au-delà de son aspect utilitaire, BabelIO intègre une dimension sociale ; les utilisateurs peuvent partager leurs lectures, exprimer leurs avis et se connecter avec une communauté de lecteurs partageant des passions similaires. Cette approche collaborative transforme la simple gestion de bibliothèque en une expérience interactive, où les livres deviennent des points de départ pour des discussions passionnantes et des échanges enrichissants entre les amateurs de lecture. Je vous invite à nous rejoindre via le lien suivant : BabelIO.

Mon besoin

Utilisateur de Joplin pour organiser mes notes et archiver mes lectures, je me suis retrouvé à la recherche d'une solution intégrée pour synchroniser mes données de lecture entre BabelIO et mon système Joplin. Joplin a déjà prouvé son efficacité dans la structuration de mes pensées et la conservation de mes réflexions sur mes lectures, mais l'absence d'une passerelle directe avec BabelIO était un défi à relever. La nécessité de fusionner ces deux univers, celui de la gestion de ma bibliothèque personnelle avec BabelIO et celui de la prise de notes, a été le moteur de la création d'un système d'extraction de données. Ce système devait non seulement faciliter l'importation fluide de mes expériences littéraires depuis BabelIO vers Joplin mais également préserver l'intégrité et la richesse de ces informations au sein de ma base de données existante.

Récupération des données

Face à l'absence d'une intégration directe par API offerte par BabelIO, l'établissement d'une passerelle entre cette plateforme et mon système Joplin a nécessité une approche plus musclée. Confronté à ce défi, deux options se sont présentées : la première impliquait le reverse engineering de l'application mobile BabelIO pour identifier et utiliser une éventuelle API privée, tandis que la seconde consistait à mettre en place un système de scraping pour extraire les données pertinentes. Le scraping, également appelé extraction de données web, est une technique informatique qui consiste à extraire automatiquement des données d'un site web. Concrètement, cette méthode repose sur l'utilisation de scripts ou de bots pour naviguer à travers les pages d'un site, analyser la structure HTML, et récupérer les informations souhaitées.

Ainsi, j'ai créé un script en utilisant mon outil de prédilection, Node.js. L'objectif de ce script est d'assurer une gestion efficace de l'extraction des données en les organisant dans un format JSON exploitable, tout en offrant une interface simple et réutilisable. Pour ceux qui souhaitent explorer davantage, le script est accessible à l'adresse suivante : lien GitHub.

Transférer dans Joplin

Avec les données maintenant à disposition, la suite du script se concentre sur l'utilisation de l'API locale du client Joplin, utilisant le module joplin-api. Ce processus implique l'identification des points d'écriture appropriés dans Joplin, suivi par la transformation des données extraites en format Markdown. Ainsi, la transition fluide de l'information de BabelIO vers Joplin est orchestrée, permettant une intégration harmonieuse entre les deux systèmes. Ce procédé assure que les détails de mes lectures, avis, et interactions communautaires, initialement capturés sur BabelIO, prennent place de manière ordonnée et accessible au sein de mes notes Joplin.

Cependant, cette approche requiert que je démarre manuellement mon client Joplin et lance le script pour synchroniser les informations. Heureusement, j'ai trouvé une parade à cette contrainte.

Automatisation

Il est possible d'utiliser le client Joplin en mode CLI sans avoir besoin de l'interface utilisateur. J'ai donc créé un conteneur Docker qui réalise les étapes suivantes :

  1. Initialisation du client Joplin.
  2. Connexion au serveur Joplin.
  3. Synchronisation des données depuis le serveur pour obtenir la dernière version.
  4. Démarrage du serveur local Joplin.
  5. Lancement du script de scraping pour mettre à jour les données dans Joplin.
  6. Arrêt du serveur local Joplin.
  7. Synchronisation des données vers le serveur.

Ce qui donne ce script :

#!/bin/sh

export JOPLIN_TOKEN=$(joplin config 'api.token' | cut -d ' ' -f 3)

joplin config 'sync.target' 9
joplin config 'sync.interval' '0'
joplin config 'sync.9.path' $JOPLIN_SERVER
joplin config 'sync.9.username' $JOPLIN_USER
joplin config 'sync.9.password' $JOPLIN_PASSWORD

joplin sync
joplin server start &
sleep 10
yarn start
joplin server stop
joplin sync

Et ce Dockerfile :

FROM node:18-alpine

RUN apk add coreutils

WORKDIR /home/node
USER node

RUN yarn global add joplin

ENV PATH="/home/node/.yarn/bin:${PATH}"

COPY --chown=node:node . .
RUN cp config.sample.json config.json
RUN yarn

CMD ["sh", "run.sh"]

Conclusion

Cette pirouette technique offre une flexibilité remarquable, me permettant d'initier la synchronisation à ma convenance, de n'importe où, et depuis n'importe quelle machine. La mise en place du conteneur Docker, combinée à l'utilisation du client Joplin en mode CLI, représente une solution élégante pour automatiser le processus de manière efficace. Désormais, la gestion harmonieuse de ma bibliothèque et de mes notes de lecture est à portée de main, offrant une expérience personnalisée et parfaitement adaptée.