Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#251 Le 30/08/2010, à 13:09

wido

Re : TVDownloader: télécharger les médias du net !

@DamienD,
plus d'information serait la bienvenue
-quelle distribution?
32 bits ou 64 bits
Est-ce que ce bug est-il reproductif (manipulation)?

Hors ligne

#252 Le 30/08/2010, à 13:13

chaoswizard

Re : TVDownloader: télécharger les médias du net !

@DamienD : Édition > Préférences > Choisir quels plugins activer et redémarrer le logiciel.

Il va vraiment falloir que je change ce système (tout va être activé par défaut, ou la fenêtre des préférences s'ouvrira) car ça pose des problèmes à beaucoup de monde.

Dernière modification par chaoswizard (Le 30/08/2010, à 13:15)


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#253 Le 30/08/2010, à 15:35

DamienD

Re : TVDownloader: télécharger les médias du net !

Super! Ca fonctionne. Merci.;)

Hors ligne

#254 Le 30/08/2010, à 22:50

BmD_Online

Re : TVDownloader: télécharger les médias du net !

Bon, j'ai fait des changements dans le plugin Arte. Comment on fait pour poster dans le svn ? C'est possible ?
Ou bien vous préférez que je poste ici ?

Hors ligne

#255 Le 31/08/2010, à 05:05

wido

Re : TVDownloader: télécharger les médias du net !

Pour rapporter un bug c'est ici: http://code.google.com/p/tvdownloader/issues/list

New issue et tu expliques ce qui ne va pas et la manipulation que tu as fait pour avoir ce bug.

Hors ligne

#256 Le 31/08/2010, à 06:19

BmD_Online

Re : TVDownloader: télécharger les médias du net !

Non, non, je demandais pour poster un changement dans le code.

Hors ligne

#257 Le 31/08/2010, à 08:02

Vermouth

Re : TVDownloader: télécharger les médias du net !

Bein poste ici ^^ on mettra à jour.
Faudrait qu'on mette en place un système plus pratique pour avoir des plugins tierces mais demanderai un coin sur un serveur je pense mais surtout du temps XD !


Android !
\_/°<

   coin coin...

Hors ligne

#258 Le 31/08/2010, à 10:35

wido

Re : TVDownloader: télécharger les médias du net !

j'avais juste lu la question lol

Hors ligne

#259 Le 31/08/2010, à 17:33

BmD_Online

Re : TVDownloader: télécharger les médias du net !

Bon, ça devrait ressembler à ça, avec gestion des options.
3 options :
- Nombre d'émissions (de fichiers) à lister
- Définition des émisions (SD ou HD)
- Noms des fichiers selon le titre, ou nom d'origine (issu de l'URL).

Pour les noms basés sur les titres, j'effectue les conversions suivantes. Si j'en ai oublié, merci de me le signaler pour mise à jour.
- Les caractères "Espace : ? / \" sont convertis en "_".

#!/usr/bin/env python
# -*- coding:Utf-8 -*-

#########################################
# Licence : GPL2 ; voir fichier LICENSE #
#########################################

#~ Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation (version 2 ou bien toute autre version ultérieure choisie par vous).
#~ Ce programme est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails.
#~ Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même temps que ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis.

###########
# Modules #
###########

import os

from Plugin import Plugin
from Fichier import Fichier
from urllib import quote,unquote
import re,unicodedata
import time,rfc822 # for RFC822 datetime format (rss feed)
from htmlentitydefs import name2codepoint

##########
# Classe #
##########

