Le blog de Genma
Vous êtes ici : Accueil » Lifehacking » Lifehacking - Wallabag, Liseuse et fainéantise : mon projet. Billet N°2

Lifehacking - Wallabag, Liseuse et fainéantise : mon projet. Billet N°2

D 4 octobre 2016     H 09:00     A Genma     C 0 messages   Logo Tipee

TAGS : Yunohost Lifehacking Planet Libre Wallabag

Ce billet fait suite à mon billet Lifehacking - Wallabag, Liseuse et fainéantise : mon projet. Billet N°1

Dans les commentaires on me signalait l’existence du billet Wallabag sur votre Kobo en un clic. Wallabag sur votre Kobo en un clicLe billet propose deux approches différentes : une via Calibre et l’autre via Wallabag et c’est de la 2ème dont je reprends le code que je me suis inspiré. Je suis donc allé voir ça et j’ai trouvé une partie de la résolution à mon problème, ce qui m’a permis d’avancer mon projet.

Via Twitter on me signale une applicatiion qui permettrait de lire le contenu d’une instance Wallabag 2 sur sa Pocketbook Touch Lux. C’est du C++, je ne connais pas ce langage. Je vous invite tout de même à y jeter un coup d’oeil.

Cas de l’utilisateur utilisé

Comme je le disais dans mon billet, je ne peux (pas encore) utiliser l’API de Wallabag ni l’utilisateur de Yunohost.

Pour l’instant, je crée donc un utilisateur dédié dans Wallabag (et je ne passe donc pas par l’identifiant générique de Yunohost)
 Avantages : c’est générique et marche pour toute instance de Wallabag autohebergé.
 Inconvénients : ça ne marche pas (pas encore) avec l’utilisateur de Yunohost. Il faut créer un autre utilisateur dans Wallabag. Et donc recommencer à marquer des articles à lire sous ce nouvel utilisateur.

La machine

J’ai une machine autohébergée qui a un port USB facilement accessible (pratique avec une rallonge de câble USB). Mon objectif final est de brancher ma liseuse sur le serveur, qu’elle soit détectée et que l’Epub contenant les articles non lus de Wallabag soit téléchargé et copié sur la liseuse Booken.

Les scripts

Ces scripts sont mis sur la machine sur laquelle on branche la liseuse en USB. Dans mon cas, c’est mon serveur, mais ça peut être son PC sous Linux, ça marchera aussi.

Il y a donc un script RecupEpubDeWallabag.sh qui sera lancé avec la règle udev (ce sera dans lebillet n°3 à venir)
Lui même appel le script Wallabag_Epub_to_Booken.py disponible ici https://framagit.org/genma/Wallabag_Epub_to_Booken/blob/master/Wallabag_Epub_to_Booken.py

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import cookielib
import mechanize
import configparser
import time

# Lecture du fichier de param pour les codes
config = configparser.ConfigParser()
config.read('Config.ini')
configWallabag = config['WALLABAG']
LOGIN = configWallabag['LOGIN']
PASSWORD = configWallabag['PASSWORD']
WALLABAG_URL = configWallabag['WALLABAG_URL']
WALLABAG_EPUB_URL = configWallabag['WALLABAG_EPUB_URL']

# Date & time
now = time.localtime(time.time())

# Browser
br = mechanize.Browser()

# Enable cookie support for urllib2
cookiejar = cookielib.LWPCookieJar()
br.set_cookiejar(cookiejar)

# Browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

# authenticate
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) + " Lancement du script")
br.open(WALLABAG_URL)
br.select_form(name="loginform")
br['_username'] = LOGIN
br['_password'] = PASSWORD
br.submit()
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) + " Tentative de connexion à Wallabag")
url = br.open(WALLABAG_URL)
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) + " Connexion à Wallabag réussie")
# TODO  timeout value has to be optimized
url2 = br.open(WALLABAG_EPUB_URL, timeout=300.0)
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) +" Lancement de l'export de l'Epub")
now = time.localtime(time.time())
EpubFileName = "Wallabag_export_" + str(time.strftime("%d%m%y", now)) + ".epub"
with open(EpubFileName, 'w') as newsfobj:
    newsfobj.write(url2.read())
print (str(time.strftime("%d-%m-%y %H:%M:%S", now)) + " Epub généné & récupéré sous le nom " + EpubFileName)

C’est un premier jet, je ne connais pas bien le Python et il y a encore des choses à optimiser / améliorer.

A optimiser

 Mettre en "lu" dans Wallabag les entrées récupérées dans l’epub
 Optimiser le temps de timeout. A voir selon le nombre d’articles & le temps de connexion. J’ai mis un timeout à 3 minutes, mais je rencontre encore des soucis de temps de connexion (le temps de génération de l’epub est assez long)
 Ajouter des "vraies" logs pour suivre la progression
 Envoyer un mail ou un SMS (utilisateur Freemobile) une fois la copie terminée
 Ajouter la gestion des dépendances python
 Ajouter des tests unitaires...
 ...

Je pense que toutes ces évolutions, ce sera pour au moins le billet N°4 et suivant, le N°3 sera consacré à la règle UDev (Le principe : le noyau linux détecte un périphérique USB lors de son branchement, lit son numéro de série et lance alors une commande / un script définie comme règle udev.)