#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 !
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 !
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 typeC'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 !
TVdownloader, on en parle ici :
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.
#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 !
#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 !
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 !
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 !
Ç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 !
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 !
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 !
... Faut pas que les utilisateurs hésitent à signaler les problèmes de ce genre !
Pas de problème !
#366 Le 30/09/2010, à 21:20
- BmD_Online
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 ?
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 !
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 !
#369 Le 30/09/2010, à 22:03
- @nne
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.
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 !
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 !
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 !
...
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 !
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 !
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 :rolleyes::P
Hors ligne