class Arte( Plugin ):
    """Classe abstraite Plugin dont doit heriter chacun des plugins"""

    ##
    ## Arte Live Web
    ##
    
    #
    # A/ Recherche des émissions
    #
    # 1. On liste les catégories à partir de la page d'accueil.
    #    Chaque catégorie est une "émission" de la chaine Arte Live Web
    #
    # B/ Recherche des fichiers d'une émission
    #
    # 1. On recherche la page du flux RSS à partir de la page de la catégorie choisie.
    # 2. On extrait la liste des fichiers (les pages de chaque enregistrement proposé)
    # 3. On recherche le numéro eventID à partir de la page de l'enregistrement
    # 4. On recherche les détails de l'enregistrement dans la page xml associée à l'eventID
    #

    ##
    ## Arte+7
    ##
    ## Utilisation de la méthode de Pascal92
    ## http://www.encodage.org/phpBB/viewtopic.php?f=26&t=90
    ##
    
    #
    # A/ Recherche des émissions
    #
    # 1. On liste les chaines à partir de la page d'accueil.
    #    Chaque chaine est une "émission" de la chaine Arte+7
    #
    # B/ Recherche des fichiers d'une émission
    #
    # 1. On charge la page spéciale "videoArtePlusSeptChaineBaseUrl" contenant les fichiers de la chaine choisie
    # 2. On extrait la liste des fichiers (les pages ainsi que nom et date de chaque enregistrement proposé)
    # 3. On recherche le numéro de référence de la vidéo à partir de la page de l'enregistrement
    # 4. On recherche les détails de l'enregistrement dans la page xml associée à la référence
    #
    
    ##
    ## Arte Live Web
    ##
    nomArteLiveWeb = "Arte Live Web"
    # Page permettant de lister les catégories
    listeArteLiveWebCategoriesUrl = "http://liveweb.arte.tv/"
    # Expression régulière pour extraire les catégories
    listeArteLiveWebCategoriesPattern = re.compile("<a href=\"http://liveweb.arte.tv/fr/cat/(.*?)\">(.*?)</a>", re.DOTALL)
    # Rang dans le résultat de l'expression régulière précédente
    categorieArteLiveWeb_LIEN = 0
    categorieArteLiveWeb_NOM = 1
    # Base de la page catégorie, permettant de retrouver le lien du flux RSS
    videoArteLiveWebCategorieBaseUrl = "http://liveweb.arte.tv/fr/cat/"
    # Expression régulière pour extraire le lien du flux RSS
    videoArteLiveWebRSSPattern = re.compile("<a href=\"(http://download.liveweb.arte.tv/o21/liveweb/rss/home.*?\.rss)\"", re.DOTALL)

    # Expression régulière pour extraire le lien vers la page de la video, ainsi que sa date
    videoArteLiveWebVideosPattern = re.compile("<link>(http://liveweb.arte.tv/fr/video/.*?)</link>.*?<pubDate>(.*?)</pubDate>", re.DOTALL)
    #~ videoArteLiveWebEventIDPattern = re.compile("eventID=(.*?)&")
    #~ videoArteLiveWebEventIDPattern = re.compile("new LwEvent('(.*?)', '');")
    videoArteLiveWebEventIDPattern = re.compile("/media/event/(.*?)/", re.DOTALL)
    videoArteLiveWebInfosBaseUrl = "http://arte.vo.llnwd.net/o21/liveweb/events/event-" # ".xml"
    
    videoArteLiveWebTitrePattern = re.compile("<nameFr>(.*?)</nameFr>", re.DOTALL)
    videoArteLiveWebLienPatternHD = re.compile("<urlHd>(.*?)</urlHd>", re.DOTALL)
    videoArteLiveWebLienPatternSD = re.compile("<urlSd>(.*?)</urlSd>", re.DOTALL)
    #~ videoArteLiveWebDatePattern = re.compile("<dateEvent>(.*?)</dateEvent>", re.DOTALL)
    
    ##
    ## Arte+7
    ##
    nomArtePlusSept = "Arte+7"
    # Page permettant de lister les chaines
    listeArtePlusSeptChainesUrl = "http://videos.arte.tv/fr/videos/arte7"
    # Expression régulière pour extraire les chaines
    listeArtePlusSeptChainesPattern = re.compile("<a href=\"/fr/videos/chaines/(.*?)\".*?>(.*?)</a>", re.DOTALL)
    # Rang dans le résultat de l'expression régulière précédente
    categorieArtePlusSept_LIEN = 0
    categorieArtePlusSept_NOM = 1
    # Expression régulière pour extraire le channelID du lien de la chaine
    chaineArtePlusSeptChannelIDPattern = re.compile(".*?/index-(.*?)\.html", re.DOTALL)
    # Base de la page chaine, permettant de retrouver les fichiers (lien donné par "listViewUrl" dans la page principale)
    videoArtePlusSeptChaineBaseUrl = "http://videos.arte.tv/fr/do_delegate/videos/arte7/index-3211552,view,asList.html?hash=fr/list/date//1/250/channel-%channel%-program-"

    # Expression régulière pour extraire le lien vers la page de la video, son titre ainsi que sa date
    videoArtePlusSeptVideosPattern = re.compile("<a href=\"(/fr/videos/.*?\.html)\"><span class=\"teaserTitle\">(.*?)</span></a>.*?<td class=\"col2\"><em>(.*?)</em></td>", re.DOTALL)
    # Base de la page permettant de rechercher la référence de la video
    videoArtePlusSeptVideoBaseUrl = "http://videos.arte.tv"
    # Expression régulière pour extraire la référence de la vidéo à lire
    videoArtePlusSeptVideoRefPattern = re.compile("addToPlaylistOpen {ajaxUrl:'/fr/do_addToPlaylist/videos/.*?-(.*?)\.html'}", re.DOTALL)
    videoArtePlusSeptPlayerPattern = re.compile("<param name=\"movie\" value=\"(.*?\.swf)", re.DOTALL)
    # Base de la page XML décrivant la vidéo, ses liens
    videoArtePlusSeptXMLBaseURL = "http://videos.arte.tv/fr/do_delegate/videos/360_geo-%video%,view,asPlayerXml.xml"
    videoArtePlusSeptLienPatternHD = re.compile("<url quality=\"hd\">(.*?)</url>", re.DOTALL)
    videoArtePlusSeptLienPatternSD = re.compile("<url quality=\"sd\">(.*?)</url>", re.DOTALL)

    # Ordre des éléments dans le tuple "chaine"
    chaine_NOM = 1
    chaine_LIEN = 0
    
    nom = "Arte"
    url = "http://www.arte.tv/"
    
    def __init__( self ):
        Plugin.__init__(self, self.nom, self.url)
        #~ Plugin.__init__(self)
    
        self.listeChaines = {}
        self.listeFichiers = {}
        
        if os.path.exists( self.fichierCache ):
                self.listeChaines = self.chargerCache()

    def htmlentitydecode(self, s):
        # http://wiki.python.org/moin/EscapingHtml
        return re.sub('&(%s);' % '|'.join(name2codepoint), 
                lambda m: unichr(name2codepoint[m.group(1)]), s)

    def listerOptions(self):
        # Qualité à rechercher SD ou HD ?
        self.optionChoixUnique("qualite", "Qualité des vidéos", "HD", ["HD", "SD"])
        # Nombre maximum de fichiers à rechercher (0 = aucune limite)
        self.optionTexte("maxdepth", "Nombre d'enregistrementrs à rechercher (0=pas de limite)", "0")
        # Renommer les fichiers à partir du titre de l'émission
        self.optionBouleen("rename", "Renommer les fichiers à partir du titre de l'émission (attention, plusieurs enregistrements peuvent avoir le même nom)", False)

    def rafraichir( self ):
        self.afficher("Création de la liste des chaines...")

        ##
        ## Arte Live Web
        ##
        self.afficher("Récupération de la liste des catégories "+self.nomArteLiveWeb+"...")
        # On crée la chaine
        self.listeChaines[self.nomArteLiveWeb] = []
        # On recherche toutes les catégories
        for item in re.findall(self.listeArteLiveWebCategoriesPattern, self.API.getPage(self.listeArteLiveWebCategoriesUrl)):
            lien = item[self.categorieArteLiveWeb_LIEN]
            nom = item[self.categorieArteLiveWeb_NOM]
            #~ nom = unicode(nom, "iso-8859-1", "replace")
            itemLive = []
            itemLive.insert (self.chaine_LIEN, lien)
            itemLive.insert (self.chaine_NOM, nom)
            # On ajoute la catégorie trouvée si elle n'est pas déjà présente
            if (itemLive not in self.listeChaines[self.nomArteLiveWeb]):
                self.listeChaines[self.nomArteLiveWeb].append(itemLive)

        ##
        ## Arte+7
        ##
        self.afficher("Récupération de la liste des chaines "+self.nomArtePlusSept+"...")
        # On crée la chaine
        self.listeChaines[self.nomArtePlusSept] = []
        # On recherche toutes les catégories
        for item in re.findall(self.listeArtePlusSeptChainesPattern, self.API.getPage(self.listeArtePlusSeptChainesUrl)):
            lien = item[self.categorieArtePlusSept_LIEN]
            nom = item[self.categorieArtePlusSept_NOM]
            #~ nom = unicode(nom, "utf8", "replace")
            #~ nom = self.htmlentitydecode(nom)
            #~ nom = nom.encode("utf-8", "replace")
            itemPlusSept = []
            itemPlusSept.insert (self.chaine_LIEN, lien)
            itemPlusSept.insert (self.chaine_NOM, nom)
            # On ajoute la catégorie trouvée si elle n'est pas déjà présente
            if (itemPlusSept not in self.listeChaines[self.nomArtePlusSept]):
                self.listeChaines[self.nomArtePlusSept].append(itemPlusSept)

        self.sauvegarderCache(self.listeChaines)
    
    def getLienEmission(self, emission):
        #~ emission = unicode( emission, "utf8", "replace" )
        # Cherche dans quelle chaine se trouve l'émission
        #~ self.afficher("Recherche de : "+emission)
        #~ for chaine in self.listeChaines.keys():
        #~     #~ self.afficher("Chaine : "+chaine)
        chaine = self.derniereChaine
        for item in self.listeChaines[chaine]:
            s = item[self.chaine_NOM]
            #~ self.afficher("Item : "+s)
            if (cmp(s, emission)==0):
                s = item[self.chaine_LIEN]
                if (s==""):
                    return None
                else:
                    return quote(s.encode( 'ascii','ignore' ))
    
    def listerChaines( self ):
        t = self.listeChaines.keys()
        t.sort()
        for chaine in t:
            self.ajouterChaine(chaine)
    
    def listerEmissions( self, chaine ):
        t = []
        self.derniereChaine = chaine
        if self.listeChaines.has_key(chaine):
            for item in self.listeChaines[chaine]:
                s = item[self.chaine_NOM]
                #~ t.append(s.decode("iso-8859-1"))
                t.append(s)
            t.sort()
        for emission in t:
            self.ajouterEmission(chaine, emission)

    def listerFichiersArteLiveWeb( self, emission ):
        """Renvoi la liste des fichiers disponibles pour une emission donnnee"""
        # Renvoi la liste des fichiers (utilisation de la classe Fichier)
        #    [ Fichier ( nom, date, lien) , Fichier( ... ), ... ]
        if self.listeFichiers.has_key(emission):
            return self.listeFichiers[emission]
        
        lien = self.getLienEmission(emission)
        
        if lien == None:
            self.afficher ("Erreur de recherche du lien pour \""+emission+"\"")
        else:
            self.afficher("Récupération de la liste des fichiers pour \""+emission+"\"...")
            # Reconstitution du lien complet
            lien = self.videoArteLiveWebCategorieBaseUrl+lien
            # On recherche l'adresse de la page RSS
            self.afficher ("Recherche du flux RSS \""+emission+"\" à l'adresse "+lien)
            feedURL = re.search(self.videoArteLiveWebRSSPattern, self.API.getPage(lien)).group(1)

            # On recherche toutes les émissions contenues dans le flux RSS
            self.afficher ("Recherche des émissions dans le flux : "+feedURL)
            videos = re.findall(self.videoArteLiveWebVideosPattern, self.API.getPage(feedURL))

            liste = []
            if videos == None:
                return liste

            # Pour chacune des vidéos trouvées
            curDepth = 0
            for fichier in videos:
                #~ curDepth = curDepth+1
                curDepth += 1
                opt_maxDepth = int(self.getOption("maxdepth"))
                if (opt_maxDepth>0 and curDepth>opt_maxDepth):
                    break
                
                self.afficher ("Émission trouvée "+fichier[0])
                # Recherche de l'eventID dans la page de l'emission
                fichierInfosEventID_match = re.search (self.videoArteLiveWebEventIDPattern, self.API.getPage(fichier[0]))
                if fichierInfosEventID_match == None:
                    continue
                self.afficher ("... eventID : "+fichierInfosEventID_match.group(1))
                
                # Chargement de la page XML de l'eventID trouvé
                fichierInfos = self.API.getPage(self.videoArteLiveWebInfosBaseUrl+fichierInfosEventID_match.group(1)+".xml")

                titre = re.search(self.videoArteLiveWebTitrePattern, fichierInfos)
                if titre != None:
                    titre = titre.group(1)
                else:
                    curDepth -= 1 # On n'est pas tombé sur une vidéo valide (pas de titre trouvé ?!)
                    continue

                opt_qual = self.getOption("qualite")
                if opt_qual == "HD":
                    lien = re.search(self.videoArteLiveWebLienPatternHD, fichierInfos)
                else:
                    lien = re.search(self.videoArteLiveWebLienPatternSD, fichierInfos)

                if lien != None:
                    lien = lien.group(1)
                    
                    opt_rename = self.getOption("rename")
                    if opt_rename:
                        nomFichierSortie = titre.replace(" ","_")+".mp4"
                        nomFichierSortie = nomFichierSortie.replace(":","_")
                        nomFichierSortie = nomFichierSortie.replace("/","_")
                        nomFichierSortie = nomFichierSortie.replace("\\","_")
                        nomFichierSortie = nomFichierSortie.replace("?","_")
                    else:
                        nomFichierSortie = lien.split('/')[-1]
                else:
                    curDepth -= 1 # On n'est pas tombé sur une vidéo valide (pas de lien, vidéo Live à venir ??)
                    continue
                #~ date =  re.search(self.videoDatePattern, fichierInfos)
                date =  fichier[1]
                if date != None:
                    rfc_date = rfc822.parsedate(date)
                    # Format année/mois/jour, mieux pour effectuer un tri
                    date = str(rfc_date[0])+"/"+str(rfc_date[1]).zfill(2)+"/"+str(rfc_date[2]).zfill(2)
                else:
                    continue
                
                if not(lien):
                    continue
                
                self.afficher ("... Titre : "+titre)
                self.afficher ("... Date : "+date)
                self.afficher ("... Lien : "+lien)
                self.afficher ("... nomFichierSortie : "+nomFichierSortie)

                self.ajouterFichier(emission, Fichier( titre, date, lien, nomFichierSortie ) )
                liste.append(Fichier(titre, date, lien))
            self.afficher(str(len(liste))+" fichiers trouvés.")
            self.listeFichiers[emission] = liste
            #~ return liste

    def listerFichiersArtePlusSept( self, emission ):
        """Renvoi la liste des fichiers disponibles pour une emission donnnee"""
        # Renvoi la liste des fichiers (utilisation de la classe Fichier)
        #    [ Fichier ( nom, date, lien) , Fichier( ... ), ... ]
        if self.listeFichiers.has_key(emission):
            return self.listeFichiers[emission]
        
        # Code de la "chaine" Arte+7
        channel = re.search (self.chaineArtePlusSeptChannelIDPattern, self.getLienEmission(emission)).group(1)
        # Construction du lien contenant toutes les émissions de cette chaine
        lien = self.videoArtePlusSeptChaineBaseUrl.replace ("%channel%", channel)
        
        if lien == None:
            self.afficher ("Erreur de recherche du lien pour \""+emission+"\"")
        else:
            self.afficher("Récupération de la liste des fichiers pour \""+emission+"\"...")

            # On recherche toutes les émissions de la chaine
            self.afficher ("Recherche des émissions de la chaine \""+emission+"\" à l'adresse "+lien)
            videos = re.findall(self.videoArtePlusSeptVideosPattern, self.API.getPage(lien))

            liste = []
            if videos == None:
                return liste

            # Pour chacune des vidéos trouvées
            curDepth = 0
            for fichier in videos:
                #~ curDepth = curDepth+1
                curDepth += 1
                opt_maxDepth = self.getOption("maxdepth")
                if (opt_maxDepth>0 and curDepth>opt_maxDepth):
                    break
                
                self.afficher ("Émission trouvée "+fichier[0])
                
                fichierInfos = self.API.getPage(self.videoArtePlusSeptVideoBaseUrl+fichier[0])
                
                # Recherche de la référence de la vidéo dans la page de l'emission
                fichierInfosVideoRef_match = re.search (self.videoArtePlusSeptVideoRefPattern, fichierInfos)
                if fichierInfosVideoRef_match == None:
                    continue
                self.afficher ("... videoRef : "+fichierInfosVideoRef_match.group(1))

                # Recherche l'adresse du player video, pour la suite
                fichierInfosPlayer_match = re.search (self.videoArtePlusSeptPlayerPattern, fichierInfos)
                if fichierInfosPlayer_match == None:
                    continue
                self.afficher ("... Player : "+fichierInfosPlayer_match.group(1))
                
                #~ # Chargement de la page XML de la référence trouvée
                fichierInfos = self.API.getPage(self.videoArtePlusSeptXMLBaseURL.replace("%video%",fichierInfosVideoRef_match.group(1)))

                #~ file = open(self.fichierCache+"_web", "w")
                #~ file.write (fichierInfos)
                #~ file.close()

                titre = fichier[1]
                opt_qual = self.getOption("qualite")
                if opt_qual == "HD":
                    lien = re.search(self.videoArtePlusSeptLienPatternHD, fichierInfos)
                else:
                    lien = re.search(self.videoArtePlusSeptLienPatternSD, fichierInfos)
                
                if lien != None:
                    lien = lien.group(1)
                    
                    opt_rename = self.getOption("rename")
                    if opt_rename:
                        nomFichierSortie = titre.replace(" ","_")+".mp4"
                        nomFichierSortie = nomFichierSortie.replace(":","_")
                        nomFichierSortie = nomFichierSortie.replace("/","_")
                        nomFichierSortie = nomFichierSortie.replace("\\","_")
                        nomFichierSortie = nomFichierSortie.replace("?","_")
                    else:
                        nomFichierSortie = lien.split('/')[-1]
                        if nomFichierSortie.index('?')>0:
                            nomFichierSortie = nomFichierSortie.split('?')[0]
                        nomFichierSortie = nomFichierSortie+".mp4"
                    
                    #~ nomFichierSortie = titre.replace(" ","_").replace(":","_").replace("/","_")+".mp4"

                    #~ lien = lien.group(1)
                    # Workaround : on ajoute le nom du player directement ici
                    lien = lien+" -W "+fichierInfosPlayer_match.group(1)
                else:
                    continue
                date =  fichier[2]
                
                if not(lien):
                    continue
                
                self.afficher ("... Titre : "+titre)
                self.afficher ("... Date : "+date)
                self.afficher ("... Lien : "+lien)
                self.afficher ("... nomFichierSortie : "+nomFichierSortie)
                
                self.ajouterFichier(emission, Fichier( titre, date, lien, nomFichierSortie ) )
                liste.append(Fichier(titre, date, lien))
            self.afficher(str(len(liste))+" fichiers trouvés.")
            self.listeFichiers[emission] = liste
            #~ return liste

    
    def listerFichiers( self, emission ):
        if (self.derniereChaine == self.nomArteLiveWeb):
            #~ return self.listerFichiersArteLiveWeb (emission)
            self.listerFichiersArteLiveWeb (emission)
        elif (self.derniereChaine == self.nomArtePlusSept):
            #~ return self.listerFichiersArtePlusSept (emission)
            self.listerFichiersArtePlusSept (emission)
        else:
            self.afficher("Chaine non prise en compte actuellement")

