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.

#76 Le 04/04/2013, à 12: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, à 12:24)


Archlinux sur Xiaomi Air 13

Hors ligne

#77 Le 04/04/2013, à 13: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, à 13:15

JUL1EN094

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

k3c a écrit :

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, à 13: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, à 14: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, à 06:40)


Archlinux sur Xiaomi Air 13

Hors ligne

#81 Le 04/04/2013, à 16:01

ynad

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

@ 11gjm

merci pour l’explication... smile

Hors ligne

#82 Le 04/04/2013, à 16: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, à 06:41)


Archlinux sur Xiaomi Air 13

Hors ligne

#83 Le 05/04/2013, à 08: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

https://code.google.com/p/bbcsports-add … p&can=2&q=


Archlinux sur Xiaomi Air 13

Hors ligne

#84 Le 06/04/2013, à 14: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, à 13: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 sad

Hors ligne

#86 Le 09/04/2013, à 14: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, à 15: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, à 15:51)

Hors ligne

#88 Le 09/04/2013, à 16: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, à 16:59)


Archlinux sur Xiaomi Air 13

Hors ligne

#89 Le 09/04/2013, à 18: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, à 19: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, à 19: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, à 20: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, à 22: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, à 07: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, à 11: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, à 13: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, à 08: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, à 09: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, à 10: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, à 10:25)

Hors ligne

#100 Le 11/04/2013, à 18: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 ! wink

Hors ligne