Une nouvelle version de dPluzz est dispo: dPluzz v0.2.1

-> xterm n'est plus utilisé
-> le terminal est intégré dans la fenêtre principale

Il faut installer une nouvelle dépendance: python-vte
sudo apt-get install python-vte
L'avantage c'est que tout est rassemblé dans la fenêtre principale, c'est plus clair. Soit, c'est pas vraiment plus beau... :rolleyes:


Je n'ai pas trouvé pour changer la couleur du fond noir en blanc, en Gtk2 !
Sinon, si quelqu'un veut une fonction pour se souvenir du dossier de réception, c'est faisable ! 🙂
à Gaara
Whaouh, c'est plutôt joli et sobre.
Écriture blanche sur fond noire est le mieux, je pense, pour le confort de lecture.
Merci, je laisse comme ça alors.
Maintenant s'il y a des améliorations, ce sera gadget, car le principal y est. Mais c'est pas impossible que j'améliore! ^^
Reste à trouver des choses intéressantes à télécharger :cool:

A propos, je pensais aussi à intégrer le script de nesthib, pour C+, avec un choix entre Pluzz et C+
J'ai pas encore étudié la question !
Bonsoir,

Je viens de vérifier, en fait sous 12.04 avconv est disponible dans le paquet libav-tools, je l'avais sans le savoir mais j'avais coché la case ffmpeg...
Je viens donc de tester la version 0.2.1 sans cocher, donc avec avconv, ce qui est confirmé dans le terminale, cependant les premières secondes sont toujours coupées. Le bug touche-t-il aussi avconv, ou cela vient-il de moi ?

Autre petite question, dans le script de matthieugoua, la progression était indiquée :
-->RECUPERATION DU FICHIER VIDEO
25/74
Est-ce faisable (et facile) d'ajouter un indicateur quelconque de progression, peut être "simplement" le nombre total de frames (si il est possible de le déterminer...) ou le poids total (peu importe ! )

