logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 13-12-2014 16:48:47

Lunatic
Membre
Lieu : Lyon
Distrib. : Fedora 24
Noyau : Linux 4.6.5-300.fc24.x86_64
(G)UI : Gnome
Inscription : 03-08-2013
Site Web

Petit script « pybookmarks »

Salut,


Mon utilisation (récente) de dwb (merci sogalpunx !) m'a donné envie de faire un petit script permettant de remplacer shaarli, wallabag ou des services du même genre, pour un truc qui ne nécessite pas de serveur web. À l'instar d'un shaarli donc, il s'agit de conserver des « signets » pour consultation ultérieure, pour archivage, etc. Ça n'enregistre pas le contenu de la page, simplement l'url. Vous pouvez y ajouter des tags, un commentaire, modifier une « priorité », basculer en mode « archivé » ou pas (les url archivées n'apparaissent pas dans la liste des résultats d'une recherche, sauf option explicite).


Les url sont archivées dans un fichier csv (je voulais un truc facilement lisible par un éditeur de texte et consultable dans un tableur).


pybookmarks dispose de trois commandes principales : add, edit et view. Quelques détails :


pybookmars add

C'est le mode permettant d'ajouter une url. Y'a un seul argument obligatoire, l'url à sauvegarder

./pybookmarks.py add -h
usage: pybookmarks.py add [-h] [-c COMMENT] [-f FILE] [-p {1,2,3}] [-t [TAGS [TAGS ...]]] [-T TITLE] URL

Ajoute un signet

positional arguments:
  URL                   Url à enregistrer comme signet

optional arguments:
  -h, --help            show this help message and exit
  -c COMMENT, --comment COMMENT
                        Commentaire
  -f FILE, --file FILE  Fichier CSV des signets
  -p {1,2,3}, --priority {1,2,3}
                        Priorité du signet. Par défaut: 2
  -t [TAGS [TAGS ...]], --tags [TAGS [TAGS ...]]
                        Tags separés par un espace
  -T TITLE, --title TITLE
                        Titre du signet
 



Problème connu : comme l'option --tags supporte plusieurs paramètres (plusieurs tags), l'url qui suit semble considérée comme un tag à part entière, et le script se plaint du fait qu'il manque un argument obligatoire (l'url en question). Contournement : soit ne pas finir les options par --tags, soit faire précéder l'url de deux tirets.


pybookmarks.py view

