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.

#351 Le 16/09/2010, à 19:54

wido

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

sur l'actualisation des plugins c'était de voir si il y avait de nouveau plugin disponible par exemple, un peu comme tucan

Hors ligne

#352 Le 16/09/2010, à 20:41

alex2423

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

chaoswizard a écrit :
alex2423 a écrit :

Est ce que c'est normal que je n'ai pas dans la liste de m6replay :
- zone interdit
- capital
?

Est-ce qu'ils sont dispos sur leur site ?

Je viens d'aller sur le site M6Raplay avec le nouveau lecteur Flash 64 bits et il est vrai que Capital et Zone Interdit n'y est plus.
J'étais tellement habitué à avoir ces 2 émissions que je m'étais pas posé la question si elles étaient sur le site.

Est ce que ces 2 émissions ne seraient plus diffusés sur la M6 ? Et bahh, cela fait bizzare, cela fait des années et des années que ces 2 émissions sont diffusées.

Hors ligne

#353 Le 16/09/2010, à 21:03

k3c

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

Je voulais récupérer les Samantha sur France4, mais j'ai des erreurs

Pluzz: Récupération de la liste des fichiers pour "Samantha oups"...
Pluzz: 5 fichiers trouvés.
Exception in thread Thread-21:
Traceback (most recent call last):
  File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.6/threading.py", line 484, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/share/tvdownloader/Downloader.py", line 93, in lancerTelechargement
    self.telecharger( "msdl -c " + fichier + " -o \"" + fichierSortie + "\"" )
  File "/usr/share/tvdownloader/Downloader.py", line 119, in telecharger
    self.process = subprocess.Popen( arguments, stdout = subprocess.PIPE, stderr = subprocess.STDOUT )
  File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
    errread, errwrite)
  File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
    raise child_exception
OSError: [Errno 2] Aucun fichier ou dossier de ce type

C'est un problème connu ?


Debian 12 sur Thinkpad reconditionné

Hors ligne

#354 Le 16/09/2010, à 21:04

k3c

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

J'oubliais, TVDownloader 0.5, sur Ubuntu 10.04


Debian 12 sur Thinkpad reconditionné

Hors ligne

#355 Le 16/09/2010, à 22:16

chaoswizard

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

k3c a écrit :

Je voulais récupérer les Samantha sur France4, mais j'ai des erreurs

Pluzz: Récupération de la liste des fichiers pour "Samantha oups"...
Pluzz: 5 fichiers trouvés.
Exception in thread Thread-21:
Traceback (most recent call last):
  File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.6/threading.py", line 484, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/share/tvdownloader/Downloader.py", line 93, in lancerTelechargement
    self.telecharger( "msdl -c " + fichier + " -o \"" + fichierSortie + "\"" )
  File "/usr/share/tvdownloader/Downloader.py", line 119, in telecharger
    self.process = subprocess.Popen( arguments, stdout = subprocess.PIPE, stderr = subprocess.STDOUT )
  File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
    errread, errwrite)
  File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
    raise child_exception
OSError: [Errno 2] Aucun fichier ou dossier de ce type

C'est un problème connu ?

Bizarre, je viens de tester chez moi, ça fonctionne.
Tu as essayé de prendre celui de quelle date ?


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#356 Le 16/09/2010, à 22:43

k3c

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

J'ai essayé de prendre les 5, mais sur un autre ordinateur, c'est en train de télécharger, faut que je regarde les différences entre mon portable (pb) et mon netbook (ok) ...

Désolé, j'ai l'impression de te faire perdre ton temps, je vais investiguer.


Debian 12 sur Thinkpad reconditionné

Hors ligne

#357 Le 22/09/2010, à 12:35

buntu35

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


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

#358 Le 26/09/2010, à 09:24

@nne

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

Bonjour,

J'ai installé TvDownloader hier. J'avais configuré un autre dossier que le dossier proposé par défaut mais l’application ne voulait plus démarrer. Pour régler le problème, je suis aller supprimer les fichiers conf. Après ça, l'application démarrait normalement.