Hors ligne

#260 Le 31/08/2010, à 17:49

chaoswizard

Re : TVDownloader: télécharger les médias du net !

Niquel, merci BmD_Online !
Je me suis permis de corriger un petit bug

self.optionTexte("maxdepth", "Nombre d'enregistrementrs à rechercher (0=pas de limite)", 0)
au lieu de
self.optionTexte("maxdepth", "Nombre d'enregistrementrs à rechercher (0=pas de limite)", "0")


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#261 Le 31/08/2010, à 18:36

BmD_Online

Re : TVDownloader: télécharger les médias du net !

chaoswizard a écrit :

Niquel, merci BmD_Online !
Je me suis permis de corriger un petit bug

self.optionTexte("maxdepth", "Nombre d'enregistrementrs à rechercher (0=pas de limite)", 0)
au lieu de
self.optionTexte("maxdepth", "Nombre d'enregistrementrs à rechercher (0=pas de limite)", "0")

Le mieux serait d'avoir self.OptionEntier, ou un truc du genre.
Plus loin, je suis obligé de convertir mon option en entier pour être sûr.
D'ailleurs, je ne teste pas si n'importe quoi est renvoyé au lieu d'un nombre.

Et... sans interface d'options pas facile de tester. J'ai du modifier le fichier .conf à la main pour mes tests.