Encore merci pour votre travail.
Chez moi les premières secondes sont coupées si j'utilise ffmpeg. Avec avconv, j'ai tout le début. Peut-être la version de libav-tools ? (j'ai 6.9.13)
Pour la progression, je veux bien essayer, je peux récupérer les données du terminal. Mais je n'ai pas le poids total de la vidéo téléchargée, il faudrait ajouter (modifier?) quelque chose dans le script bash de melixgaro.
Je ne peux pas essayer d'intégrer le script de matthieugoua, car il ne fonctionne pas chez moi. Mais tu peux essayer, il faut simplement modifier la ligne 63 de mon script:

Edit: J'ai repris la version 1.0 du script de matthieugoua, qui marche bien. (avec toutes les dépendances installées et l'adresse avec l'ID en chiffres)
Il faut simplement remplacer le pluzz.sh de melixgaro par cette version, tu auras le petit compteur:


Mais je préfère rester sur la version sans dépendances, pour que ça soit plus facile à installer et à utiliser.
Si quelqu'un trouve comment faire pour récupérer le poids total de la vidéo et modifier le script de melixgaro, je suis preneur ! 🙂
Édition du message précédant... ...et appel à contribution pour un dev bash ! 😉
Edit de l'édit: j'ai trouvé une solution sans modifier pluzz.sh
Effectivement libav-tools est en version 0.8.10 pour moi !
Gaara a écritIl faut simplement remplacer le pluzz.sh de melixgaro par cette version, tu auras le petit compteur
oui, ça permet d'avoir le gui et ça fonctionne bien !
Gaara a écritSi quelqu'un trouve comment faire pour récupérer le poids total de la vidéo et modifier le script de melixgaro, je suis preneur !
Désolé, je n'ai pas les compétences pour t'aider :-(
Nouvelle version: dPluzz v0.3, avec le script de melixgaro non modifié.

-> Ajout d'une barre de progression
-> Désactivation de la case ffmpeg lorsque le téléchargement est en cours
-> Changement de la position du bouton quitter

fakbill a écritLe script python marche bien sauf un tout petit bug:
Sur ma machine ~/Downloads n'existe pas.
Si je lance ./pluzz.py http://pluzz.francetv.fr/videos/on_n_est_pas_que_des_cobayes.htm
j'obtiens :
"Download and convertion done: '/home/xxx/Downloads/on_n_est_pas_que_des_cobayes_101508178.mkv' saved"
alors que non, le répertorie "/home/xxx/Downloads/" n'existe même pas.

je pensais avoir mis un check dans le code qui vérifiait l'existence du répertoire, mais en fait non :-) Le script est
mis à jour sur le gist.

Là où c'est étrange c'est que si je change
def save(self, target_path="~/Downloads",
en
def save(self, target_path=".",
ça ne change rien \o/. Il m'affiche toujours :
"Download and convertion done: '/home/xxxx/Downloads/on_n_est_pas_que_des_cobayes_101508178.mkv' saved"
N'étant pas en france en ce moment, je dois faire tourner le script en ssh sur un tout petit serveur donc je n'ai que des moyens de debug très très limité....mais même...je dois rater qqch d'énorme...d'où vient le "Downloads"?????
c'est parce que le default vient en fait de tout en haut du script dans la documentation docopt: [defaults: ~/Downloads]

cf http://docopt.org

il existe aussi une commande pour l'ajouter aux scripts bash. c'est vraiment chouette comme module ! ;-)
Gaara a écrit@cqfd93: Merci du retour ! 🙂 Je ne savais pas que avconv était disponible sous 12.04. C'est installé par défaut ?

@zmo: J'ai vu ta réponse sur Stack, mais rien n'a fonctionné... En fait, le but c'est de mixer un script bash et un script python, car Pluzz change souvent de méthode sur leur site. Donc si un nouveau script bash est écrit, (le bash est très fréquent ici) l'ancien pourra être facilement remplacé, sans réécrire la partie graphique. Le tout avec le moins de dépendances possibles, pour faciliter l'installation.
sauf que c'est une mauvaise idée de faire du web scrapping avec des regexps, pour un problème de théorie du langage: les pages webs sont écrites en HTML qui est un langage dont la grammaire est dite non contextuelle, alors que les expressions régulières ont une grammaire régulière. cf http://fr.wikipedia.org/wiki/Hiérarchie_de_Chomsky pour les détails plus théoriques. Mais en gros, c'est comme vouloir faire un concours de haute voltige… avec une voiture. Il y a une dimension dans laquelle la voiture ne pourra pas s'exprimer.

C'est pour ça qu'il vaut mieux utiliser les outils adequats. Il y a lxml que j'utilise dans le code en copie, ainsi que dans ma réponse sur stack overflow qui permet de naviguer dans l'arborescence de la page web à la recherche de tags en fonction de leur nom de classe, de leurs attributs voire même de leur positions relatives les uns par rapport aux autres. Ce qui fait qu'il y a moins de ligne et moins de complexité à modifier le code que j'offre qu'à réécrire des regexps. Et il se peut même qu'il soit moins souvent nécessaire de modifier le code qu'avec les regexps, étant donné que des modifications mineures de format peuvent faire planter les regexps, alors que le schema du document n'a pas changé.

De plus, toute la complexité du webscraping se résume à cette méthode:
    def retrieve_data(self):
        p = etree.HTML(requests.get(self.url, headers=self.headers).text)
        self.show_id = p.xpath('//meta[@property="og:url"]/@content')[0].split(',')[-1].split('.')[0]
        self.data = json.loads("".join(requests.get(self.data_url.format(show=self.show_id), headers=self.headers).text.split('(')[1:])[:-1])
qui récupère le contenu de la propriété meta og:url, puis la découpe en morceaux à chaque virgule, ne garde que le dernier morceau ; découpe ce dernier à chaque point, et garde le premier morceau. Ensuite, il récupère le JSON en provenance de l'API de francetv, en retirant les morceaux qui ne sont pas du JSON standard.

Ensuite, on accède directement aux valeurs du JSON directement en python. D'ailleurs, en extension, il serait facile d'ajouter les métadonnées du programme, comme sur la page "officielle", voire même transformer le petit programme en application ressemblant à netflix ou popcorntime pour ceux qui connaissent.
Gaara a écrit@cqfd93:
J'ai essayé ton script: la fenêtre s'affiche, mais j'obtiens ces erreurs:
~/work/gist3b18193d6bea07bac37c-1197f99865515877ca06cbe8e7bdc1e0c74f407d$ python3 pluzz.py --gui
Using PyQt4
Bus::open: Can not get ibus-daemon's address. 
IBusInputContext::createInputContext: no connection to ibus-daemon 
[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
python3: ../../src/xcb_io.c :179 : dequeue_pending_request:  l'assertion « !xcb_xlib_unknown_req_in_deq » a échoué.
Abandon (core dumped)
Je pense qu'il y a beaucoup de soucis avec ibus dans les noyaux de 14.04 ces temps-ci.
Uhuh… n'étant pas sous ubuntu je ne peux aider. Je n'ai pas ce drôle d'oiseau qu'est ibus d'installé sur mes machines. mais surtout j'ai l'impression que t'as d'autres problèmes liés à ton Xorg.
merci zmo pour le petit blabla sur la théorie du langage. Intéressant.
Je suis d'accord avec toi. Il est plus propre d'utiliser un outil dédié pour l'analyse de la page html, xml, json ou autre. Mais dans mon cas, le bash est presque ma langue maternelle comparée au python. Comme les gens s'impatientaient 🙂, j'ai voulu satisfaire tout le monde avec un script bash vite fait bien fait.
Si on veut faire des choses plus sophistiquées, le python est tout indiqué ; c'est sûr.
oh mon Dieu, J'ai regardé l'article wiki sur la hiérarchie de Chomsky. J'ai ouvert une boîte de Pandore. Il me faudra un après-midi pour creuser la question. En plus l'article n'est pas très abordable par un néophyte ; d'ailleurs la page de discussion est longue comme un bras. Bon, un truc de plus dans la liste de chose à faire 😉
à Gaara
Merci pour la nouvelle version.
J'étais curieux de voir comment tu récupère la progression. J'ai enfin trouvé un moment pour regarder ton code. Voici les retours :

1/ chez moi, la progression ne marche pas. Testé avec http://pluzz.francetv.fr/videos/sera_inseme_,102376728.html, ça passe de suite à 100%. La vidéo est bien obtenue dans sa totalité. Mon xubuntu est an anglais, mais je ne crois pas que ça change le blabla d'avconv.
2/ est-ce que le dernier répertoire de destination est utilisée par défaut ? Ce serait bon de préremplir le champ avec la dernière valeur. Mais ça implique de mettre en cache des données quelque part.
3/ lors de mes tests, je relançais plusieurs fois de suite le téléchargement. Dans la fenêtre de log, avconv me demande si je veux écraser ou pas. Et je me suis aperçu que c'est un pseudo-terminal, pas simplement une fenêtre de visualisation. Là je disais oui. La vidéo est rapatriée. Et quand c'est fini, la fenêtre de dPluzz, me demandant d'écraser ou pas le fichier existant, apparaît. Je réponds oui et la vidéo est supprimée mais pas retéléchargeé. J'espère que mon blabla est clair, je commence à beuguer 😃

Sinon, c'est bien et le code python est clair !
bon, j'ai fait quelques updates sur le code:

* Tout d'abord, j'ai ajouté un test pour vérifier que le répertoire cible existe bien.
* J'ai ajouté aussi une traduction en français, si vous avez LANGUAGE=fr_FR@UTF-8 les messages seront en français
* N.B.: seul le message d'aide est resté non-traduit
* j'ai aussi fait ça pour vous, vu qu'on est sur ubuntu-fr ;-)
* j'ai séparé l'interface graphique du code principal
* j'ai changé l'interface en ligne de commande
* j'ai ajouté une erreur pour ceux qui lanceraient le package sous python2
pypluzz gui                                                            lance l'interface graphique
pypluzz http://pluzz.francetv.fr/videos/doctor_who.html fetch          récupère l'émission
pypluzz http://pluzz.francetv.fr/videos/doctor_who.html get            liste les métadonnées
pypluzz http://pluzz.francetv.fr/videos/doctor_who.html get synopsis   récupère une métadonnée
pypluzz http://pluzz.francetv.fr/videos/doctor_who.html show           fait un sommaire de l'émission
ensuite, j'ai créé un dépôt github:

* https://github.com/guyzmo/pypluzz

et j'ai uploadé sur pypi:

* http://pypi.python.org/pypluzz

donc pour l'installer, maintenant c'est tout simple:
    apt-get install python3-pip
    pip3 install pypluzz # (ou pip-3.2/pip-3.4 selon votre version de python3)
pour avoir l'interface graphique, il faut installer `pyqt4` ou `pyqt5`.
Sinon c'est pas grave, ça marche quand même en ligne de commande

Enfin, pour ceux qui veulent continuer à l'utiliser, n'hésitez pas à ouvrir des tickets
sur github, notamment si jamais vous remarquez avant moi que le site pluzz a encore changé,
et que le code ne marche plus.

En appel à contributions, s'il y a des gens qui peuvent trouver s'il y a une API du même
genre que:
http://webservices.francetelevisions.fr/tools/getInfosOeuvre/v2/?idDiffusion={show}&catalogue=Pluzz&callback=webserviceCallback_{show}
qui permette de lister toutes les émissions par catégorie/chaîne etc… Ça me permettrait
de faire une super évolution du code :-)
melixgaro a écrit J'étais curieux de voir comment tu récupère la progression. J'ai enfin trouvé un moment pour regarder ton code. Voici les retours :

1/ chez moi, la progression ne marche pas. Testé avec http://pluzz.francetv.fr/videos/sera_in … 76728.html, ça passe de suite à 100%. La vidéo est bien obtenue dans sa totalité. Mon xubuntu est an anglais, mais je ne crois pas que ça change le blabla d'avconv.
2/ est-ce que le dernier répertoire de destination est utilisée par défaut ? Ce serait bon de préremplir le champ avec la dernière valeur. Mais ça implique de mettre en cache des données quelque part.
3/ lors de mes tests, je relançais plusieurs fois de suite le téléchargement. Dans la fenêtre de log, avconv me demande si je veux écraser ou pas. Et je me suis aperçu que c'est un pseudo-terminal, pas simplement une fenêtre de visualisation. Là je disais oui. La vidéo est rapatriée. Et quand c'est fini, la fenêtre de dPluzz, me demandant d'écraser ou pas le fichier existant, apparaît. Je réponds oui et la vidéo est supprimée mais pas retéléchargeé. J'espère que mon blabla est clair, je commence à beuguer big_smile
Je ne fais que récupérer les données du temps pour la progression. Au début du script bash, je reprend "Duration: 01:01:38.00" par exemple. Je convertis tout ça en secondes, et je compare avec "time=" lors du téléchargement.
Une règle de 3, et c'est parti.
1/ La méthode de récupération de "time=" était un peu aléatoire (en repérant les espaces). S'il y avait une erreur, (par exemple à la fin du téléchargement), le % était mis à 100 d'office avec une exception. J'ai changé la méthode d'extraction(en repérant "time=" et bitrate=" pour prendre le chiffre entre les deux), ça devrait être mieux. Ce qui est bizarre, c'est que ça marche chez moi, avec l'adresse que tu m'as donné...
2/ Oui, je pensais aussi faire une sauvegarde du répertoire utilisé, mais j'ai préféré explorer d'autres fonctionnalités avant de mettre ça en place. Ça oblige en effet de créer un fichier .conf (à moins qu'il y ait un moyen d'écrire directement dans le script !! 😛) Ce sera implémenté dans la v0.4, avec l'activation de la case ffmpeg par défaut.
3/ Ça a été tout mon problème, d'obtenir une fenêtre bash interactive, pour justement pouvoir répondre à cette question: "File 'machin' already exist. Overwrite ? y/N" !! Mais c'est fait.
Après, la vidéo se télécharge dans le répertoire source, pas le choix. Ensuite, pour ne pas créer de doublon, le fichier se déplace dans le répertoire demandé. Mais si le fichier existe déjà, je demande s'il faut écraser le fichier déjà là. Mais cette question ne demande pas s'il faut retélécharger ! Mais bon tu as raison, cette question ne sert pas à grand chose. Je viens de voir que si on retélécharge la même émission sa semaine suivante, le nom du fichier change.

Donc voilà, c'est corrigé: dPluzz v0.3.1

-> Correction du bug de la barre de progression
-> La case ffmpeg se réactive à la fin du téléchargement
@zmo:
C'est clair que vu mon niveau, je ne peux pas te contredire, mais tout ça c'est du chinois pour moi ! Je débute en python (et en programmation en général) depuis le début d'année, avec un simple "Hello World". Donc pour moi, du moment que ça marche, je suis ravi!
Ton script en ligne de commande à marché chez moi, et j'ai l'impression que le téléchargement va plus vite. Ceci dit, pour l'interface graphique, tout le monde ne tourne pas en Qt, surtout avec Ubuntu. Donc pourquoi installer 100Mo de dépendances, alors que ça peut marcher avec Gtk2/3 ? :/
Et pour pouvoir modifier ton script, il faut avoir de solides connaissances. J'ai regardé un peu, j'ai rien compris ! :lol:
Tu as parlé de lxml, justement, j'ai étudié hier l'implémentation du moteur de recherche Pluzz dans dPluzz, pour ne pas avoir à chercher les adresses à la main. C'est pas encore fait, mais j'avance. J'ai découvert aussi Beautifulsoup.
J'avance à mon rythme !
Gaara a écrit@zmo:
C'est clair que vu mon niveau, je ne peux pas te contredire, mais tout ça c'est du chinois pour moi ! Je débute en python (et en programmation en général) depuis le début d'année, avec un simple "Hello World". Donc pour moi, du moment que ça marche, je suis ravi!
je comprends, et s'il y a un bon conseil que je peux te donner, vu que tu démarres en python, n'apprends que le python3 et abandonne le python2, ça t'évitera d'avoir à subir une période de transition (j'ai arrêté de faire du python2 depuis 6 mois ;-) ).
Ton script en ligne de commande à marché chez moi, et j'ai l'impression que le téléchargement va plus vite. Ceci dit, pour l'interface graphique, tout le monde ne tourne pas en Qt, surtout avec Ubuntu. Donc pourquoi installer 100Mo de dépendances, alors que ça peut marcher avec Gtk2/3 ? :/
Parce que j'ai fait près de 10 ans de développement avec Gtk en C et en python (il y a même des bouts de codes à moi dans pygtk), mais force est de constater que le gtk c'est, certes, un peu plus léger et un peu plus joli. Mais c'est surtout moins stable, moins portable et moins bien conçu – côté programmation – que le Qt. Sachant que comme Gtk n'est pas Gnome et Qt n'est pas KDE, les seules dépendances nécessaires sont celles de la bibliothèques qui ne font que quelques dizaines de méga, plus python-qt4 qui fait aussi une quinzaine de mégas.
Et pour pouvoir modifier ton script, il faut avoir de solides connaissances. J'ai regardé un peu, j'ai rien compris ! :lol:
c'est pourquoi j'ai commencé à séparer les modules:

je définie la classe PluzzMovie: https://github.com/guyzmo/pypluzz/blob/master/pluzz/pluzz.py#L44

qui a pour méthodes:
    PluzzMovie:
        __init__(url)
        retrieve_data()
        save(target, callback, avconv_path, verbose)
        keys()
        items()
        __getitem__(key)
l'idée de cette classe, c'est de faire en sorte qu'elle se comporte comme un dictionnaire de métadonnées pour le film. Donc les trois dernières méthodes permettent d'implémenter une fonction comme:
    def print_metadata():
        m = PluzzMovie('http://pluzz.francetv.fr/videos/doctor_who.html')
        m.retrieve_data()
        for k,v in m.items():
            print("{}: {}".format(k,v))
qui affiche toutes les métadonnées du film.

C'est ce que je fais pour la fonctionnalité `get()` dans https://github.com/guyzmo/pypluzz/blob/master/pluzz/pluzz.py#L173

Ensuite, la méthode la plus compliquée de la classe c'est la méthode `save()`: https://github.com/guyzmo/pypluzz/blob/master/pluzz/pluzz.py#L66

Mais je l'ai rendue compliquée afin d'en simplifier l'usage. Donc voilà les étapes essentielles:
p = requests.get(list(filter(lambda x: x['format'] == 'm3u8-download', self.data['videos']))[0]['url'], headers=self.headers).text
video_url = list(filter(lambda l: "index_2" in l, p.split()))[0]
peut se décomposer comme suit:
# récupère l'url de la playlist m3u8 dans la liste des vidéos dans les métadonnées:
url = list(filter(lambda x: x['format'] == 'm3u8-download', self.data['videos']))[0]['url']
# récupère la playlist
p = requests.get(url).text
# pour chaque ligne de la page, ne garde que celle qui contient `index_2`, et récupère la première correspondance
video_url = list(filter(lambda l: "index_2" in l, p.split()))[0]
ensuite j'utilise subprocess pour appeler `avconv` et j'en récupère l'output pour le traiter:
p = subprocess.Popen([avconv_path, '-i', video_url] + self.avconv_args + [self.dest_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out = io.TextIOWrapper(p.stdout)
err = io.TextIOWrapper(p.stderr)
toutefois, le problème, c'est que avconv écrit sur stdout et sur stderr… Donc j'ai du utiliser une technique ancestrale: utiliser `select()` sur les descripteurs de fichiers pour savoir quand avconv a dit quelque chose:
        while p.poll() == None:
            ret = select.select([out.fileno(), err.fileno()], [], [])
ensuite pour chacun des deux (stdout et stderr), on appelle la fonction `output_parser()` définie ici: https://github.com/guyzmo/pypluzz/blob/master/pluzz/pluzz.py#L69
            for fd in ret[0]
                if fd == out.fileno():
                    output_parser(out.readline())
                if fd == err.fileno():
                    output_parser(err.readline())
dans cette fonction, j'utilise une technique de gens qui font du python: j'utilise un dictionnaire mis par défaut dans un argument comme variable statique. Ça permet de stocker des informations locales à la fonction sans avoir une variable globale, ou définir une classe pour une tâche aussi peu importante que de parser des lignes et afficher du texte. C'est la variable `env` qui joue ce rôle là.

Cette fonction utilise les trois regex précompilées: https://github.com/guyzmo/pypluzz/blob/master/pluzz/pluzz.py#L59
qui permette de parser l'output d'avconv, une ligne à la fois. Pour permettre d'utiliser cette même fonction pour faire avancer
une progressbar graphique ou en ligne de commande, cette fonction appelle une callback externe à la fonction `save()` et à
la class `PluzzMovie`, avec les paramètres utiles pour traiter une progression.

Et cette fonction, elle est alors toute simple: https://github.com/guyzmo/pypluzz/blob/master/pluzz/pluzz.py#L144 !
def show_progress(position, total, spent, start):
    width = (get_term_size()[0]*0.6)
    adv = position/total
    eta = int((time.time() - start)*total/position)
    print((_('Download and convert')+': [{: <'+str(int(width))+'s}] {:0.0%} ETA: {}s/{}s').format('#'*int(width*adv), adv, spent, eta), end='\r')
Ce qui rend l'usage de la fonction `save()` trivial:
                m.save(args['--target'],
                       callback=show_progress,
                       avconv_path=args['--avconv'],
                       verbose=args['--verbose'])
Bien que j'ai du copier cette autre fonction https://github.com/guyzmo/pypluzz/blob/master/pluzz/pluzz.py#L121 qui permet de connaître la taille
du terminal à chaque rafraîchissement permettant de garder la barre bien proportionnée si on redimensionne le terminal.

Donc au final, rien ne t'empèche d'utiliser mon code pour le lier à ton interface en Gtk ;-)
Tu as parlé de lxml, justement, j'ai étudié hier l'implémentation du moteur de recherche Pluzz dans dPluzz, pour ne pas avoir à chercher les adresses à la main. C'est pas encore fait, mais j'avance. J'ai découvert aussi Beautifulsoup.
J'avance à mon rythme !
lxml utilise (entre autre) BeautifulSoup comme moteur (il utilise aussi html5lib), et est plus puissant dans sa capacité de chercher et de construire/déconstruire un HTML. Je te recommande vivement de l'étudier plus en profondeur.
Merci beaucoup pour ces explications, je m'y plongerais un des ces jours. Un truc que je ne sais pas faire, c'est de multiplier les commandes en une seule ligne.
C'est pourquoi je ne comprend pas grand chose à ton code, vu que c'est "comprimé".
Et pour le moment, à chaque fonction que je cherche, je googlise ma question, sauf quand je suis déjà tombé sur le problème. Mais je pense que c'est pour tout le monde pareil, sauf les étudiants qui ont leurs cours !
J'ai quand même réussi à intégrer un moteur de recherche. Reste à affiner tout ça, surtout au niveau des titres, car le choix proposé n'est pas évident. (pas de détail sur la chaine, la date etc..)
Mais ça renvoie l'adresse automatiquement, reste à choisir le dossier et de dl. Je suis content que ça marche!

Voilà, c'est tout chaud !
La version dPluzz0.4 vient de sortir !!

-> Ajout d'un moteur de recherche pour trouver les adresses des vidéos facilement
-> Agrandissement de la fenêtre !

Edit: j'oubliais: une dépendance en plus: python-bs4
sudo apt-get install python-bs4
Nouvelle version de dPluzz, c'est par ici: dPluzz v0.4.2

-> Sauvegarde du répertoire vidéos (via un fichier dPluzz.conf)
-> Correction d'un bug (fermeture avec la croix)
-> Correction de la case ffmpeg qui restait active lors du téléchargement

Enjoy 🙂