Ce matin, re-belotte, impossible d'ouvrir l'application, la barre de récupération des données d'Arte tourne sans arrêt sans résultat. J'ai de nouveau dû virer le fichier conf pour qu'elle démarre.

Sinon, elle est très bien cette application. smile

#359 Le 30/09/2010, à 16:00

@nne

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

Désolée de réveiller tout le monde mais Arte Live Web vient de transformer son site, ce qui fait de TvDownloader ne marche plus (en ce qui concerne Arte+7, même topo, changement de site web).

Une mise à jour serait la bienvenue. Merci d'avance ! smile

#360 Le 30/09/2010, à 18:00

BmD_Online

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

Je vais essayer de voir ça ce week-end si j'ai du temps.

Hors ligne

#361 Le 30/09/2010, à 18:15

@nne

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

BmD_Online a écrit :

Je vais essayer de voir ça ce week-end si j'ai du temps.

Merci !

#362 Le 30/09/2010, à 19:51

Vermouth

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

lhumeurbleue a écrit :

Désolée de réveiller tout le monde mais Arte Live Web vient de transformer son site, ce qui fait de TvDownloader ne marche plus (en ce qui concerne Arte+7, même topo, changement de site web).

Une mise à jour serait la bienvenue. Merci d'avance ! smile

Ça c'est sûr que ça risque de se produire souvent !
Malheureusement on n'y peu rien, on ne peut que mettre à jour les plugins quand un site est modifié !

Faut pas que les utilisateurs hésite à signaler les problème de ce genre wink !


Android !
\_/°<

   coin coin...

Hors ligne

#363 Le 30/09/2010, à 19:54

BmD_Online

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

Je viens de finir Arte Live Web (pas testé de téléchargement mais ça semble bon).
Arte+7 c'est un peu plus complexe à mettre à jour, mais je suis dessus.

Edit : c'est bon, ça télécharge bien pour Live Web.

Dernière modification par BmD_Online (Le 30/09/2010, à 19:55)

Hors ligne

#364 Le 30/09/2010, à 20:18

@nne

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

BmD_Online a écrit :

Je viens de finir Arte Live Web (pas testé de téléchargement mais ça semble bon).
Arte+7 c'est un peu plus complexe à mettre à jour, mais je suis dessus.

Edit : c'est bon, ça télécharge bien pour Live Web.

Où peut-on trouver la mise à jour ?

#365 Le 30/09/2010, à 20:19

@nne

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

Vermouth a écrit :

... Faut pas que les utilisateurs hésitent à signaler les problèmes de ce genre wink !

Pas de problème ! smile

#366 Le 30/09/2010, à 21:20

BmD_Online

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

lhumeurbleue a écrit :
BmD_Online a écrit :

Je viens de finir Arte Live Web (pas testé de téléchargement mais ça semble bon).
Arte+7 c'est un peu plus complexe à mettre à jour, mais je suis dessus.

Edit : c'est bon, ça télécharge bien pour Live Web.

Où peut-on trouver la mise à jour ?

Sur mon disque dur.:D

Attends que j'ai terminé avec Arte+7...

Hors ligne

#367 Le 30/09/2010, à 21:58

k3c

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

Idée d'amélioration pour TVDownloader :  récupérer les films et émissions de la BBC.

Bon, OK, il faudra un proxy pour avoir une adresse IP en Angleterre, mais sinon il y a des trucs sympas.


Debian 12 sur Thinkpad reconditionné

Hors ligne

#368 Le 30/09/2010, à 22:01

@nne

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

BmD_Online a écrit :
lhumeurbleue a écrit :

... Où peut-on trouver la mise à jour ?

Sur mon disque dur.:D

Attends que j'ai terminé avec Arte+7...

Ha ha ha ! wink

#369 Le 30/09/2010, à 22:03

@nne

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