Hors ligne

#262 Le 31/08/2010, à 19:01

chaoswizard

Re : TVDownloader: télécharger les médias du net !

Pourquoi tu ne testes pas avec la version de branches/dev ?

EDIT : Non, en fait, le fait de mettre 0 au lieu de "0" ne résout pas le problème...

Dernière modification par chaoswizard (Le 31/08/2010, à 19:03)


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#263 Le 31/08/2010, à 19:05

BmD_Online

Re : TVDownloader: télécharger les médias du net !

chaoswizard a écrit :

Pourquoi tu ne testes pas avec la version de branches/dev ?

EDIT : Non, en fait, le fait de mettre 0 au lieu de "0" ne résout pas le problème...

C'est ce que j'ai fait, mais je n'ai pas trouvé de fenêtre pour configurer les options. Elle existe ?

Hors ligne

#264 Le 31/08/2010, à 19:06

BmD_Online

Re : TVDownloader: télécharger les médias du net !

Ah si, je viens de trouver le bouton.
Et j'ai...

TypeError: arguments did not match any overloaded call:
  QGridLayout.addWidget(QWidget): argument 1 has unexpected type 'int'
  QGridLayout.addWidget(QWidget, int, int, Qt.Alignment alignment=0): argument 1 has unexpected type 'int'
  QGridLayout.addWidget(QWidget, int, int, int, int, Qt.Alignment alignment=0): argument 1 has unexpected type 'int'

