#76 Le 04/04/2013, à 13:12
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
Merci Julien
J'ai testé avec succès pour plusieurs vidéos comme
http://www.d8.tv/d8-series/pid5313-d8-h.html
par contre le --resume devrait être optionnel
python d8_julien.py http://www.d8.tv/d8-art-de-vivre/pid5205-d8-a-vos-regions.html
rtmpdump -r "rtmp://geo2-vod-fms.canalplus.fr/ondemand/geo2/1304/A_VOS_REGIONS_BA_130402_CAN_328928_video_HD.mp4" -o "A_vos_régions.mp4" --resume
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
ERROR: Last tag size must be greater/equal zero (prevTagSize=-629966759) and smaller then filesize, corrupt file!
gg@gg-SATELLITE-L755:~$ rtmpdump -r "rtmp://geo2-vod-fms.canalplus.fr/ondemand/geo2/1304/A_VOS_REGIONS_BA_130402_CAN_328928_video_HD.mp4" -o "A_vos_régions.mp4"
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting ...
INFO: Connected...
Starting download at: 0.000 kB
INFO: Metadata:
INFO: duration 401.54
INFO: moovPosition 81208653.00
INFO: audiocodecid mp4a
INFO: width 640.00
INFO: height 360.00
INFO: videocodecid avc1
INFO: avcprofile 66.00
INFO: avclevel 30.00
INFO: aacaot 2.00
INFO: audiosamplerate 44100.00
INFO: audiochannels 2.00
INFO: videoframerate 25.00
INFO: trackinfo:
INFO: length 17708032.00
INFO: timescale 44100.00
INFO: language eng
INFO: sampledescription:
INFO: sampletype mp4a
INFO: length 10036000.00
INFO: timescale 25000.00
INFO: language eng
INFO: sampledescription:
INFO: sampletype avc1
79789.031 kB / 401.52 sec (99.9%)
Download complete
gg@gg-SATELLITE-L755:~$
et je ne trouve pas l'id de la vidéo pour le match PSG Barcelone, je vais regarder
http://www.d8.tv/d8-sport/pid5653-d8-fc … e-psg.html
Edit: le ! dans le titre
Touche pas à mon poste !
plante la vidéo, donc
titre = titre.replace('/','_').replace('!','')
Dernière modification par k3c (Le 04/04/2013, à 13:24)
Archlinux sur Xiaomi Air 13
Hors ligne
#77 Le 04/04/2013, à 14:02
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
Bon la page sur PSG Barcelone ne contient pas de video...
Après quelques modifs mineures (passage de l'id dans la fonction, nom vid et pas id qui est un mot réservé...)
voici une version qui a l'air pas mal
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# D8 version 0.3 par k3c et Julien974
from urllib2 import urlopen
from lxml import objectify
import bs4 as BeautifulSoup
import sys, subprocess, re
a = urlopen(sys.argv[1]).read()
s = BeautifulSoup.BeautifulSoup(a)
url = ''
def get_HD(d8_cplus,vid):
zz = urlopen('http://service.canal-plus.com/video/rest/getVideosLiees/'+d8_cplus+'/'+vid).read()
root = objectify.fromstring(zz)
isGoodId = False
for element in root.iter():
if element.tag == 'ID':
if element.text == str(vid) :
isGoodId = True
if element.tag == 'HD' and isGoodId :
url = element.text
arguments = 'rtmpdump -r "%s" -o "%s.mp4" --resume' % (url, titre)
print arguments
process = subprocess.Popen(arguments, stdout=subprocess.PIPE, shell=True).communicate()[0]
isGoodId = False
sys.exit()
m = re.search('pid\d{6}',sys.argv[1])
if m is None:
try:
vid = s.findAll('div',attrs={"class":u"block-common block-player-programme"})[0]('canal:player')[0]['videoid']
except:
print 'impossible de trouver l\'id de la video'
sys.exit()
else:
vid = m.group(0)
titre = s.findAll('meta',attrs={"property":u"og:title"})[0]['content'].replace(' ','_')
titre = titre.replace('/','_').replace('!','')
for x in ['d8','cplus']:
get_HD(x,vid)
Archlinux sur Xiaomi Air 13
Hors ligne
#78 Le 04/04/2013, à 14:15
- JUL1EN094
Re : TVDownloader: télécharger les médias du net ! [2]
Merci Julien
J'ai testé ave...
Salut k3c,
Merci pour ton retour.
- Tu veux bien nous faire le --resume optionnel ? Je n'ai pas touché à cette partie, pas sur de savoir comment faire. J'ai repris le code sur le fil de discussion précédent et ai juste ajouté la condition isGoodId, qui est sensé valider le fait que nous sommes dans les infos correspondant au bon ID (le fichier récupéré contients les infos pour plusieurs emissions).
- Pour le match moi je ne vois pas video de disponible sur le site,... donc pas d'id. Normal à mon sens.
- Pour les '!', tu risques/peux avoir le cas sur d'autres caractères, pas seulement le '!'. Perso je repasse sur le string avec la fonction suivante, qui t'assurera d'avoir un nom de fichier compatible avec n'importe quel système de fichier (= pas de caractères incorrects) :
#for RemoveDisallowedFilenameChars()
import unicodedata
import string
validFilenameChars = "-_.() %s%s" % (string.ascii_letters, string.digits)
def RemoveDisallowedFilenameChars(filename):
cleanedFilename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore')
return ''.join(c for c in cleanedFilename if c in validFilenameChars)
Encore merci pour ton excellent travail et a bientôt.
Hors ligne
#79 Le 04/04/2013, à 14:16
- JUL1EN094
Re : TVDownloader: télécharger les médias du net ! [2]
on s'est croisé hihi.
Hors ligne
#80 Le 04/04/2013, à 15:13
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
@ julien
Pour le --resume finalement la vidéo récalcitrante marche, donc je ne sais pas
Merci pour ta fonction, je l'ai utilisée, et j'ai fait des petites modifs, histoire que pylint me donne la moyenne :-)
j'ai ajouté d8 ou cplus dans le nom du fichier avant .mp4 pour savoir d'où on vient.
dernière version
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# D8 version 0.5 par k3c et Jul1en094
from urllib2 import urlopen
from lxml import objectify
import bs4 as BeautifulSoup
import sys, subprocess, re
import unicodedata
import string
validFilenameChars = "-_.() %s%s" % (string.ascii_letters, string.digits)
def removeDisallowedFilenameChars(filename):
"Remove invalid filename characters"
cleanedFilename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore')
cleanedFilename = cleanedFilename.replace(' ', '_')
return ''.join(c for c in cleanedFilename if c in validFilenameChars)
def getHD(d8_cplus, titre, vid):
"Get video url and download"
titre = removeDisallowedFilenameChars(titre)
zz = urlopen('http://service.canal-plus.com/video/rest/getVideosLiees/'+d8_cplus+'/' + vid).read()
root = objectify.fromstring(zz)
isGoodId = False
for element in root.iter():
if element.tag == 'ID':
if element.text == str(vid) :
isGoodId = True
if element.tag == 'HD' and isGoodId:
url = element.text
arguments = 'rtmpdump -r "%s" -o "%s_%s.mp4" --resume' % (url, titre, d8_cplus)
print arguments
subprocess.Popen(arguments, stdout=subprocess.PIPE, shell=True).communicate()[0]
isGoodId = False
sys.exit()
def main():
"main function"
a = urlopen(sys.argv[1]).read()
s = BeautifulSoup.BeautifulSoup(a)
m = re.search('pid\d{6}', sys.argv[1])
if m is None:
try:
vid = s.findAll('div', attrs={"class":u"block-common block-player-programme"})[0]('canal:player')[0]['videoid']
except:
print 'impossible de trouver l\'id de la video'
sys.exit()
else:
vid = m.group(0)
titre = s.findAll('meta', attrs={"property":u"og:title"})[0]['content']
for x in ['d8','cplus']:
getHD(x, titre, vid)
if __name__ == '__main__':
main()
Dernière modification par k3c (Le 05/04/2013, à 07:40)
Archlinux sur Xiaomi Air 13
Hors ligne
#81 Le 04/04/2013, à 17:01
- ynad
Re : TVDownloader: télécharger les médias du net ! [2]
@ 11gjm
merci pour l’explication...
Hors ligne
#82 Le 04/04/2013, à 17:45
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
La version précédente faisait une erreur pour télécharger la série H, donc voilà un fix
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# D8 version 0.5.1 par k3c et Jul1en094
from urllib2 import urlopen
from lxml import objectify
import bs4 as BeautifulSoup
import sys, subprocess, re
import unicodedata
import string
validFilenameChars = "-_.() %s%s" % (string.ascii_letters, string.digits)
def removeDisallowedFilenameChars(filename):
"Remove invalid filename characters"
filename = filename.decode('ASCII', 'ignore')
cleanedFilename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore')
cleanedFilename = cleanedFilename.replace(' ', '_')
return ''.join(c for c in cleanedFilename if c in validFilenameChars)
def getHD(d8_cplus, titre, vid):
"Get video url and download"
titre = removeDisallowedFilenameChars(titre)
zz = urlopen('http://service.canal-plus.com/video/rest/getVideosLiees/'+d8_cplus+'/' + vid).read()
root = objectify.fromstring(zz)
isGoodId = False
for element in root.iter():
if element.tag == 'ID':
if element.text == str(vid) :
isGoodId = True
if element.tag == 'HD' and isGoodId:
url = element.text
arguments = 'rtmpdump -r "%s" -o "%s_%s.mp4" --resume' % (url, titre, d8_cplus)
print arguments
subprocess.Popen(arguments, stdout=subprocess.PIPE, shell=True).communicate()[0]
isGoodId = False
sys.exit()
def main():
"main function"
a = urlopen(sys.argv[1]).read()
s = BeautifulSoup.BeautifulSoup(a)
m = re.search('pid\d{6}', sys.argv[1])
if m is None:
try:
vid = s.findAll('div', attrs={"class":u"block-common block-player-programme"})[0]('canal:player')[0]['videoid']
except:
print 'impossible de trouver l\'id de la video'
sys.exit()
else:
vid = m.group(0)
titre = s.findAll('meta', attrs={"property":u"og:title"})[0]['content']
for x in ['d8','cplus']:
getHD(x, titre, vid)
if __name__ == '__main__':
main()
Dernière modification par k3c (Le 05/04/2013, à 07:41)
Archlinux sur Xiaomi Air 13
Hors ligne
#83 Le 05/04/2013, à 09:55
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
Au fait le script de KSV (pour télécharger les sites qui font du Adobe Http Dynamic Streaming) a visiblement été porté en Python
Archlinux sur Xiaomi Air 13
Hors ligne
#84 Le 06/04/2013, à 15:32
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
J'ai fait un script pour télécharger les vidéos de NRJ, basé sur le plugin XBMC.
Je ne vais pas dire que les vidéos sont géniales, mais ça utilise pyamf, une première pour moi.
:-)
# -*- coding: utf-8 -*-
# os and lib modules
import subprocess
import sys
import urllib2
import shlex
# pyamf
from pyamf.remoting.client import RemotingService
# parseDOM
import bs4 as BeautifulSoup
import unicodedata
import string
__addonID__ = "plugin.video.NRJ12Replay"
__author__ = "k3c,JUL1EN094 ,vilain_mamuth"
__date__ = "05-04-2013"
__version__ = "1.0"
__credits__ = "Merci aux auteurs des autres addons replay du dépôt Passion-XBMC et de la communauté open-source"
# Web variable
INFOSITE = "http://prod-kernnrj12v5.integra.fr/videoinfo"
validFilenameChars = "-_.() %s%s" % (string.ascii_letters, string.digits)
def removeDisallowedFilenameChars(filename):
"Remove invalid filename characters"
filename = filename.decode('ASCII', 'ignore')
cleanedFilename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore')
cleanedFilename = cleanedFilename.replace(' ', '_')
return ''.join(c for c in cleanedFilename if c in validFilenameChars)
def get_soup(url):
"analyse de la page par BeautifulSoup"
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1')
sou = urllib2.urlopen(req).read()
soup = BeautifulSoup.BeautifulSoup(sou)
try:
mediaId = soup.findAll('div', attrs={"class":u"img-une"})[0]('img')[0]['id']
# on enlève mediaId_
mediaId = mediaId[8:]
except:
print 'impossible de trouver l\'id de la video'
sys.exit()
return mediaId
def get_url(url, mediaId):
"appel à pyamf pour l'adresse de la vidéo"
client = RemotingService(url)
vi = client.getService('Nrj_VideoInfos')
mi = vi.mediaInfo(mediaId)
url_episode = mi["url"]
titre = mi["title"].replace(' ','_')
return url_episode, titre
#######################################################################################################################
# BEGIN !
#######################################################################################################################
def main():
"main function"
mediaId = get_soup(sys.argv[1])
url_episode, titre = get_url(INFOSITE, mediaId)
cmds = 'msdl -c --no-proxy %s -s 5 -o %s.mp4' % (url_episode, titre)
arguments = shlex.split( cmds )
print arguments
p = subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
stdout, stderr = p.communicate()
if p.returncode != 0:
print "Erreur : le sous-process s\'est terminé avec (le code d\'erreur est " + str(p.returncode) + ")"
if __name__ == '__main__':
main()
Archlinux sur Xiaomi Air 13
Hors ligne
#85 Le 09/04/2013, à 14:40
- ynad
Re : TVDownloader: télécharger les médias du net ! [2]
Bonjour,
pas de retour sur le script nrj(12) de k3c... j'ai installé pyafm, mais des mess d'erreurs
Hors ligne
#86 Le 09/04/2013, à 15:26
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
@ ynad
Tu peux poster les messages d'erreur ?
Archlinux sur Xiaomi Air 13
Hors ligne
#87 Le 09/04/2013, à 16:30
- thom83
Re : TVDownloader: télécharger les médias du net ! [2]
Bonjour,
J'ai fait un essai qui montre des erreurs, mais qui télécharge avec un débit d'environ 100 ko/s :
~$ python Bureau/Scripts-TV-Replay/NRJ.py http://www.nrj12.fr/replay-4203/toutes-les-emissions-en-replay-4204/media/video/671332-crimes-a-bordeaux.html
['msdl', '-c', '--no-proxy', 'http://r.nrj.fr/mogador/web/00193232_h264_12.mp4', '-s', '5', '-o', 'CRIMES.mp4']
download [ CRIMES.mp4 ]
Host: [ 95.81.165.1:80 ] connected!
get_filesize CRIMES.mp4: stat() error
No such file or directory
http resume: no such file "CRIMES.mp4", not resuming
redirect to http://95.81.147.19/1UWRWhAEJgo07hftIzFBeC-4iE-vZJsyuTUA=/mogador/web/00193232_h264_12.mp4
Host: [ 95.81.147.19:80 ] connected!
get_filesize CRIMES.mp4: stat() error
No such file or directory
http resume: no such file "CRIMES.mp4", not resuming
Après avoir stoppé le programme à 3 %, le fichier de 30Mo est tout à fait lisible avec VLC.
J'ai cherché à utiliser ce script pour les flux de cherie25 (Les Tudors). Sans succès.
~$ python Bureau/Scripts-TV-Replay/NRJ.py http://www.cherie25.fr/replay-4272/media/video/668987-le-pardon-royal.html
impossible de trouver l'id de la video
J'ai voulu utiliser rtmpsrv pour trouver la commande à lancer. Là, c'est une erreur sur iptables qui me bloque
~$ sudo iptables -t nat -A OUTPUT -p tcp –dport 1935 -j REDIRECT
[sudo] password for thom:
Bad argument `–dport'
Try `iptables -h' or 'iptables --help' for more information.
Finalement, pour cherie25, Adblock Plus donne l'adresse de la video qui peut être obtenue grâce à wget.
Dernière modification par thom83 (Le 09/04/2013, à 16:51)
Hors ligne
#88 Le 09/04/2013, à 17:18
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
@ thom83
Pour iptables, c'est des commandes du type
sudo iptables -t nat -A OUTPUT -p tcp --dport 1935 -j REDIRECT
sudo iptables -t nat -D OUTPUT -p tcp --dport 1935 -j REDIRECT
mais rtmpsrv ne va rien trouver, vu que ce n'est pas une commande rtmpdump
Edit
Le script qui suit télécharge les Tudors, je n'ai rien testé d'autre, et il serait mieux d'avoir un script unique
# -*- coding: utf-8 -*-
# os and lib modules
import subprocess
import sys
import urllib2
import shlex
# pyamf
from pyamf.remoting.client import RemotingService
# parseDOM
import bs4 as BeautifulSoup
import unicodedata
import string
__addonID__ = "plugin.video.NRJ12Replay"
__author__ = "k3c,JUL1EN094 ,vilain_mamuth"
__date__ = "05-04-2013"
__version__ = "1.0"
__credits__ = "Merci aux auteurs des autres addons replay du dépôt Passion-XBMC et de la communauté open-source"
# Web variable
#WEBROOT = "http://www.nrj12.fr"
#WEBSITE = WEBROOT + "/replay-4203/collectionvideo/"
INFOSITE = "http://prod-kernnrj12v5.integra.fr/videoinfo"
validFilenameChars = "-_.() %s%s" % (string.ascii_letters, string.digits)
def removeDisallowedFilenameChars(filename):
"Remove invalid filename characters"
filename = filename.decode('ASCII', 'ignore')
cleanedFilename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore')
cleanedFilename = cleanedFilename.replace(' ', '_')
return ''.join(c for c in cleanedFilename if c in validFilenameChars)
def get_soup(url):
"analyse de la page par BeautifulSoup"
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1')
sou = urllib2.urlopen(req).read()
soup = BeautifulSoup.BeautifulSoup(sou)
print "le findAll "
try:
mediaId = soup.findAll('div', attrs={"class":u"page_video"})[0]('img')[0]['id']
# on enlève mediaId_
mediaId = mediaId[8:]
except:
print 'impossible de trouver l\'id de la video'
sys.exit()
return mediaId
def get_url(url, mediaId):
"appel à pyamf pour l'adresse de la vidéo"
client = RemotingService(url)
vi = client.getService('Nrj_VideoInfos')
mi = vi.mediaInfo(mediaId)
url_episode = mi["url"]
titre = mi["title"].replace(' ','_')
return url_episode, titre
#######################################################################################################################
# BEGIN !
#######################################################################################################################
def main():
"main function"
mediaId = get_soup(sys.argv[1])
url_episode, titre = get_url(INFOSITE, mediaId)
cmds = 'msdl -c --no-proxy %s -s 5 -o %s.mp4' % (url_episode, titre)
arguments = shlex.split( cmds )
print arguments
p = subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
stdout, stderr = p.communicate()
if p.returncode != 0:
print "Erreur : le sous-process s\'est terminé avec (le code d\'erreur est " + str(p.returncode) + ")"
if __name__ == '__main__':
main()
Dernière modification par k3c (Le 09/04/2013, à 17:59)
Archlinux sur Xiaomi Air 13
Hors ligne
#89 Le 09/04/2013, à 19:59
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
Un script unique pour cherie25 et nrj
# -*- coding: utf-8 -*-
# os and lib modules
# cherie25 et nrj v 0.1 k3c
import subprocess
import sys
import urllib2
import shlex
from urlparse import urlparse
# pyamf
from pyamf.remoting.client import RemotingService
# parseDOM
import bs4 as BeautifulSoup
import unicodedata
import string
__addonID__ = "plugin.video.NRJ12_cherie25"
__author__ = "k3c"
__date__ = "05-04-2013"
__version__ = "0.1"
__credits__ = "Merci aux auteurs des autres addons replay du dépôt Passion-XBMC et de la communauté open-source"
INFOSITE = "http://prod-kernnrj12v5.integra.fr/videoinfo"
mediaId = ''
validFilenameChars = "-_.() %s%s" % (string.ascii_letters, string.digits)
def removeDisallowedFilenameChars(filename):
"Remove invalid filename characters"
filename = filename.decode('ASCII', 'ignore')
cleanedFilename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore')
cleanedFilename = cleanedFilename.replace(' ', '_')
return ''.join(c for c in cleanedFilename if c in validFilenameChars)
def get_soup(url):
"analyse de la page par BeautifulSoup"
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1')
sou = urllib2.urlopen(req).read()
soup = BeautifulSoup.BeautifulSoup(sou)
print "le findAll "
zz = urlparse(sys.argv[1])
try:
if 'cherie25' in zz.netloc:
mediaId = soup.findAll('div', attrs={"class":u"page_video"})[0]('img')[0]['id']
elif 'nrj' in zz.netloc:
mediaId = soup.findAll('div', attrs={"class":u"img-une"})[0]('img')[0]['id']
else:
print "cette video ne vient ni de nrj12 ni de cherie25"
sys.exit()
# on enlève mediaId_
mediaId = mediaId[8:]
# print mediaId
except:
print 'impossible de trouver l\'id de la video'
sys.exit()
return mediaId
def get_url(url, mediaId):
"appel à pyamf pour l'adresse de la vidéo"
client = RemotingService(url)
vi = client.getService('Nrj_VideoInfos')
mi = vi.mediaInfo(mediaId)
url_episode = mi["url"]
titre = mi["title"].replace(' ','_')
return url_episode, titre
#######################################################################################################################
# BEGIN !
#######################################################################################################################
def main():
"main function"
mediaId = get_soup(sys.argv[1])
url_episode, titre = get_url(INFOSITE, mediaId)
cmds = 'msdl -c --no-proxy %s -s 5 -o %s.mp4' % (url_episode, titre)
arguments = shlex.split( cmds )
print arguments
p = subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
stdout, stderr = p.communicate()
if p.returncode != 0:
print "Erreur : le sous-process s\'est terminé avec (le code d\'erreur est " + str(p.returncode) + ")"
if __name__ == '__main__':
main()
Archlinux sur Xiaomi Air 13
Hors ligne
#90 Le 09/04/2013, à 20:38
- thom83
Re : TVDownloader: télécharger les médias du net ! [2]
Ce dernier script semble bien fonctionner pour cherie25, avec les même mentions d'erreur que pour NRJ mais beaucoup plus vite, entre 500 et 600 ko/s.
Merci
Hors ligne
#91 Le 09/04/2013, à 20:57
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
@ thom83
Les "messages d'erreur" sont liés à msdl, tu les auras toujours.
Je peux remplacer msdl par curl, éventuellement.
Archlinux sur Xiaomi Air 13
Hors ligne
#92 Le 09/04/2013, à 21:00
- thom83
Re : TVDownloader: télécharger les médias du net ! [2]
Non, je pense que msdl est plus efficace en débit que curl.
Hors ligne
#93 Le 09/04/2013, à 23:10
- thom83
Re : TVDownloader: télécharger les médias du net ! [2]
Il y a tout de même un détail qui ne va pas, c'est le choix du nom de fichier.
En l'occurrence, il y a plusieurs épisodes et le fichier initial est pollué par le deuxième (ce dernier étant plus long : 401313203 contre 390687908 octets)
J'ai noté également que wget permet de charger l'adresse contenue dans la liste commençant par 'msdl', et ce, avec le nom de fichier commençant par un n° qui est unique.
Hors ligne
#94 Le 10/04/2013, à 08:50
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
@ thom83
J'ai ajouté à la fin du nom _ suivi de l'identifiant de la vidéo (6 chiffres)
Ca te convient ?
Archlinux sur Xiaomi Air 13
Hors ligne
#95 Le 10/04/2013, à 12:24
- thom83
Re : TVDownloader: télécharger les médias du net ! [2]
Bonjour,
L'identifiant devrait éviter de modifier une video déjà complète. 9a me paraît donc parfait.
Hors ligne
#96 Le 10/04/2013, à 14:04
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
version avec l'identifiant
# -*- coding: utf-8 -*-
# os and lib modules
# cherie25 et nrj v 0.3 k3c
import subprocess
import sys
import urllib2
import shlex
from urlparse import urlparse
# pyamf
from pyamf.remoting.client import RemotingService
# parseDOM
import bs4 as BeautifulSoup
import unicodedata
import string
__addonID__ = "plugin.video.NRJ12Replay"
__author__ = "k3c,JUL1EN094 ,vilain_mamuth"
__date__ = "05-04-2013"
__version__ = "0.3"
__credits__ = "Merci aux auteurs des autres addons replay du dépôt Passion-XBMC et de la communauté open-source"
# Web variable
#WEBROOT = "http://www.nrj12.fr"
#WEBSITE = WEBROOT + "/replay-4203/collectionvideo/"
INFOSITE = "http://prod-kernnrj12v5.integra.fr/videoinfo"
validFilenameChars = "-_.() %s%s" % (string.ascii_letters, string.digits)
def removeDisallowedFilenameChars(filename):
"Remove invalid filename characters"
filename = filename.decode('ASCII', 'ignore')
cleanedFilename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore')
cleanedFilename = cleanedFilename.replace(' ', '_')
return ''.join(c for c in cleanedFilename if c in validFilenameChars)
def get_soup(url):
"analyse de la page par BeautifulSoup"
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1')
sou = urllib2.urlopen(req).read()
soup = BeautifulSoup.BeautifulSoup(sou)
print "le findAll "
zz = urlparse(sys.argv[1])
mediaiId = ''
try:
if 'cherie25' in zz.netloc:
mediaId = soup.findAll('div', attrs={"class":u"page_video"})[0]('img')[0]['id']
elif 'nrj' in zz.netloc:
mediaId = soup.findAll('div', attrs={"class":u"img-une"})[0]('img')[0]['id']
else:
print "cette video ne vient ni de nrj12 ni de cherie25"
sys.exit()
# on enlève mediaId_
mediaId = mediaId[8:]
# print mediaId
except:
print 'impossible de trouver l\'id de la video'
sys.exit()
return mediaId
def get_url(url, mediaId):
"appel à pyamf pour l'adresse de la vidéo"
client = RemotingService(url)
vi = client.getService('Nrj_VideoInfos')
mi = vi.mediaInfo(mediaId)
url_episode = mi["url"]
titre = mi["title"].replace(' ','_')
return url_episode, titre
#######################################################################################################################
# BEGIN !
#######################################################################################################################
def main():
"main function"
mediaId = get_soup(sys.argv[1])
url_episode, titre = get_url(INFOSITE, mediaId)
cmds = 'msdl -c --no-proxy %s -s 5 -o \"%s_%s.mp4\"' % (url_episode, titre, mediaId)
print cmds
arguments = shlex.split( cmds )
print arguments
subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
# stdout, stderr = p.communicate()
# if p.returncode != 0:
# print "Erreur : le sous-process s\'est terminé avec (le code d\'erreur est " + str(p.returncode) + ")"
if __name__ == '__main__':
main()
Archlinux sur Xiaomi Air 13
Hors ligne
#97 Le 11/04/2013, à 09:30
- ynad
Re : TVDownloader: télécharger les médias du net ! [2]
@ k3c
Bonjour,
messages d'erreurs par ex:
python nrj12-0.3.py http://www.nrj12.fr/replay-4203/media/video/668850-choc-en-retour.html
le findAll
msdl -c --no-proxy http://r.nrj.fr/mogador/web/00121585_h264_12.mp4 -s 5 -o "LES_CORDIER,_JUGE_ET_FLIC_668850.mp4"
['m\x00s\x00d\x00l\x00', '\x00-\x00c\x00', '\x00-\x00-\x00n\x00o\x00-\x00p\x00r\x00o\x00x\x00y\x00', '\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00r\x00.\x00n\x00r\x00j\x00.\x00f\x00r\x00/\x00m\x00o\x00g\x00a\x00d\x00o\x00r\x00/\x00w\x00e\x00b\x00/\x000\x000\x001\x002\x001\x005\x008\x005\x00_\x00h\x002\x006\x004\x00_\x001\x002\x00.\x00m\x00p\x004\x00', '\x00-\x00s\x00', '\x005\x00', '\x00-\x00o\x00', '\x00\x00L\x00E\x00S\x00_\x00C\x00O\x00R\x00D\x00I\x00E\x00R\x00,\x00_\x00J\x00U\x00G\x00E\x00_\x00E\x00T\x00_\x00F\x00L\x00I\x00C\x00_\x006\x006\x008\x008\x005\x000\x00.\x00m\x00p\x004\x00\x00']
Traceback (most recent call last):
File "nrj12-0.3.py", line 86, in <module>
main()
File "nrj12-0.3.py", line 80, in main
subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
File "/usr/lib/python2.6/subprocess.py", line 623, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1141, in _execute_child
raise child_exception
TypeError: execv() argument 1 must be encoded string without NULL bytes, not str
Hors ligne
#98 Le 11/04/2013, à 10:39
- k3c
Re : TVDownloader: télécharger les médias du net ! [2]
@ ynad
Je ne reproduis pas ton problème
gg@gg-SATELLITE-L755:~$ python !$ http://www.nrj12.fr/replay-4203/media/video/668850-choc-en-retour.html
python nrj/plugin.video.NRJ12Replay/cherie_1.py http://www.nrj12.fr/replay-4203/media/video/668850-choc-en-retour.html
le findAll
msdl -c --no-proxy http://r.nrj.fr/mogador/web/00121585_h264_12.mp4 -s 5 -o "LES_CORDIER,_JUGE_ET_FLIC_668850.mp4"
['msdl', '-c', '--no-proxy', 'http://r.nrj.fr/mogador/web/00121585_h264_12.mp4', '-s', '5', '-o', 'LES_CORDIER,_JUGE_ET_FLIC_668850.mp4']
download [ LES_CORDIER,_JUGE_ET_FLIC_668850.mp4 ]
Host: [ 95.81.165.1:80 ] connected!
get_filesize LES_CORDIER,_JUGE_ET_FLIC_668850.mp4: stat() error
No such file or directory
http resume: no such file "LES_CORDIER,_JUGE_ET_FLIC_668850.mp4", not resuming
redirect to http://95.81.146.19/1UWasxAEJoc86jX_7_jXn_QS0jSirvn8VNXc=/mogador/web/00121585_h264_12.mp4
Host: [ 95.81.146.19:80 ] connected!
get_filesize LES_CORDIER,_JUGE_ET_FLIC_668850.mp4: stat() error
No such file or directory
http resume: no such file "LES_CORDIER,_JUGE_ET_FLIC_668850.mp4", not resuming
DL: 8413249/797617651 B -- 1% 106.5K/s ETA 03:17:4 ^CTraceback (most recent call last):
File "nrj/plugin.video.NRJ12Replay/cherie_1.py", line 86, in <module>
main()
File "nrj/plugin.video.NRJ12Replay/cherie_1.py", line 80, in main
subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
File "/usr/lib/python2.7/subprocess.py", line 746, in communicate
stdout = _eintr_retry_call(self.stdout.read)
File "/usr/lib/python2.7/subprocess.py", line 478, in _eintr_retry_call
return func(*args)
KeyboardInterrupt
gg@gg-SATELLITE-L755:~$
Je l'ai arrêté, mais il avait commencé à télécharger.
Archlinux sur Xiaomi Air 13
Hors ligne
#99 Le 11/04/2013, à 11:22
- ynad
Re : TVDownloader: télécharger les médias du net ! [2]
@ k3c
alors je ne comprends pas tous tes autres scripts que j'ai essayé ont fonctionnés...? je vais réessayer
mon python peut-être ?
Dernière modification par ynad (Le 11/04/2013, à 11:25)
Hors ligne
#100 Le 11/04/2013, à 19:45
- ynad
Re : TVDownloader: télécharger les médias du net ! [2]
@ k3c
j'ai réinstallé msdl
et jai toujours des erreurs mais la ligne:
msdl -c --no-proxy http://r.nrj.fr/mogador/web/00121585_h264_12.mp4 -s 5 -o "LES_CORDIER,_JUGE_ET_FLIC_668850.mp4"
apparait et si je l’exécute dans un terminal, ça charge la vidéo, il y a déjà du mieux !
Hors ligne