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.

#151 Le 03/08/2010, à 20:05

BmD_Online

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

pascal92 a écrit :

Mais c'est normal big_smile
c'est la norme (erronée certes) du 1 Mo= 1024 Ko etc...

J'ai fait le download du même fichier avec la boite à outil de TVO,

Au passage après indexation ce fichier fait :143 Mo (150 652 627 octets)

Alors pour ton resume qui ne se fait pas...
Il y a un stream qui n'est pas téléchargé par msdl :stream: application 0 RTP/AVP 96
d'où la différence de taille

Ah ok. Depuis le début je suis persuadé que mes enregistrements sont incomplets ! hmm
Comme je ne les ai pas indexés, j'ai pas vérifié la fin.

Hors ligne

#152 Le 06/08/2010, à 16:15

chaoswizard

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

Bon, la version 0.4 ne va pas tarder !

@BmD_Online : Tu as modifié ton plugin Arte ? (la dernière version que j'ai vient du poste 131)


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#153 Le 06/08/2010, à 22:13

BmD_Online

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

chaoswizard a écrit :

@BmD_Online : Tu as modifié ton plugin Arte ? (la dernière version que j'ai vient du poste 131)

Dans le doute, je te remets la dernière version, mais à priori je n'ai rien changé.

#!/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"""

    # Nombre maximum de fichiers à rechercher (0 = aucune limite)
    maxDepth = 3
    
    ##
    ## 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)
    videoArteLiveWebLienPattern = re.compile("<urlHd>(.*?)</urlHd>", 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"
    videoArtePlusSeptLienPattern = re.compile("<url quality=\"hd\">(.*?)</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)
        
        cache = self.chargerCache()
        if cache:
            self.listeChaines = cache
        else:
            self.listeChaines = {}
            self.rafraichir()
        self.listeFichiers = {}

    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 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()
        return t
    
    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()
        return t

    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
                if (self.maxDepth>0 and curDepth>self.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
                lien = re.search(self.videoArteLiveWebLienPattern, fichierInfos)
                if lien != None:
                    lien = lien.group(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)

                # On a le lien brut, il faut l'analyser pour pouvoir effectuer un téléchargement convenable avec rtmpdump
                # un lien du type
                #   rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:liveweb/stream/1399_Suds_Arles_JUSTIN_ADAMS_100715_hd.mp4
                # est téléchargé avec la commande
                #   rtmpdump --host arte.fcod.llnwd.net --port 1935 --protocol RTMP --app a2306/o25 --playpath MP4:liveweb/stream/1399_Suds_Arles_JUSTIN_ADAMS_100715_hd.mp4 --flv 'Justin Adams & Juldeh Camara.mp4'

                urlPattern = re.compile("rtmp://(?P<host>.*?)/(?P<app>.*?)/(?P<playpath>\w*?\:.*)", re.DOTALL)
                urlParts = re.search(urlPattern, lien)
                filePath = urlParts.group("playpath")
                (dirName, fileName) = os.path.split(filePath)
                #~ (fileBaseName, fileExtension)=os.path.splitext(fileName)
                urlRtmpMask = "rtmpdump --host %host% --port 1935 --protocol RTMP --app %app% --playpath %playpath% --flv '%filename%'"
                lien = urlRtmpMask
                lien = lien.replace ("%host%", urlParts.group("host"))
                lien = lien.replace ("%app%", urlParts.group("app"))
                lien = lien.replace ("%playpath%", urlParts.group("playpath"))
                #~ lien = lien.replace ("%filename%", titre+fileExtension)
                lien = lien.replace ("%filename%", fileName)

                self.afficher ("... Commande : "+lien)
                
                
                self.API.ajouterFichier( Fichier( titre, date, lien ) )
                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
                if (self.maxDepth>0 and curDepth>self.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]
                lien = re.search(self.videoArtePlusSeptLienPattern, fichierInfos)
                if lien != None:
                    #~ lien = lien.group(1)
                    # Workaround : on ajoute le nom du player directement ici
                    lien = lien.group(1)+" -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.API.ajouterFichier( Fichier( titre, date, lien ) )
                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

#154 Le 07/08/2010, à 11:40

chaoswizard

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

Ok, merci.
On l'a intégré dans la prochaine version.


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#155 Le 07/08/2010, à 17:13

Vermouth

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

Bien le bonjour à tous !

Voici venu la version 0.4 de TVDownloader !
Avec en exclusivité les plugins Arte (merci Bmd_Online) et M6Replay !
Vous aurez également la joie de trouver des barres de progression ! Des boites de dialogue !

Retrouvez dès maintenant votre programme fétiche dans sa dernière version sur son site !

A noter pour les développeurs de plugin, pas mal de nouveauté dans l'API et pas mal de méthode passé en "DEPRECATED". Voir la doc.
La compatibilité avec les plugins compatible avec la version 0.3 du programme est conservé même si certaine méthode ne sont plus visible.
Notez aussi que la mémorisation des informations données aux méthodes de Plugin ajouterFichier, ajouterEmission et ajouterChaine est automatique et qu'une fois des informations mémorisées par une de ces méthodes, la méthode de listage correspondante (listerFichiers, listerEmissions et listerCaines) n'est plus appelé pendant l'exécution du programme. A utilisé avec réflexion donc.


Android !
\_/°<

   coin coin...

Hors ligne

#156 Le 07/08/2010, à 17:27

Regenesis

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

Bonjour,

Pour toutes les fenêtres "merci de patienter", on est censé patienter combien de temps ? Parce que j'ai déjà attendu plusieurs dizaines de minutes et il ne semble rien se passer cool

Hors ligne

#157 Le 07/08/2010, à 17:36

chaoswizard

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

Regenesis a écrit :

Bonjour,

Pour toutes les fenêtres "merci de patienter", on est censé patienter combien de temps ? Parce que j'ai déjà attendu plusieurs dizaines de minutes et il ne semble rien se passer cool

Pas si longtemps...
Lors de l'actualisation de quel plugin ? (ça doit être marqué sur la fenêtre).

Dernière modification par chaoswizard (Le 07/08/2010, à 17:37)


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#158 Le 07/08/2010, à 17:36

Regenesis

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

Il s'agit du plugin pour M6 Replay.

Hors ligne

#159 Le 07/08/2010, à 17:38

chaoswizard

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

Bizarre : il met environ 1 min à s'actualiser chez moi...

Tu as quoi comme retours si tu lances le programme via une console ?


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#160 Le 07/08/2010, à 17:43

Vermouth

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

Peut être a t-il un ordinosaure !

PS:est-ce que l'usage du processeur (CPU) est élevé ? (système > administration >moniteur système >ressource)

Dernière modification par Vermouth (Le 07/08/2010, à 17:44)


Android !
\_/°<

   coin coin...

Hors ligne

#161 Le 07/08/2010, à 17:44

chaoswizard

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

Vermouth a écrit :

Peut être a t-il un ordinosaure !

Ouais, mais plus de 10 min quand même...


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#162 Le 07/08/2010, à 17:45

Regenesis

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

A noter que j'ai le même problème pour le plugin d'Arte, et que dans les 2 cas la fenêtre en question est vide, seul le titre est là.

Aucun message d'erreur dans la console, au contraire bizarrement cela semble avoir débloqué l'actualisation de ces chaines. Mais cette fenêtre vide revient sans cesse, sans pour autant rendre le programme inopérant. Suis-je le seul à avoir ce souci ?

EDIT : non ce n'est pas un ordinosaure ^^ Ni un problème de connexion.

Dernière modification par Regenesis (Le 07/08/2010, à 17:46)

Hors ligne

#163 Le 07/08/2010, à 18:20

inbox

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

Je viens de tenter la lecture du flux suivant

rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:liveweb/stream/1471_Wynton_Marsalis_-_Jazz_in_Marciac_01082010_hd.mp4

J'obtiens un fichier vide. neutral

A noter le "_-_" dans le lien. Cela me semble bizarre comme structure.

[EDIT] J'ai testé les deux autres liens d'Arte live web (jazz & blues) et j'obtiens le même résultat.

Dernière modification par inbox (Le 07/08/2010, à 18:24)


Un problème résolu ? Indiquez le en modifiant le titre du sujet.

Hors ligne

#164 Le 07/08/2010, à 18:27

chaoswizard

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

inbox a écrit :

Je viens de tenter la lecture du flux suivant

rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:liveweb/stream/1471_Wynton_Marsalis_-_Jazz_in_Marciac_01082010_hd.mp4

J'obtiens un fichier vide. neutral

A noter le "_-_" dans le lien. Cela me semble bizarre comme structure.

[EDIT] J'ai testé les deux autres liens d'Arte live web (jazz & blues) et j'obtiens le même résultat.

Je viens juste de tester : le téléchargement fonctionne chez moi.
Tu utilises bien la version 0.4 ?
Tu as rtmpdump 2.3 ?

Dernière modification par chaoswizard (Le 07/08/2010, à 18:28)


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#165 Le 07/08/2010, à 18:37

inbox

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

Laisse tomber, ça fonctionne. C'est parce que j'étais connecté en Freewifi. Apparemment, ce type de flux est bloqué dans ce cas.

En connexion normale, le téléchargement est en cours. big_smile

Par contre j'ai récupéré un fichier ".swf" qui a un nom très peu parlant : player_9-3188338-data-4807088.swf

Dernière modification par inbox (Le 07/08/2010, à 18:46)


Un problème résolu ? Indiquez le en modifiant le titre du sujet.

Hors ligne

#166 Le 07/08/2010, à 18:43

quatrelleman

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

Salut !
Que dire d'autre que bravo et merci ! Je suis depuis quelques temps déjà linuxien et ce topic et l'exemple parfait des raisons qui m'ont amené chez le pingouin. Une communauté enthousiaste, réactive et pro !

Que reste t'il a windows ? Un troupeau de brebis égarées ?

Encore une fois merci et bravo pour votre travail les gars !


Linux est la solution à ton problème. Au fait c'est quoi ton problème ?

Hors ligne

#167 Le 07/08/2010, à 18:48

chaoswizard

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

inbox a écrit :

Laisse tomber, ça fonctionne. C'est parce que j'étais connecté en Freewifi. Apparemment, ce type de flux est bloqué dans ce cas.

En connexion normale, le téléchargement est en cours. big_smile

Par contre j'ai récupéré un fichier ".swf" qui a un nom très peu parlant : player_9-3188338-data-4807088.swf

Ouais, pas génial les noms...
Il faudra ajouter au plugin Arte le renommage (il existe ce mot ?!) du fichier...


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#168 Le 07/08/2010, à 18:56

Vermouth

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

J'ai oublier d'annoncer une nouvelle:
Une personne c'est jointe à notre projet et sera en charge de développer une interface en ligne de commande !

Pour les prochaines améliorations (je ne sais pas si ça a été cité), on va se consacrer à gérer les options pour les plugins.


Android !
\_/°<

   coin coin...

Hors ligne

#169 Le 07/08/2010, à 20:36

Vermouth

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

Version 0.4.1 qui corrige le non téléchargement des émissions de Canal+ en ligne !


Android !
\_/°<

   coin coin...

Hors ligne

#170 Le 07/08/2010, à 21:12

B082H

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

Salut,

1er test avec la v0.4 en mode graphique:
le popup "Merci de patienter" reste affiché lors de la mise à jour du plugin M6replay, alors que bande passante internet, CPUs et RAM sont ok (arrêt de TVdownloader au bout de 15 min...)

2nd test avec la v0.41 via terminal: ok, mais à noter le message suivant:
M6Replay: Récupération de la liste des émissions ...
APIPrive: reponseHttpToUTF8(): encodage inconnu.

Hors ligne

#171 Le 07/08/2010, à 21:26

Vermouth

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

APIPrive: reponseHttpToUTF8(): encodage inconnu.

C'est pas un message grave.
C'est important en cas de problème d'accent.


Android !
\_/°<

   coin coin...

Hors ligne

#172 Le 07/08/2010, à 21:36

wido

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

Porter sous archlinux:
http://aur.archlinux.org/packages.php?ID=39486

Installation

yaourt -S tvdownloader

Hors ligne

#173 Le 07/08/2010, à 21:40

wido

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

J'ai eu un souci avec ce programme, j'ai python2 et python3 d'installé,

voici ce que j'ai:

$ tvdownloader
Le repertoire de travail /home/wido/.tvdownloader/cache n'existe pas ; on le cree
Le repertoire de travail /home/wido/.tvdownloader/conf n'existe pas ; on le cree
Le repertoire de travail /home/wido/.tvdownloader/plugins n'existe pas ; on le cree
Le repertoire de travail /home/wido/TVDownloader n'existe pas ; on le cree
Traceback (most recent call last):
  File "/usr/share/tvdownloader/MainWindow.py", line 362, in rafraichirPlugin
    self.api.rafraichirPlugin( self.comboBoxSite.currentText() )
  File "/usr/share/tvdownloader/APIPrive.py", line 88, in rafraichirPlugin
    self.pluginData[self.listePlugin[p]] = [[],{},{}]
KeyError: ''
Traceback (most recent call last):
  File "/usr/share/tvdownloader/MainWindow.py", line 362, in rafraichirPlugin
    self.api.rafraichirPlugin( self.comboBoxSite.currentText() )
  File "/usr/share/tvdownloader/APIPrive.py", line 88, in rafraichirPlugin
    self.pluginData[self.listePlugin[p]] = [[],{},{}]
KeyError: ''

dès que je désinstalle python3, je n'ai plus de problème, les plugins se chargent correctement et l'affichage des séries présente.

Dernière modification par wido (Le 07/08/2010, à 21:41)

Hors ligne

#174 Le 07/08/2010, à 21:50

Vermouth

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

Bogue enregistré.
Essaie de redémarre le programme.


Android !
\_/°<

   coin coin...

Hors ligne

#175 Le 07/08/2010, à 21:50

chaoswizard

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

wido a écrit :

Porter sous archlinux:
http://aur.archlinux.org/packages.php?ID=39486

Installation

yaourt -S tvdownloader

Ah bien le PKGBUILD !

Juste un truc :

ar -xv ${srcdir}/${_pkgname}_${pkgver}.deb || return 1

C'est pas plutôt tar ?

EDIT : Non, j'ai rien dit, ça marche...

Par contre, notre paquet deb contient une version de msdl qui est disponible sur AUR sur Arch.
Ça peut être intéressant de l'enlever du paquet et de la rajouter aux dépendances.

Dernière modification par chaoswizard (Le 07/08/2010, à 23:54)


Ubuntu ==> Debian ==> Archlinux

Hors ligne