Hors ligne

#265 Le 31/08/2010, à 19:07

chaoswizard

Re : TVDownloader: télécharger les médias du net !

Oui, vieux bug que j'ai corrigé (fait un update).


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#266 Le 31/08/2010, à 19:14

BmD_Online

Re : TVDownloader: télécharger les médias du net !

Ok, ça marche.
Mais... de quel problème tu parles en voulant remplacer "0" par 0 ?

Hors ligne

#267 Le 31/08/2010, à 19:44

buntu35

Re : TVDownloader: télécharger les médias du net !

Hello,

Bon boulot !
çà marche du tonnerre.

Petite prise de tête avec "librtmp0_2.3-2" et "rtmpdump_2.3-2" manquants mais bon ç'est pas grave...

Une petite remarque : quand l'appli est fermée, c'est normal que les téléchargements continuent en background ???

Continuez !

Pour les films de C+ cryptés... roll

Dernière modification par buntu35 (Le 31/08/2010, à 19:47)


Un système complexe qui fonctionne provient nécessairement d'un système simple qui a fonctionné.
La proposition inverse est aussi vraie : un système complexe construit à partir de zéro ne fonctionne jamais et ne peut pas être modifié pour fonctionner.

Hors ligne

#268 Le 31/08/2010, à 19:59