k3c a écrit :

Idée d'amélioration pour TVDownloader :  récupérer les films et émissions de la BBC.

Bon, OK, il faudra un proxy pour avoir une adresse IP en Angleterre, mais sinon il y a des trucs sympas.

Bonne idée en effet étant donné que leurs émissions ne peuvent être vues que sur leur territoire. Et comment on se procure une adresse IP en Grande-Bretagne ?

#370 Le 30/09/2010, à 22:23

k3c

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

avec l'extension Firefox FoxyProxy, et en indiquant des proxys UK

j'ai une bonne doc quelque part, je la posterai plus tard.

En gros, récupérer des proxys UK, les valider, rentrer une liste de proxys validés dans FoxyProxy, et ça roule !


Debian 12 sur Thinkpad reconditionné

Hors ligne

#371 Le 30/09/2010, à 22:33

BmD_Online

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

Voila une version du plugin Arte qui devrait fonctionner.
Changements :
- Prise en compte du nouveau format des sites Arte Live Web & Arte+7
- Affichage de la date pour les émissions Arte+7, au lieu de "aujourd'hui", "hier"... (code récupéré sur Arte+7Recorder).
- Dans la liste des émissions Arte+7, on a les différents programmes mais aussi les chaines (vocabulaire du site Arte+7).
Attention, si aucune limite du nombre d'émission n'est définie en paramètre, la récupération de la liste d'émissions par chaine peut-être vraiment très longue (je suis justement dans le cas, pendant que je poste ce message).

