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.

#2551 Le 17/12/2012, à 05:57

k3c

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

Pour Pluzzdl c'est juste en ligne de commande pour l'instant.


Archlinux sur Xiaomi Air 13

Hors ligne

#2552 Le 17/12/2012, à 12:54

ynad

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

Le bonjour à tous,

@k3c

j'ai un petit souci avec hd1.py, quelque soit l'url, il me charge toujours la même video (il me semble la première que j'ai du essayer), je ne comprends pas, si tu peux m'expliquer ce que je dois changer, et l'option -v me renvoit l'erreur pour:

python hd1.py -v http://www.hd1.tv/code-barge/videos/cod … -1069.html

"ValueError: unknown url type: -v"

merci

Dernière modification par ynad (Le 17/12/2012, à 12:59)

Hors ligne

#2553 Le 17/12/2012, à 17:21

jose6a

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

Je peux poser une question ?
j'ai été développeur, le siècle dernier (si si) et en fait je me pose
une question :
pourquoi ne pas faire une app à qui tu donnes la zone dans laquelle
s'affiche la vidéo, et, qui, en même temps prend le son directement
sur la carte son comme "audio-recorder" ?

certain vont me parler de qualité vidéo ? bof bof ...
Si l'on reste sur ce que l'on "voit" à l'écran, est ce que c'est si important
que cela la HD ?

avec cette "méthode", on s'affranchirait des trucs machiavéliques mis en place
pour nous empêcher de garder les choses que nous jugeons vouloir concerver.

je sais que des applications d'enregistrement de bureau existent deja, c'est peut etre
dans cette voie qu'il faudrait que je m'oriente, mais, en connaissez vous
qui enregistre le bureau, et simultanément le son de la carte son ?

merci pour vos remarques
José


Distributor ID:    Kubuntu 22.04.1 LTS x86_64 / Kernel: 5.15.0-56-lowlatency
produit: MacBookPro6,1 1.0 bits: 64 bits
8Go de RAM 1To HD SSD (Merci au pote qui, en 2012 m'a donné son MacBook Pro car le système était tout "buggy" ... lol ! )

Hors ligne

#2554 Le 17/12/2012, à 17:37

ynad

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

@jose6a

quelque chose comme:

http://xvidcap.sourceforge.net/

Hors ligne

#2555 Le 17/12/2012, à 18:02

jose6a

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

yep ! presque, j'arrive pas a l'installer, je suis en 12.10 64bits


Distributor ID:    Kubuntu 22.04.1 LTS x86_64 / Kernel: 5.15.0-56-lowlatency
produit: MacBookPro6,1 1.0 bits: 64 bits
8Go de RAM 1To HD SSD (Merci au pote qui, en 2012 m'a donné son MacBook Pro car le système était tout "buggy" ... lol ! )

Hors ligne

#2556 Le 17/12/2012, à 18:06

ynad

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

Hors ligne

#2557 Le 17/12/2012, à 18:51

Hizoka

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

sinon j'ai codé screencastor qui permet de faire ça tongue mais c'est moins pratique qu'un systeme de dl comme celui ci...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2558 Le 17/12/2012, à 21:22

k3c

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

@ ynad

Il faut que je reprenne le script, de toutes les manières il faut faire comme dans la version XBMC, c'est bien plus propre.

D'ailleurs il ne télécharge pas certaines pages de HD1. Et l'option -v n'est pas gérée pour l'instant (contrairement à pluzzdl)

Par contre je télécharge

python hd1.py http://www.hd1.tv/code-barge/videos/code-barge-la-boite-a-idee-7723610-1069.html
curl "http://wak.wat.tv/2/H264-384x288/47/31/9064731.h264?seek=wat&b=438&t=8&bu=&login=hd1-fictions&i=78.193.85.106&u=b76149e94ecb2b6b568c33e7d59c9624&sum=41f46898af0a149175461af28f26022d&akauth=1355775346_8df76f9470fbe7215bd39913671b7485" -L -g -A "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1" -o "code-barge-la-boite-a-idee-7723610-1069.mp4"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 12  159M   12 20.4M    0     0  58664      0  0:47:35  0:06:04  0:41:31 56395

la dernière version (il y a 2 méthodes suivant les vidéos, le rtmpdump est modifié, pas le curl hélas pour toi)

# -*- coding:utf-8 -*-
# TF1 TMC NT1 HD1 version 0.5 par k3c, correction de 11gjm
import subprocess, optparse, re, sys, shlex
import socket
from urllib2 import urlopen
import time, md5, random, urllib2
import bs4 as BeautifulSoup
listeUserAgents = [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; fr-fr) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1',
                                                'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1',
                                                'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.',
                                                'Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) midori',
                                                'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1',
                                                'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312',
                                                'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11',
                                                'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.940.0 Safari/535.8' ]

def get_wat(id):
    def base36encode(number):
        if not isinstance(number, (int, long)):
            raise TypeError('number must be an integer')
        if number < 0:
            raise ValueError('number must be positive')
        alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        base36 = ''
        while number:
            number, i = divmod(number, 36)
            base36 = alphabet[i] + base36
        return base36 or alphabet[0]
    ts = base36encode(int(time.time()))
    timesec = hex(int(ts, 36))[2:]
    while(len(timesec)<8):
        timesec = "0"+timesec
    token = md5.new("9b673b13fa4682ed14c3cfa5af5310274b514c4133e9b3a81e6e3aba00912564/web/"+str(id)+""+timesec).hexdigest()
    id_url1 = "http://www.wat.tv/get/web/"+str(id)+"?token="+token+"/"+timesec+"&getURL=1&country=FR"
    return id_url1

def main():
    # timeout en secondes
    socket.setdefaulttimeout(90)
    usage   = "usage: python tmc_tf1.py     [options] <url de l'emission>"
    parser  = optparse.OptionParser( usage = usage )
    parser.add_option( "--nocolor",         action = 'store_true', default = False, help = 'desactive la couleur dans le terminal' )
    parser.add_option( "-v", "--verbose",   action = "store_true", default = False, help = 'affiche les informations de debugage' )
    ( options, args ) = parser.parse_args()
    if( len( args ) > 2 or args[ 0 ] == "" ):
        parser.print_help()
        parser.exit( 1 )
    debut_id = ''
    html = urlopen(sys.argv[1]).read()
    nom = sys.argv[1].split('/')[-1:][0]
    no = nom.split('.')[-2:][0]
    soup = BeautifulSoup.BeautifulSoup(html)
    if 'tmc.tv' in str(soup) or 'tf1.fr' in str(soup):
        debut_id = str(soup.find('div', attrs={'class' : 'unique' }))
    if 'nt1.tv' in str(soup) or 'hd1.tv' in str(soup):
        debut_id = str(soup.find('section', attrs={'class' : 'player-unique' }))
    id = [x.strip() for x in re.findall("mediaId :([^,]*)", debut_id)][0]
    id_url1 = get_wat('9064731')
    opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', random.choice(listeUserAgents))]
    data = opener.open(id_url1).read()
    opener.close()
    if data[0:4] == 'http':
        ua = random.choice(listeUserAgents)
        arguments = 'curl "%s" -L -g -A "%s" -o "%s.mp4"' % (data, ua, no)
        print arguments
        process = subprocess.Popen(arguments, stdout=subprocess.PIPE, shell=True).communicate()[0]
    if data[0:4] == 'rtmp':
        host = re.search('rtmpte://(.*)/ondemand', data).group(1)
        host = host.replace('rtmpte', 'rtmpe')
        data0 = re.search('rtmpte://(.*)h264', data).group(0)
        cmds = 'rtmpdump -r "%s" -c 1935 -m 10 -w ebb7a6fbdc9021db95e2bd537d73fabb9717508f085bea50bde75f7a8e27698c -x 343642 -o "%s.mp4" " --resume"' % (data0, str(no)
)
        f = open(str(no), 'w')
        f.write(cmds)
        f.close()
        arguments = shlex.split( cmds )
        print arguments
        cpt = 0 
        while True:
            p = subprocess.Popen( arguments,
                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            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) + ")"
#                status = False
                if cpt > 5:
                    break
                cpt += 1
                time.sleep(3) 
            else:
#                status = True
                break
if __name__ == "__main__":
    main()

Archlinux sur Xiaomi Air 13

Hors ligne

#2559 Le 17/12/2012, à 22:39

pguimier

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

Damned, cela fait un moment qu eje ne suis pas venu sur ce thread...
pluzzdl utilise donc maintenant libav-tools !
Quelqu'un a-t-il réussi à faire cohabiter ffmpeg et libav-tools sur une LMDE (linux mint debian edition) ?
Pour moi impossible, si je veux récupérer une émission, je dois jongler avec apt pour desinstaller / réinstaller tout ce qui utilise ffmpeg (dont openshot et melt que j'utilise régulièrement).

Ou alors il existerait une version fonctionnelle de pluzzdl qui utilise encore ffmpeg et non pas libav-tools ?

Hors ligne

#2560 Le 17/12/2012, à 22:45

duocore

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

bonsoir,
j'ai utilisé ceci :python tf1_03.py http://videos.nt1.tv/haven/saison-2-epi … 1-846.html

mais j'ai une erreur: rtmp_readpacket,failed to read rtmp packet header

pouvez vous m'aider

Merci

Hors ligne

#2561 Le 18/12/2012, à 06:09

k3c

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

@ duocore

le script hd1, posté quelques lignes plus tôt, le TF1 TMC NT1 HD1 0.5 le télécharge

python hd1.py http://videos.nt1.tv/haven/saison-2-episode-12-les-peches-des-anciens-7721561-846.html
curl "http://3med.wat.tv/get/dc0fc223a3b060d68894a55261a4b4c1/50cffa0a/2/H264-384x288/47/31/9064731.h264?bu=&login=hd1-fictions&i=78.193.85.106&u=a95ca5162a7d53711dde355b6034d4e3&sum=fafdff7c70706f04f4b55b9b6f81b89d&st=atQdHDxG0ah-8uuRel9b6g&e=1355936842&t=1355807242&seek=wat" -L -g -A "Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) midori" -o "saison-2-episode-12-les-peches-des-anciens-7721561-846.mp4"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 16  159M   16 26.1M    0     0   256k      0  0:10:37  0:01:44  0:08:53  300k^[[A

Archlinux sur Xiaomi Air 13

Hors ligne

#2562 Le 18/12/2012, à 07:34

duocore

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

en utilisant le script:

# -*- coding:utf-8 -*-
# TF1 TMC NT1 HD1 version 0.5 par k3c, correction de 11gjm
import subprocess, optparse, re, sys, shlex
import socket
from urllib2 import urlopen
import time, md5, random, urllib2
import bs4 as BeautifulSoup
listeUserAgents = [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; fr-fr) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1',
                                                'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1',
                                                'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.',
                                                'Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) midori',
                                                'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1',
                                                'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312',
                                                'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11',
                                                'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.940.0 Safari/535.8' ]

def get_wat(id):
    def base36encode(number):
        if not isinstance(number, (int, long)):
            raise TypeError('number must be an integer')
        if number < 0:
            raise ValueError('number must be positive')
        alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        base36 = ''
        while number:
            number, i = divmod(number, 36)
            base36 = alphabet[i] + base36
        return base36 or alphabet[0]
    ts = base36encode(int(time.time()))
    timesec = hex(int(ts, 36))[2:]
    while(len(timesec)<8):
        timesec = "0"+timesec
    token = md5.new("9b673b13fa4682ed14c3cfa5af5310274b514c4133e9b3a81e6e3aba00912564/web/"+str(id)+""+timesec).hexdigest()
    id_url1 = "http://www.wat.tv/get/web/"+str(id)+"?token="+token+"/"+timesec+"&getURL=1&country=FR"
    return id_url1

def main():
    # timeout en secondes
    socket.setdefaulttimeout(90)
    usage   = "usage: python tmc_tf1.py     [options] <url de l'emission>"
    parser  = optparse.OptionParser( usage = usage )
    parser.add_option( "--nocolor",         action = 'store_true', default = False, help = 'desactive la couleur dans le terminal' )
    parser.add_option( "-v", "--verbose",   action = "store_true", default = False, help = 'affiche les informations de debugage' )
    ( options, args ) = parser.parse_args()
    if( len( args ) > 2 or args[ 0 ] == "" ):
        parser.print_help()
        parser.exit( 1 )
    debut_id = ''
    html = urlopen(sys.argv[1]).read()
    nom = sys.argv[1].split('/')[-1:][0]
    no = nom.split('.')[-2:][0]
    soup = BeautifulSoup.BeautifulSoup(html)
    if 'tmc.tv' in str(soup) or 'tf1.fr' in str(soup):
        debut_id = str(soup.find('div', attrs={'class' : 'unique' }))
    if 'nt1.tv' in str(soup) or 'hd1.tv' in str(soup):
        debut_id = str(soup.find('section', attrs={'class' : 'player-unique' }))
    id = [x.strip() for x in re.findall("mediaId :([^,]*)", debut_id)][0]
    id_url1 = get_wat('9064731')
    opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', random.choice(listeUserAgents))]
    data = opener.open(id_url1).read()
    opener.close()
    if data[0:4] == 'http':
        ua = random.choice(listeUserAgents)
        arguments = 'curl "%s" -L -g -A "%s" -o "%s.mp4"' % (data, ua, no)
        print arguments
        process = subprocess.Popen(arguments, stdout=subprocess.PIPE, shell=True).communicate()[0]
    if data[0:4] == 'rtmp':
        host = re.search('rtmpte://(.*)/ondemand', data).group(1)
        host = host.replace('rtmpte', 'rtmpe')
        data0 = re.search('rtmpte://(.*)h264', data).group(0)
        cmds = 'rtmpdump -r "%s" -c 1935 -m 10 -w ebb7a6fbdc9021db95e2bd537d73fabb9717508f085bea50bde75f7a8e27698c -x 343642 -o "%s.mp4" " --resume"' % (data0, str(no)
)
        f = open(str(no), 'w')
        f.write(cmds)
        f.close()
        arguments = shlex.split( cmds )
        print arguments
        cpt = 0 
        while True:
            p = subprocess.Popen( arguments,
                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            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) + ")"
#                status = False
                if cpt > 5:
                    break
                cpt += 1
                time.sleep(3) 
            else:
#                status = True
                break
if __name__ == "__main__":
    main()

j'ai ceci:

curl "http://3med.wat.tv/get/25cf43b8af1c7ffc805a299c0e1d0ee3/50d00d76/2/H264-384x288/47/31/9064731.h264?bu=&login=hd1-fictions&i=92.132.247.234&u=babcf91ca2f3b2af36887f28bdf307fa&sum=8d5a8c6bd662189dacee44fb93313e72&st=r6I2dXKDhSqPCDuyOYgODQ&e=1355941814&t=1355812214&seek=wat" -L -g -A "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525." -o "saison-2-episode-12-les-peches-des-anciens-7721561-846.mp4"

Hors ligne

#2563 Le 18/12/2012, à 07:48

duocore

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

apres plusieurs lancement du script je me suis retrouver avec AD guerre de l'ombre 2eme partie

Hors ligne

#2564 Le 18/12/2012, à 09:11

ynad

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

Bonjour...

pareil... je me retrouve toujours avec aussi la même vidéo en l’occurrence "AD la guerre de l'ombre 2ème partie"
avec le titre "saison-2-episode-12-les-peches-des-anciens-7721561-846.mp4".
wink

Hors ligne

#2565 Le 18/12/2012, à 14:44

rimram31

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

jose6a a écrit :

...pourquoi ne pas faire une app à qui tu donnes la zone dans laquelle
s'affiche la vidéo, et, qui, en même temps prend le son directement
sur la carte son comme "audio-recorder" ?

Pour xbmc, ça va rapidement "se voir" car la finalité est de regarder sur un écran de télévision, entre SD et HD, la différence est évidente. Autre point a ne pas négliger, les vidéos sont disponibles en plusieurs formats de qualités différentes, le principe de l'adaptation dynamique de la qualité, pluzz par exemple, lance une vidéo de basse qualité quand fenêtré puis passe en qualité supérieure si tu bascules en plein écran. Pas toujours facile de comprendre "comment ça se passe" avec un simple visionnage.

Maintenant, ta remarque reste plus que pertinente :-)

Hors ligne

#2566 Le 18/12/2012, à 17:29

ynad

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

...en plus je crois qu'une capture vidéo d'écran avec une bonne résolution de plus d'une heure va être lourde, voire très lourde tongue

Hors ligne

#2567 Le 18/12/2012, à 18:08

Hizoka

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

oui, ce n'est pas rentable car en plus de tout ca, il faut regarder la video et ne rien faire d'autre...

il vaut mieux dl un fichier


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2568 Le 18/12/2012, à 18:17

mesaieux

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

bonjour à tous,
on dirait que tou.tv à modifier des choses
avec le script de k3c j'ai l'erreur

WARNING: You haven't specified a protocol (--protocol) or rtmp url (-r), using d
efault protocol RTMP
WARNING: You haven't specified a port (--port) or rtmp url (-r), using default p
ort 1935

Hors ligne

#2569 Le 18/12/2012, à 18:26

duocore

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

duocore a écrit :

apres plusieurs lancement du script je me suis retrouver avec AD guerre de l'ombre 2eme partie

Je voudrais savoir si vous avez reussi a trouver de ou vient l'erreur.

merci de votre aide

Hors ligne

#2570 Le 19/12/2012, à 06:36

k3c

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

Désolé, j'avais oublié de passer l'id en paramètre pour HD1

# -*- coding:utf-8 -*-
# TF1 TMC NT1 HD1 version 0.6 par k3c, correction de 11gjm
import subprocess, optparse, re, sys, shlex
import socket
from urllib2 import urlopen
import time, md5, random, urllib2
import bs4 as BeautifulSoup
listeUserAgents = [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; fr-fr) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1',
                                                'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1',
                                                'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.',
                                                'Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) midori',
                                                'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1',
                                                'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312',
                                                'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11',
                                                'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.940.0 Safari/535.8' ]

def get_wat(id):
    def base36encode(number):
        if not isinstance(number, (int, long)):
            raise TypeError('number must be an integer')
        if number < 0:
            raise ValueError('number must be positive')
        alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        base36 = ''
        while number:
            number, i = divmod(number, 36)
            base36 = alphabet[i] + base36
        return base36 or alphabet[0]
    ts = base36encode(int(time.time()))
    timesec = hex(int(ts, 36))[2:]
    while(len(timesec)<8):
        timesec = "0"+timesec
    token = md5.new("9b673b13fa4682ed14c3cfa5af5310274b514c4133e9b3a81e6e3aba00912564/web/"+str(id)+""+timesec).hexdigest()
    id_url1 = "http://www.wat.tv/get/web/"+str(id)+"?token="+token+"/"+timesec+"&getURL=1&country=FR"
    return id_url1

def main():
    # timeout en secondes
    socket.setdefaulttimeout(90)
    usage   = "usage: python tmc_tf1.py     [options] <url de l'emission>"
    parser  = optparse.OptionParser( usage = usage )
    parser.add_option( "--nocolor",         action = 'store_true', default = False, help = 'desactive la couleur dans le terminal' )
    parser.add_option( "-v", "--verbose",   action = "store_true", default = False, help = 'affiche les informations de debugage' )
    ( options, args ) = parser.parse_args()
    if( len( args ) > 2 or args[ 0 ] == "" ):
        parser.print_help()
        parser.exit( 1 )
    debut_id = ''
    html = urlopen(sys.argv[1]).read()
    nom = sys.argv[1].split('/')[-1:][0]
    no = nom.split('.')[-2:][0]
    soup = BeautifulSoup.BeautifulSoup(html)
    if 'tmc.tv' in str(soup) or 'tf1.fr' in str(soup):
        debut_id = str(soup.find('div', attrs={'class' : 'unique' }))
    if 'nt1.tv' in str(soup) or 'hd1.tv' in str(soup):
        debut_id = str(soup.find('section', attrs={'class' : 'player-unique' }))
    id = [x.strip() for x in re.findall("mediaId :([^,]*)", debut_id)][0]
    id_url1 = get_wat(id)
    opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', random.choice(listeUserAgents))]
    data = opener.open(id_url1).read()
    opener.close()
    if data[0:4] == 'http':
        ua = random.choice(listeUserAgents)
        arguments = 'curl "%s" -L -g -A "%s" -o "%s.mp4"' % (data, ua, no)
        print arguments
        process = subprocess.Popen(arguments, stdout=subprocess.PIPE, shell=True).communicate()[0]
    if data[0:4] == 'rtmp':
        host = re.search('rtmpte://(.*)/ondemand', data).group(1)
        host = host.replace('rtmpte', 'rtmpe')
        data0 = re.search('rtmpte://(.*)h264', data).group(0)
        cmds = 'rtmpdump -r "%s" -c 1935 -m 10 -w ebb7a6fbdc9021db95e2bd537d73fabb9717508f085bea50bde75f7a8e27698c -x 343642 -o "%s.mp4" " --resume"' % (data0, str(no)
)
        f = open(str(no), 'w')
        f.write(cmds)
        f.close()
        arguments = shlex.split( cmds )
        print arguments
        cpt = 0 
        while True:
            p = subprocess.Popen( arguments,
                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            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) + ")"
#                status = False
                if cpt > 5:
                    break
                cpt += 1
                time.sleep(3) 
            else:
#                status = True
                break
if __name__ == "__main__":
    main()

Archlinux sur Xiaomi Air 13

Hors ligne

#2571 Le 19/12/2012, à 06:51

duocore

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

merci,

cela fonctionne tres bien

encore merci

vous faites de l'excellent boulot

Hors ligne

#2572 Le 19/12/2012, à 10:33

rimram31

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

ynad a écrit :

...en plus je crois qu'une capture vidéo d'écran avec une bonne résolution de plus d'une heure va être lourde, voire très lourde tongue

Tu réencodes en h264/aac à la volée smile ça soulève un autre souci, la qualité de l'encodage alors qu'en download, le boulot est déjà fait. Mais dans la même idée, tu peux aussi "sniffer" les trames http et capturer les mp4 ... c'est un peu ce que je fais dans mon add on xbmc pluzz même si je me contente de capturer le token (et bien content que le même marche pour toutes les qualités ... pas sûr que ça dure)

Hors ligne

#2573 Le 19/12/2012, à 11:30

ynad

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

@k3c

Merci c'est bon aussi pour moi big_smile

Hors ligne

#2574 Le 19/12/2012, à 12:43

k3c

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

je vais bientôt sortir une version plus propre basée sur le plugin xbmc


Archlinux sur Xiaomi Air 13

Hors ligne

#2575 Le 23/12/2012, à 09:54

k3c

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

Bonjour

J'aurai besoin d'un coup de main pour faire remarcher le script pour TOU.TV.

Ils ont changé leur plate-forme pour récupérer l'adresse et utilisent maintenant un système à la Pluzz
J'ai fait un script provisoire utilisant la méthode de KSV et son script, mais je ne récupère que quelques fragments.

Si vous avez une idée, je suis preneur
Pour l'instant, vu le mal que j'ai à trouver un proxy Canada valide, je travaille sur une vidéo non géolocalisée

Mon script

cat toutvnew.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# TOU.TV version 0.8 par k3c
# passage de proxy en 2 ème parametre
import subprocess, optparse, re, sys, shlex
import socket, random
import urllib2 
from urllib2 import ProxyHandler, Request, urlopen, URLError, HTTPError
import bs4 as BeautifulSoup
from lxml import objectify
from lxml import etree
listeUserAgents = [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; fr-fr) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1',
                                                'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1',
                                                'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13',
                                                'Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) midori',
                                                'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1',
                                                'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312',
                                                'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11',
                                                'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.940.0 Safari/535.8' ]
def get_proxy():
    opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', random.choice(listeUserAgents))]
    data = opener.open('http://www.xroxy.com/proxy-country-CA.htm').read()
    opener.close()
    s = BeautifulSoup.BeautifulSoup(data)
    hrefs = s.find_all(attrs={'href' : re.compile("host=\d")})
    href = random.choice(hrefs)
    mastr =  href.attrs['href']
    m = re.search('host=(([0-9\.])+)?.*port=(([0-9\.])+)?',str(mastr))
    port = m.group(3)
    host = m.group(1)
    return host, port

def main():
    # timeout en secondes
    timeout = 900
    socket.setdefaulttimeout(timeout)
    usage   = "usage: python toutv   [options] <url de l'emission>"
    parser  = optparse.OptionParser( usage = usage )
    parser.add_option( "--nocolor",         action = 'store_true', default = False, help = 'desactive la couleur dans le terminal' )
    parser.add_option( "-v", "--verbose",   action = "store_true", default = False, help = 'affiche les informations de debugage' )
    ( options, args ) = parser.parse_args()
    if( len( args ) == 0 or args[ 0 ] == "" ):
        parser.print_help()
        parser.exit( 1 )
    html = urlopen(sys.argv[1]).read()
    nom = sys.argv[1][18:].replace('/', '_')
    soup = BeautifulSoup.BeautifulSoup(html)
    elems = [elem for elem in soup.find('div',{'class':'emissionEpisode_containerPlayer'})]
    mastr = elems[1].attrs['src']
    m = re.search('"idMedia":"([A-Za-z0-9_]*)', mastr)
    if m:
        id = m.group(1)
    head = random.choice( listeUserAgents )
    platform1 = 'http://api.radio-canada.ca/validationMedia/v1/Validation.html?deviceType=flashhd&idMedia='
    platform2 = '&connectionType=broadband&appCode=thePlatform&multibitrate=true&output=jsonp&timeout=66&callback=Player_srcAV_21378044.validationSuccess'
    print platform1+id+platform2
    response = urllib2.urlopen(urllib2.Request(platform1+id+platform2))
    newfile = response.read()
    print "le retour de l'API de RAdio Canada ",newfile
    mm = re.search('url":"(.*)message',str(newfile))
    zzz =  mm.group(1)[:-3]
    print " ce qui nous intéresse ",zzz
    z = urlopen(zzz).read()
    print "le contenu du manifest ",z
    f = open("mani.f4m", 'w')
    f.write(z)
    f.close()

    cmds = "php adobehds.php --manifest "+zzz
#    cmds = "php adobehds.php --manifest mani.f4m"
    arguments = shlex.split( cmds )
    print cmds
    process = subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
if __name__ == "__main__":
    main()

Ma commande

python toutvnew.py  http://www.tou.tv/belle-maman 

Le résultat

gg@gg-SATELLITE-L755:~$ python toutvnew.py  http://www.tou.tv/belle-maman 
http://api.radio-canada.ca/validationMedia/v1/Validation.html?deviceType=flashhd&idMedia=UwKabILm2W9_ChVsNs_ztrmFUPIZsuiW&connectionType=broadband&appCode=thePlatform&multibitrate=true&output=jsonp&timeout=66&callback=Player_srcAV_21378044.validationSuccess
le retour de l'API de RAdio Canada  Player_srcAV_21378044.validationSuccess({"url":"http://cp143903-f.akamaihd.net/z/003/mp4/b/2011-03-22_bellemaman_0001_,500,800,1200,.mp4.csmil/manifest.f4m?hdnea=st=1356252683~exp=1356252698~acl=/z/003/mp4/b/2011-03-22_bellemaman_0001_*~hmac=4c5e425403f0c0f97a182fcb3d542ad4d967f487e72f768af5c2578fd1a90e73","message":null,"errorCode":0,"params":[{"name":"mediaType","value":"video"},{"name":"streamType","value":"akamaiHDN2"},{"name":"tokenType","value":"flashHDNetSession"}],"bitrates":[{"bitrate":1200,"width":852,"height":480,"lines":"480p","param":null},{"bitrate":800,"width":640,"height":360,"lines":"360p","param":null},{"bitrate":500,"width":640,"height":360,"lines":"270p","param":null}]},66)
 ce qui nous intéresse  http://cp143903-f.akamaihd.net/z/003/mp4/b/2011-03-22_bellemaman_0001_,500,800,1200,.mp4.csmil/manifest.f4m?hdnea=st=1356252683~exp=1356252698~acl=/z/003/mp4/b/2011-03-22_bellemaman_0001_*~hmac=4c5e425403f0c0f97a182fcb3d542ad4d967f487e72f768af5c2578fd1a90e73
le contenu du manifest  <?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns="http://ns.adobe.com/f4m/1.0" xmlns:akamai="uri:akamai.com/f4m/1.0">
  <akamai:version>2.0</akamai:version>
  <akamai:bw>5000</akamai:bw>
  <id>/003/mp4/b/2011-03-22_bellemaman_0001_,500,800,1200,.mp4.csmil_0</id>
  <streamType>recorded</streamType>
  <akamai:streamType>vod</akamai:streamType>
  <duration>336.851</duration>
  <streamBaseTime>0.000</streamBaseTime>
  <pv-2.0>;hdntl=exp=1356339083~acl=%2fz%2f003%2fmp4%2fb%2f2011-03-22_bellemaman_0001_*~data=hdntl~hmac=7559c92e7cb31dad7888407218fe136b48223ae184ed85079403c021076aacdb</pv-2.0>
  <bootstrapInfo profile="named" id="bootstrap_0">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAAFI9MAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAADgBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAADgAAAAAAAUJEAAAGsMAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <bootstrapInfo profile="named" id="bootstrap_1">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAAFI9MAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAADgBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAADgAAAAAAAUJEAAAGsMAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <bootstrapInfo profile="named" id="bootstrap_2">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAAFI9MAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAADgBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAADgAAAAAAAUJEAAAGsMAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <media bitrate="489" url="0_ee8b5f6c472833a3_" bootstrapInfoId="bootstrap_0">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAdQ2dsi0OVgAFd2lkdGgAQIQAAAAAAAAABmhlaWdodABAdoAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAeshKDvt0XgAJZnJhbWVyYXRlAEA99/9WWSEBAAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQE7U1RbZSr0AD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBc67/oAAAAAAACQ==</metadata>
  </media>
  <media bitrate="789" url="1_ee8b5f6c472833a3_" bootstrapInfoId="bootstrap_1">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAdQ2dsi0OVgAFd2lkdGgAQIQAAAAAAAAABmhlaWdodABAdoAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAhsODbVhb7AAJZnJhbWVyYXRlAEA99/9WWSEBAAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQE7U1RbZSr0AD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBf7omgAAAAAAACQ==</metadata>
  </media>
  <media bitrate="1253" url="2_ee8b5f6c472833a3_" bootstrapInfoId="bootstrap_2">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAdQ2dsi0OVgAFd2lkdGgAQIqgAAAAAAAABmhlaWdodABAfgAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAkaEmVlHuLgAJZnJhbWVyYXRlAEA99/9WWSEBAAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQF9qGTh/Zy0AD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBiS0zgAAAAAAACQ==</metadata>
  </media>
</manifest>

php adobehds.php --manifest http://cp143903-f.akamaihd.net/z/003/mp4/b/2011-03-22_bellemaman_0001_,500,800,1200,.mp4.csmil/manifest.f4m?hdnea=st=1356252683~exp=1356252698~acl=/z/003/mp4/b/2011-03-22_bellemaman_0001_*~hmac=4c5e425403f0c0f97a182fcb3d542ad4d967f487e72f768af5c2578fd1a90e73
gg@gg-SATELLITE-L755:~$ ls -alrt *eg*rag*
-rw-rw-r-- 1 gg gg  912410 déc.  23 09:51 1e366bc0702a899b71d0795b6a20bc05_2_ee8b5f6c472833a3_Seg1-Frag4
-rw-rw-r-- 1 gg gg  923548 déc.  23 09:51 1e366bc0702a899b71d0795b6a20bc05_2_ee8b5f6c472833a3_Seg1-Frag8
-rw-rw-r-- 1 gg gg 1066527 déc.  23 09:51 1e366bc0702a899b71d0795b6a20bc05_2_ee8b5f6c472833a3_Seg1-Frag7
-rw-rw-r-- 1 gg gg 1135908 déc.  23 09:51 1e366bc0702a899b71d0795b6a20bc05_2_ee8b5f6c472833a3_Seg1-Frag1
gg@gg-SATELLITE-L755:~$ 

Le script de KSV AdobeHDS est dispo à
https://github.com/K-S-V/Scripts

Il vous faudra php, les extensions curl, un serveur apache2 pour utiliser tout cela.


Archlinux sur Xiaomi Air 13

Hors ligne