Vermouth

Re : TVDownloader: télécharger les médias du net !

BmD_Online a écrit :

Ok, ça marche.
Mais... de quel problème tu parles en voulant remplacer "0" par 0 ?

Alors il me semble qu'avec un entier ça devrais marcher. Mais c'est plutôt une mauvaise idée pour la pérénité du plugin XD ! J'ai mis pas mal de teste pour forcé le type dans les options (avoir le bon type de paramètre pour un type d'option donnée), et il en manque apparemment XD.

Ceci dt je prend note (ajouter les options type entier).

Une petite remarque : quand l'appli est fermée, c'est normal que les téléchargements continuent en background ???

Non XD.
Chaos ?

Dernière modification par Vermouth (Le 31/08/2010, à 20:00)


Android !
\_/°<

   coin coin...

Hors ligne

#269 Le 31/08/2010, à 20:08

k3c

Re : TVDownloader: télécharger les médias du net !

Bonjour et bravo pour ton soft.

Un détail, M6replay ne me trouvant rien, je l'ai lancé dans un terminal, comme indiqué, et cela a débloqué, mais j'ai quelques messages qui peuvent t'intéresser  (encodage inconnu)

M6Replay: 44 émissions concervées.
Arte: Récupération de la liste des fichiers pour "Chanson française"...
Arte: Recherche du flux RSS "Chanson française" à l'adresse http://liveweb.arte.tv/fr/cat/Chanson_francaise/
Arte: Recherche des émissions dans le flux : http://download.liveweb.arte.tv/o21/liveweb/rss/home-37-fr.rss
APIPrive.reponseHttpToUTF8(): encodage inconnu.
Arte: Émission trouvée http://liveweb.arte.tv/fr/video/Archie_Bronson_Outfit_en_direct_de_la_Route_du_Rock/
Arte: ... eventID : 1472
APIPrive.reponseHttpToUTF8(): encodage inconnu.
Arte: ... Titre : Archie Bronson Outfit en direct de la Route du Rock
Arte: ... Date : 2010/08/15
Arte: ... Lien : rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:liveweb/stream/1510_RDR-150810-ArchieOK_hd.mp4
Arte: Émission trouvée http://liveweb.arte.tv/fr/video/Arno_au_festival_Musiques_en_Stock/
Arte: ... eventID : 1410
APIPrive.reponseHttpToUTF8(): encodage inconnu.
Arte: ... Titre : Arno au festival Musiques en Stock
Arte: ... Date : 2010/07/21
Arte: ... Lien : rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:liveweb/stream/1388_ARNO-MES-NewDim_hd.mp4
Arte: Émission trouvée http://liveweb.arte.tv/fr/video/Cocorico_de_Patrice_Thibaud_et_Philippe_Leygnac_au_festival_d_Avignon/
Arte: ... eventID : 1409
APIPrive.reponseHttpToUTF8(): encodage inconnu.
Arte: ... Titre : Cocorico de Patrice Thibaud et Philippe Leygnac au festival d'Avignon
Arte: ... Date : 2010/07/20
Arte: ... Lien : rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:liveweb/stream/1387_cocorico_hd.mp4
Arte: 3 fichiers trouvés.
X Error: BadWindow (invalid Window parameter) 3
  Major opcode: 40 (X_TranslateCoords)
  Resource id:  0x1209c96