Pour utiliser cette version, pensez à effacer le fichier ~/.tvdownloader/cache/Arte.cache
Ensuite, remplacez le fichier /usr/share/tvdownloader/plugin/Arte.py (ne pas laisser de sauvegarde de l'ancienne version dans le même répertoire).

#!/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/programmes à partir de la page d'accueil.
    #    Chaque chaine/programme 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
    # Version initiale
    #~ listeArteLiveWebCategoriesPattern = re.compile("<a href=\"http://liveweb.arte.tv/fr/cat/(.*?)\">(.*?)</a>", re.DOTALL)
    # Mise a jour du 30/09/2010
    listeArteLiveWebCategoriesPattern = re.compile("<li><a href=\"http://liveweb.arte.tv/fr/cat/(.*?)\" class=\"accueil\">(.*?)</a></li>", 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("new LwEvent\('(.*?)', ''\);", 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
    # Version initiale
    #~ listeArtePlusSeptChainesUrl = "http://videos.arte.tv/fr/videos/arte7"
    # Mise a jour du 30/09/2010
    listeArtePlusSeptChainesUrl = "http://videos.arte.tv/fr/videos"
    # Expression régulière pour extraire les chaines
    # Version initiale
    #~ listeArtePlusSeptChainesPattern = re.compile("<a href=\"/fr/videos/chaines/(.*?)\".*?>(.*?)</a>", re.DOTALL)
    # Mise a jour du 30/09/2010
    listeArtePlusSeptChainesPattern = re.compile("<input type=\"checkbox\" value=\"(.*?)\"/>.*?<a href=\"#\">(.*?)</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
    # Version initiale
    #~ chaineArtePlusSeptChannelIDPattern = re.compile(".*?/index-(.*?)\.html", re.DOTALL)
    # Mise a jour du 30/09/2010
    # --> inutile à présent
    # Base de la page chaine, permettant de retrouver les fichiers (lien donné par "listViewUrl" dans la page principale)
    # Version initiale
    #~ videoArtePlusSeptChaineBaseUrl = "http://videos.arte.tv/fr/do_delegate/videos/arte7/index-3211552,view,asList.html?hash=fr/list/date//1/250/channel-%channel%-program-"
    # Mise a jour du 30/09/2010
    videoArtePlusSeptChaineBaseUrl = "http://videos.arte.tv/fr/do_delegate/videos/index-%channel%-3188698,view,asList.html?hash=fr/list/date//1/250/"

    # 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)

    # Fonction parse_date recopiée de l'application arte+7recorder
    time_re = re.compile("^\d\d[h:]\d\d$")
    fr_monthes = ["janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"]
    de_monthes = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
    def parse_date(self, date_str):
        date_array = date_str.split(",")
        if self.time_re.search( date_array[-1].strip() ) is None:
            return ""
        time_ = date_array[-1].strip()
        if date_array[0].strip() in ("Aujourd'hui", "Heute"):
            date_ = time.strftime( "%Y/%m/%d" )
        elif date_array[0].strip() in ("Hier", "Gestern"):
            date_ = time.strftime( "%Y/%m/%d", time.localtime(time.time() - (24*60*60)) )
        else:
            array = date_array[1].split()
            day = array[0].strip(".")
            month = array[1]
            for arr in (self.fr_monthes, self.de_monthes):
                if array[1] in arr:
                    month = "%02d" % (arr.index(array[1])+1)
            year = array[2]
            date_ = "%s/%s/%s" % (year, month, day)
        #print date_ + ", " + time_
        return date_ + ", " + time_
    
    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]
            self.afficher("... Catégorie "+nom+" : "+lien+"...")
            #~ 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]
            self.afficher("... Chaine "+nom+" : "+lien+"...")
            #~ 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)
        channel = self.getLienEmission(emission)
        if channel == None:
            self.afficher ("Erreur de recherche du code pour \""+emission+"\"")
        else:
            self.afficher("Récupération de la liste des fichiers pour \""+emission+"\"("+channel+")...")
            # 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 = int(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 =  self.parse_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

#372 Le 30/09/2010, à 23:00

alex2423

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

k3c a écrit :

avec l'extension Firefox FoxyProxy, et en indiquant des proxys UK

j'ai une bonne doc quelque part, je la posterai plus tard.

En gros, récupérer des proxys UK, les valider, rentrer une liste de proxys validés dans FoxyProxy, et ça roule !

Ce n'a jamais été le plus dur de configuré des proxy, le plus dur, c'est de trouver des ip. C'est toujours lutté comme pas possible

Hors ligne

#373 Le 01/10/2010, à 07:17

@nne

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

k3c a écrit :

avec l'extension Firefox FoxyProxy, et en indiquant des proxys UK. j'ai une bonne doc quelque part, je la posterai plus tard. En gros, récupérer des proxys UK, les valider, rentrer une liste de proxys validés dans FoxyProxy, et ça roule !

D’accord et comment on fait pour avoir une adresse IP en Grande-Bretagne ?

#374 Le 01/10/2010, à 07:23

@nne

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

BmD_Online a écrit :

...
Pour utiliser cette version, pensez à effacer le fichier ~/.tvdownloader/cache/Arte.cache
Ensuite, remplacez le fichier /usr/share/tvdownloader/plugin/Arte.py (ne pas laisser de sauvegarde de l'ancienne version dans le même répertoire).
...

La sauvegarde, c'est le fichier arte.pyc, je suppose.?

Voilà, mise à jour installée, fichier .pyc supprimé, et ça à l'air de marcher. Il faut maintenant que je l'essaye plus avant.

Merci BmD ! smile

Dernière modification par lhumeurbleue (Le 01/10/2010, à 07:59)

#375 Le 01/10/2010, à 07:44

alex2423

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

lhumeurbleue a écrit :
k3c a écrit :

avec l'extension Firefox FoxyProxy, et en indiquant des proxys UK. j'ai une bonne doc quelque part, je la posterai plus tard. En gros, récupérer des proxys UK, les valider, rentrer une liste de proxys validés dans FoxyProxy, et ça roule !

D’accord et comment on fait pour avoir une adresse IP en Grande-Bretagne ?

J'avais demandé juste avant ton message l'ip. Ce n'est peut etre pas la peine de demander la meme chose roll:rolleyes::P

Hors ligne