C'est le mode permettant d'afficher les signets selon les critères donnés (facultatifs ; affiche tous les signets si aucun critère n'est donné). Les signets affichés doivent posséder tous les critères.

pybookmarks.py view [-h] [-a] [-A ALL] [-c COMMENT] [-f FILE] [-i [ID [ID ...]]] [-p {1,2,3}] [-T TITLE] [-t [TAGS [TAGS ...]]] [-o] [-O] [-u URL]

Affiche sur la sortie standard, et éventuellement ouvre dans le navigateur,
les signets correspondant à la recherche

optional arguments:
  -h, --help            show this help message and exit
  -a, --archive         Archive
  -A ALL, --all ALL
  -c COMMENT, --comment COMMENT
                        Commentaire
  -f FILE, --file FILE  Fichier CSV
  -i [ID [ID ...]], --id [ID [ID ...]]
                        IDs
  -p {1,2,3}, --priority {1,2,3}
                        Priorité
  -T TITLE, --title TITLE
                        Titre
  -t [TAGS [TAGS ...]], --tags [TAGS [TAGS ...]]
                        Tags séparés par un espace
  -o, --open            Ouvrir un signet dans le navigateur
  -O, --open-all        Ouvrir tous les signets dans le navigateur
  -u URL, --url URL     Url
 




Voici ce que ça donne lorsqu'on visualise les signets (ici, les seuls 3 signets de mon fichier bookmarks.csv) :

./pybookmarks.py view -f ~/bookmarks.csv



Id : 3  ?  2014/12/13 12:21:01
 How to parse command line arguments in Python
 http://martin-thoma.com/how-to-parse-command-line-arguments-in-python/
 Tags : ['python']
 Commentaire :
Id : 2  ?  2014/12/13 11:58:02
 Multi-level argparse in Python (parsing commands like git)
 http://chase-seibert.github.io/blog/2014/03/21/python-multilevel-argparse.html
 Tags : ['python', 'programmation']
 Commentaire : Gérer les options en ligne de commande
Id : 4  ?  2014/12/13 12:39:35
 afis07
 http://afis-ardeche.blogspot.fr/2012/09/humanisme-notre-visite-chez-des.html
 Tags : ['afis', 'science']
 Commentaire : Critique de la ferme de Pierre Rabhi




Ainsi, si je me souviens avoir enregistré un signet d'une page vue sur le site Slate et que j'avais taguée « sociologie », je le récupérerai en tapant simplement :

pybookmarks.py view -t sociologie -u slate



L'option -O permet dans la foulée d'ouvrir dans son navigateur les signets ainsi trouvés.

Là j'ai pas mal de choses à améliorer encore : (i) je trouve l'affichage des résultats peu lisibles (ii) les résultats ne sont pas particulièrement triés. Je ne sais pas encore quelle est la meilleure stratégie pour trier les signets avant de les afficher (iii) y'a pas encore de filtre par date (iv) l'option -o n'est pas encore active (elle aura pour fonction d'ouvrir un seul signet même si plusieurs sont trouvés. Ça nécessite qu'un système de tri soit en place).

Pour le moment, le moyen le plus simple d'ouvrir un signet est de lancer sa recherche, de repérer l'ID du signet voulu, et de l'ouvrir simplement avec :

pybookmarks.py view -O id 5



(si 5 est l'id du signet en question).


Enfin, pybookmarks.py edit pour modifier un signet. Ça ressemble donc beaucoup au mode d'ajout, sauf que là on indique, en dernier argument, le ou les ID des signets à modifier.


Bon, c'est vraiment sans prétention, je suis très loin d'être un codeur averti ! D'ailleurs je suis preneur de tous conseils concernant ma façon d'écrire ce code. Y'a notamment des grandes plages de tests (de « if… else ») qui ne sont peut être pas très élégantes. Si y'a d'autres moyens de penser ça, je suis avide de conseils.


Pour finir, voici comment je l'utilise avec dwb. Je m'appuie en fait sur dmenu pour pouvoir entrer les tags et le commentaire. Il suffit donc d'un script de ce style, à placer dans son dossier userscripts :

#!/bin/bash
# dwb: xr
TAGS=$(dmenu -p "Tags :")
COMMENTAIRE=$(dmenu -p "Commentaire :")
/home/julien/informatique/python/pybookmarks/pybookmarks.py -f ~/bookmarks.csv \
    -t $TAGS \
    -T "$DWB_TITLE" \
    -c "$COMMENTAIRE" $DWB_URI
 



Je ne sais pas s'il est possible d'utiliser ça avec Firefox/Iceweasel. J'ai cherché un addon permettant d'exécuter un petit script externe en lui passant l'url de la page courante et son titre, en vain.

Le code pybookmarks.py est dispo ici, mais ça risque d'évoluer un peu les jours qui viennent.

Dernière modification par Lunatic (13-12-2014 18:06:02)


Je suis aussi sur Twitter et nouvellement sur Diaspora*
Mon blog de geekeries : HAL-9000

(J'applique la règle de proximité)

Hors ligne

#2 13-12-2014 17:07:15

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : Petit script « pybookmarks »

Merci Lunatic.

Pour une meilleure compréhension des intitulés, peux-tu séparer les commandes de ce qu'il faut rédiger en usant du code fournit par le site df :

Voir le tuto : Le code, ça pique moins les yeux en couleur

Trop coooool ce point choco df là ! cool

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#3 13-12-2014 17:21:43

Lunatic
Membre
Lieu : Lyon
Distrib. : Fedora 24
Noyau : Linux 4.6.5-300.fc24.x86_64
(G)UI : Gnome
Inscription : 03-08-2013
Site Web

Re : Petit script « pybookmarks »

Je n'ai pas compris smolski, j'ai déjà mis entre balises « code » tout ce qui méritait de l'être, non ?

Je suis aussi sur Twitter et nouvellement sur Diaspora*
Mon blog de geekeries : HAL-9000

(J'applique la règle de proximité)

Hors ligne

#4 13-12-2014 17:59:22

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : Petit script « pybookmarks »

Ça c'est une commande :

pybookmarks.py view -t sociologie -u slate


Je l'ai modifié dans ton post#1 pour que tu vois par toi-même comment l'écrre pour obtenir :

pybookmarks.py view -t sociologie -u slate



Faire de même avec les commande précédentes, genre :

$ ./pybookmarks.py view -f ~/bookmarks.csv...


qui doit devenir :

./pybookmarks.py view -f ~/bookmarks.csv


Et le résultat encadré de balise code comme tu l'as fait, genre  :

Id : 3  ?  2014/12/13 12:21:01
 How to parse command line arguments in Python
 http://martin-thoma.com/how-to-parse-command-line-arguments-in-python/
 Tags : ['python']
 Commentaire :
Id : 2  ?  2014/12/13 11:58:02
 Multi-level argparse in Python (parsing commands like git)
 http://chase-seibert.github.io/blog/2014/03/21/python-multilevel-argparse.html
 Tags : ['python', 'programmation']
 Commentaire : Gérer les options en ligne de commande
Id : 4  ?  2014/12/13 12:39:35
 afis07
 http://afis-ardeche.blogspot.fr/2012/09/humanisme-notre-visite-chez-des.html
 Tags : ['afis', 'science']
 Commentaire : Critique de la ferme de Pierre Rabhi


Ça marche ? smile

Dernière modification par smolski (13-12-2014 18:01:16)


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#5 13-12-2014 18:06:22

Lunatic
Membre
Lieu : Lyon
Distrib. : Fedora 24
Noyau : Linux 4.6.5-300.fc24.x86_64
(G)UI : Gnome
Inscription : 03-08-2013
Site Web

Re : Petit script « pybookmarks »

Ça marche, merci smile

Je suis aussi sur Twitter et nouvellement sur Diaspora*
Mon blog de geekeries : HAL-9000

(J'applique la règle de proximité)

Hors ligne

#6 24-12-2014 22:43:21

Lunatic
Membre
Lieu : Lyon
Distrib. : Fedora 24
Noyau : Linux 4.6.5-300.fc24.x86_64
(G)UI : Gnome
Inscription : 03-08-2013
Site Web

Re : Petit script « pybookmarks »

Salut,

J'ai amélioré quelque peu l'affichage pour que les résultats de requête soit plus lisible. Par défaut, ou avec l'option "-v hr1" (hr pour human readable) ça donne ça :

1419456798.png

Y'a une vue un peu plus complète ? utile si on veut afficher les détails d'un petit nombre de signets ? qui est hr2 :

1419456882.png

Y'a également "-v cr" (cr pour computer readable) qui affiche les données complètes séparées par une tabulation. C'est pratique pour les parser avec sed ou cut par exemple.

Les signets affichés sont désormais classés.

Si ça intéresse quelqu'un de tester, voire utiliser pybookmarks, le script est là : http://filex.univ-lorraine.fr/get?k=HJ0OsfbCWcuV4lFr3EV

Je le mettrai sur github lorsque j'aurai codé la mise en place d'un fichier de configuration.

À nouveau, c'est avec intérêt que je recueillerais les critiques/remarques sur la façon dont j'ai codé le truc smile

Dernière modification par Lunatic (24-12-2014 23:11:17)


Je suis aussi sur Twitter et nouvellement sur Diaspora*
Mon blog de geekeries : HAL-9000

(J'applique la règle de proximité)

Hors ligne

Pied de page des forums