Debian 12 sur Thinkpad reconditionné

Hors ligne

#270 Le 31/08/2010, à 20:09

chaoswizard

Re : TVDownloader: télécharger les médias du net !

Ok, ça marche.
Mais... de quel problème tu parles en voulant remplacer "0" par 0 ?

  File "plugins/Arte.py", line 267, in listerFichiersArteLiveWeb
    opt_maxDepth = int(self.getOption("maxdepth"))
TypeError: int() argument must be a string or a number, not 'NoneType'

Le bug n'est pas facile à reproduire...
Je l'ai dans certains cas en désactivant Arte, en redémarrant le logiciel et en remettant Arte.

Une petite remarque : quand l'appli est fermée, c'est normal que les téléchargements continuent en background ???

Dans la version 0.4, c'est normal.
Déjà corrigé dans la version 0.5 (qui ne va pas tarder à sortir ; ne vous inquiétez pas, les version sortiront plus régulièrement quand le PPA sera en place !).

Pour les films de C+ cryptés...

VOD ?
Je ne sais pas si c'est possible mais ce que je suis sur, c'est que je ne le ferai pas (le but n’étant pas de faire un programme pour télécharger illégalement des vidéos).

Dernière modification par chaoswizard (Le 31/08/2010, à 20:11)


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#271 Le 31/08/2010, à 20:10

buntu35

Re : TVDownloader: télécharger les médias du net !

J'ai refais deux/ trois tests sur le problèmes que j'ai souligné tout à l'heure.

Quand on quitte l'appli via la petite croix en haut à gauche ou à droite les habitudes de chacun, le process "python Main.py" disparait. Les process "msdl -c" sont fils du premier donc disparaissent aussi.

Mais si on quitte via le menu "Quitter" alors le process "python" reste actif, les process fils aussi, d'où les download qui continuent mais l'appli n'est plus visible.

La petite croix et le menu n'ont pas le même comportement.

j'ai été clair ?? tongue


Un système complexe qui fonctionne provient nécessairement d'un système simple qui a fonctionné.
La proposition inverse est aussi vraie : un système complexe construit à partir de zéro ne fonctionne jamais et ne peut pas être modifié pour fonctionner.

Hors ligne

#272 Le 31/08/2010, à 20:12

buntu35

Re : TVDownloader: télécharger les médias du net !

Pour les films C+, c'était une blague ! ... sinon les "foudres-hadopi" vont s'abattre sur nous.  cool

Dernière modification par buntu35 (Le 31/08/2010, à 20:12)


Un système complexe qui fonctionne provient nécessairement d'un système simple qui a fonctionné.
La proposition inverse est aussi vraie : un système complexe construit à partir de zéro ne fonctionne jamais et ne peut pas être modifié pour fonctionner.

Hors ligne

#273 Le 31/08/2010, à 20:15

chaoswizard

Re : TVDownloader: télécharger les médias du net !

buntu35 a écrit :

J'ai refais deux/ trois tests sur le problèmes que j'ai souligné tout à l'heure.

Quand on quitte l'appli via la petite croix en haut à gauche ou à droite les habitudes de chacun, le process "python Main.py" disparait. Les process "msdl -c" sont fils du premier donc disparaissent aussi.

Mais si on quitte via le menu "Quitter" alors le process "python" reste actif, les process fils aussi, d'où les download qui continuent mais l'appli n'est plus visible.

La petite croix et le menu n'ont pas le même comportement.

j'ai été clair ?? tongue

Oui, oui, c'est normalement corrigé pour la prochaine version !


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#274 Le 31/08/2010, à 20:18

Vermouth

Re : TVDownloader: télécharger les médias du net !

Pour C+, je (c'est moi qui a fait ce plugin) ne récupère que les vidéo disponible sur leur site. Et encore on m'a signaler qu'il en manque...


Android !
\_/°<

   coin coin...

Hors ligne

#275 Le 01/09/2010, à 10:34

jajaX

Re : TVDownloader: télécharger les médias du net !

salut

j'ai plus le net chez moi pour l'instant (les joies du dégroupage...) mais je suis toujours le développement wink


@+
jajaX
Asus X93SM-YZ157V / Asus X93SM-YZ065V sous KDE Neon
ASUS K95VB sous Kubuntu 22.04 Jammy Jellyfish (64 bits) / ACER Aspire 5612 WLMI sous Kubuntu 18.04 Bionic Beaver (32 bits)

Hors ligne