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.

#2201 Le 30/09/2012, à 18:40

k3c

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

Comme undercover boss et preuve à l'appui donnent le même résultat, je subodore que le site tmc.tv a changé...

Edit : en fait le site n'a pas changé, il y a plusieurs syntaxes possibles pour la commande rtmpdump, et faut juste que j'en prenne une autre.
Je posterai un correctif.

Dernière modification par k3c (Le 30/09/2012, à 19:16)


Archlinux sur Xiaomi Air 13

Hors ligne

#2202 Le 30/09/2012, à 19:51

bishop

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

OK ! Merci...


La plus grande surprise que puisse faire un con c'est de faire une pause.

Hors ligne

#2203 Le 30/09/2012, à 20:21

k3c

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

Ce draft pour TF1 a l'air de télécharger les dernières vidéos dont on a parlé.
(normal vu que TF1 et TMC c'est pareil).
Attention, aucune garantie que ça va télécharger les vidéos de TF1

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# TF1 version 0.1 par k3c
import subprocess, optparse, re, sys, os, shlex
import socket
from urllib2 import Request, urlopen, URLError, HTTPError
from urllib2 import ProxyHandler, Request, urlopen, URLError, HTTPError
import time,md5,random,urllib2
import bs4 as BeautifulSoup
timeout = 90
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_wat(id):
    ID_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_WAT)+""+timesec).hexdigest()
    print "le token ",token
    id_url1 = "http://www.wat.tv/get/web/"+str(ID_WAT)+"?token="+token+"/"+timesec+"&getURL=1&country=FR"
    print "id_url1 vaut ",id_url1
    return id_url1

def main():
    # timeout en secondes
    socket.setdefaulttimeout(timeout)
    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 )
    the_url = sys.argv[1] 
    html = urlopen(sys.argv[1]).read()
    nom = sys.argv[1].split('/')[-1:][0]
    no = nom.split('.')[-2:][0]
    soup = BeautifulSoup.BeautifulSoup(html)
    debut_id = str(soup.find('div', attrs={'class' : 'unique' }))
    id = [x.strip() for x in re.findall("mediaId :([^,]*)",debut_id)][0]
    id_url1 = get_wat(id)
    print "retour de get_wat, id_url1  ",id_url1
    opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', random.choice(listeUserAgents))]
    print "opener.addheaders ",opener.addheaders
    data = opener.open(id_url1).read()
    opener.close()
    print data
    if data[0:4] == 'http':
        ua = random.choice(listeUserAgents)
        arguments = 'curl "%s" -L -g -A "%s" -o "%s.mp4"' % (data, ua, no)
        print 'arguments ',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)
        player = "http://www.wat.tv/images/v40/PlayerWat.swf?revision=4.0.992"
        data0 = re.search('rtmpte://(.*)h264',data).group(0)
        data1 = re.search('&u=(.*)&sum',data).group(1)
        data2 = re.search('&sum=(.*)$',data).group(1)
        data3 = data1+data2
        print data3
        app = re.search('wske.wat.tv/(.*)/mp4:vod',data).group(1)
        print app
        playpath = re.search('mp4:vod(.*).h264',data).group(0)
        print playpath
#        cmds = "rtmpdump"+" --host "+host+" -l 0 --app "+app+" --playpath "+playpath+" --swfVfy "+player+" --port 443 -e -k 1 --flv "+str(no)+".mp4"
        cmds = 'rtmpdump -r "%s" -c 1935 -m 10 -w "%s" -o "%s.mp4"' % (data0, data3,  str(no))
        print cmds
        arguments = shlex.split( cmds )
        print arguments
        process = subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
if __name__ == "__main__":
    main()

Archlinux sur Xiaomi Air 13

Hors ligne

#2204 Le 01/10/2012, à 06:50

bishop

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

Salut k3c !
Je télécharge quelques % puis le téléchargement s'arrête.

Essai 1

bishop1104@Bishop1104:~/TV_ScriptDownload$ python tmc.py http://videos.tmc.tv/suspect-numero-1/suspect-n-1-la-cougar-et-le-legionnaire-on-a-tue-mon-enfant-7558353-848.html
le token  1238fc93c538a3a4bd54022b2c7649ff
id_url1 vaut  http://www.wat.tv/get/web/8857851?token=1238fc93c538a3a4bd54022b2c7649ff/5068b9a4&getURL=1&country=FR
retour de get_wat, id_url1   http://www.wat.tv/get/web/8857851?token=1238fc93c538a3a4bd54022b2c7649ff/5068b9a4&getURL=1&country=FR
opener.addheaders  [('User-agent', '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')]
rtmpe,rtmpte://wske.wat.tv/ondemand/mp4:vod/H264-384x288/78/51/8857851.h264?bu=&login=suspect-numero-1&i=82.243.92.22&u=81d857ea405fdbc21f4a058ae99458ca&sum=64db6a4f344dfac87f389902c3fec71a
81d857ea405fdbc21f4a058ae99458ca64db6a4f344dfac87f389902c3fec71a
ondemand
mp4:vod/H264-384x288/78/51/8857851.h264
rtmpdump -r "rtmpte://wske.wat.tv/ondemand/mp4:vod/H264-384x288/78/51/8857851.h264" -c 1935 -m 10 -w "81d857ea405fdbc21f4a058ae99458ca64db6a4f344dfac87f389902c3fec71a" -o "suspect-n-1-la-cougar-et-le-legionnaire-on-a-tue-mon-enfant-7558353-848.mp4"
['rtmpdump', '-r', 'rtmpte://wske.wat.tv/ondemand/mp4:vod/H264-384x288/78/51/8857851.h264', '-c', '1935', '-m', '10', '-w', '81d857ea405fdbc21f4a058ae99458ca64db6a4f344dfac87f389902c3fec71a', '-o', 'suspect-n-1-la-cougar-et-le-legionnaire-on-a-tue-mon-enfant-7558353-848.mp4']
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
WARNING: Ignoring SWF hash, supply also the swf size  with --swfsize
Connecting ...
WARNING: HandShake: Type mismatch: client sent 6, server answered 9
INFO: Connected...
ERROR: HandleCtrl: Ignoring SWFVerification request, use --swfVfy!
Starting download at: 0.000 kB
INFO: Metadata:
INFO:   duration              6424.20
INFO:   moovPosition          40.00
INFO:   width                 640.00
INFO:   height                360.00
INFO:   videocodecid          avc1
INFO:   audiocodecid          mp4a
INFO:   avcprofile            77.00
INFO:   avclevel              30.00
INFO:   aacaot                2.00
INFO:   videoframerate        25.00
INFO:   audiosamplerate       44100.00
INFO:   audiochannels         2.00
INFO: tags:
INFO:   ©too                 Lavf54.22.100
INFO: trackinfo:
INFO:   length                160605.00
INFO:   timescale             25.00
INFO:   language              eng
INFO: sampledescription:
INFO:   sampletype            avc1
INFO:   length                283305951.00
INFO:   timescale             44100.00
INFO:   language              fre
INFO: sampledescription:
INFO:   sampletype            mp4a
14363.297 kB / 272.20 sec (4.2%)

Je fais un Ctrl C pour sortir :

^C
Caught signal: 2, cleaning up, just a second...
Traceback (most recent call last):
  File "tmc.py", line 94, in <module>
    main()
  File "tmc.py", line 92, in main
    process = subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
  File "/usr/lib/python2.7/subprocess.py", line 732, in communicate
ERROR: RTMP_ReadPacket, failed to read RTMP packet body. len: 67774
14391.959 kB / 272.20 sec (4.2%)
Download may be incomplete (downloaded about 4.20%), try resuming
    stdout = self.stdout.read()
KeyboardInterrupt

Essai 2
Ou le téléchargement s'arrête et revient au prompt :

6822.729 kB / 118.75 sec (1.8%)
ERROR: RTMP_ReadPacket, failed to read RTMP packet body. len: 65616
6901.998 kB / 121.37 sec (1.8%)
Download may be incomplete (downloaded about 1.80%), try resuming

Essai 3

23131.242 kB / 434.20 sec (6.7%)
Caught signal: 13, cleaning up, just a second...
ERROR: WriteN, RTMP send error 32 (42 bytes)
ERROR: RTMP_ReadPacket, failed to read RTMP packet body. len: 66154
23208.706 kB / 435.60 sec (6.7%)
Download may be incomplete (downloaded about 6.70%), try resuming

La plus grande surprise que puisse faire un con c'est de faire une pause.

Hors ligne

#2205 Le 01/10/2012, à 07:33

mac-gyver31

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

chaoswizard a écrit :

Euh, si downloadhelper voit les fragments de vidéo, ça ne serait pas plutôt du f4m ?

Ben, grâce à toi, j'en apprend des choses ! Savais pas moi que ca existait ce format. Ca doit même être du f4f. J'ai l'impression que çà  existe aussi.
Exemple de fragment : M6_Replay_Saison_8_pisode_11.f4f

rtmpdump sait capturer çà ?


Il est temps d'enlever les fenêtres, et de construire un monde ouvert.

Hors ligne

#2206 Le 01/10/2012, à 17:13

chaoswizard

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

Non, mais pluzzdl oui ! (enfin, pour les vidéos mises à disposition par pluzz).
Les modifs ne doivent pas être énormes pour le faire marcher pour un autre site (il n'y a peut être même aucune modif à faire).


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#2207 Le 01/10/2012, à 18:26

k3c

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

bizarre, ce script télécharge les autres vidéos sauf
http://videos.tmc.tv/suspect-numero-1/s … 3-848.html
qui s'arrête à 58%
Faudra que je regarde de plus près

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# TF1 version 0.1 par k3c
import subprocess, optparse, re, sys, os, shlex
import socket
from urllib2 import Request, urlopen, URLError, HTTPError
from urllib2 import ProxyHandler, Request, urlopen, URLError, HTTPError
import time,md5,random,urllib2
import bs4 as BeautifulSoup
timeout = 90
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_wat(id):
    ID_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()))
gg@gg-SATELLITE-L755:~$ cat !$
cat tf1_66.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# TF1 version 0.1 par k3c
import subprocess, optparse, re, sys, os, shlex
import socket
from urllib2 import Request, urlopen, URLError, HTTPError
from urllib2 import ProxyHandler, Request, urlopen, URLError, HTTPError
import time,md5,random,urllib2
import bs4 as BeautifulSoup
timeout = 90
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_wat(id):
    ID_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_WAT)+""+timesec).hexdigest()
    id_url1 = "http://www.wat.tv/get/web/"+str(ID_WAT)+"?token="+token+"/"+timesec+"&getURL=1&country=FR"
    return id_url1

def main():
    # timeout en secondes
    socket.setdefaulttimeout(timeout)
    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 )
    the_url = sys.argv[1] 
    html = urlopen(sys.argv[1]).read()
    nom = sys.argv[1].split('/')[-1:][0]
    no = nom.split('.')[-2:][0]
    soup = BeautifulSoup.BeautifulSoup(html)
    debut_id = str(soup.find('div', attrs={'class' : '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)
        process = subprocess.Popen(arguments, stdout=subprocess.PIPE, shell=True).communicate()[0]
    if data[0:4] == 'rtmp':
        host = re.search('rtmpte://(.*)/ondemand',data).group(1)
        player = "http://www.wat.tv/images/v40/PlayerWat.swf?revision=4.0.992"
        data0 = re.search('rtmpte://(.*)h264',data).group(0)
        data1 = re.search('&u=(.*)&sum',data).group(1)
        data2 = re.search('&sum=(.*)$',data).group(1)
        data3 = data1+data2
        app = re.search('wske.wat.tv/(.*)/mp4:vod',data).group(1)
        playpath = re.search('mp4:vod(.*).h264',data).group(0)
#        cmds = "rtmpdump"+" --host "+host+" -l 0 --app "+app+" --playpath "+playpath+" --swfVfy "+player+" --port 443 -e -k 1 --flv "+str(no)+".mp4"
        cmds = 'rtmpdump -r "%s" -c 1935 -m 10 -w 40ee2a765514facfc6b1eb2745d22cdbdfaaf7f1488b17600c1a22dd3074735d -x 339543 -o "%s.mp4"' % (data0, str(no))
        arguments = shlex.split( cmds )
        process = subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
if __name__ == "__main__":
    main()

Archlinux sur Xiaomi Air 13

Hors ligne

#2208 Le 01/10/2012, à 21:27

mac-gyver31

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

chaoswizard a écrit :

Les modifs ne doivent pas être énormes pour le faire marcher pour un autre site (il n'y a peut être même aucune modif à faire).

C'est pas trivial en tous cas. En prenant l'url figurant dans la barre d'adresse du navigateur, çà le fait pas. J'ai l'impression qu'il y a du flash à gogo dans m6replay.

Je vais consacrer un peu de temps à essayer de débusquer une url avec wireshark


Il est temps d'enlever les fenêtres, et de construire un monde ouvert.

Hors ligne

#2209 Le 02/10/2012, à 17:09

mac-gyver31

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

J'ai réussi à intercepter des url avec wireshark, y compris celles donnant accès aux fragments. Si je les saisies  dans un navigateur, ce dernier ouvre une fenêtre de téléchargement. En tatonant, on arrive à trouver le nombre exact de fragments composant la vidéo. Le script pluzzdl ne fonctionne pas avec ces urls.
Par contre, je suis tombé sur un forum intéressant : http://stream-recorder.com/forum/adobe- … 074p3.html
On y trouve un lien pour récupérer un script php qui mérite d'être essayé.
Mais il ne fait que la concaténation des fragments. Il faut avoir un logiciel de téléchargement batch comme IDM, qui n'existe que pour windaube.
Je cherche actuellement un équivalent ubuntu
@ +


Il est temps d'enlever les fenêtres, et de construire un monde ouvert.

Hors ligne

#2210 Le 04/10/2012, à 21:05

chaoswizard

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

KSV avait utilisé le code de pluzzdl comme base pour ses scripts (après, il a rajouté un paquet de trucs maintenant !).
Je pense quand même que le code pour charger sur M6 doit être assez proche de ce que l'on a déjà.

Je n'ai pas vraiment le temps de m'y pencher, on bosse actuellement sur la nouvelle version de TVDownloader, on verra ensuite !

Dernière modification par chaoswizard (Le 06/10/2012, à 11:41)


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#2211 Le 04/10/2012, à 21:22

mac-gyver31

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

Vous m'avez déjà tous bien aidé. Avec wireshark, j'ai trouvé les url qui pointent sur les fragments.
Par tatonnement, j'arrive à trouver rapidement le nombre de fragments qui composent la vidéo.
Avec wget et un petit scipt en php (que je connais un peu, alors que je connais pas du tout python), j'arrive a automatiser le téléchargement de tous les fragments.
J'en suis là. J'essaierai ensuite le script trouvé dans mon post précédent pour les assembler.
@+ pour le résultat.


Il est temps d'enlever les fenêtres, et de construire un monde ouvert.

Hors ligne

#2212 Le 04/10/2012, à 22:13

k3c

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

@ mac gyver

excellent !

Si tu peux poster ton php, qu'on le convertisse en Python


Archlinux sur Xiaomi Air 13

Hors ligne

#2213 Le 05/10/2012, à 14:44

11gjm

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

Bonjour à tous ,

Suite aux infos de "bishop" , j'ai testé :

http://videos.tmc.tv/suspect-numero-1/suspect-n-1-la-cougar-et-le-legionnaire-on-a-tue-mon-enfant-7558353-848.html
---
source de la vidéo :
http://www.wat.tv/video/suspect-1-cougar-legionnaire-59urf_4dtcp_.html
ou
https://www.wat.tv/swf2/145690nIc0K118857851

TESTÉ avec "captvty"

protocole de diffusion : rtmpe (rtmp chiffré)
nom de l'hôte : www.wat.tv
nom du service : ondemand
chemin d'accès du flux :  
mp4:vod/H264-384x288/78/51/8857851.h264?bu=&login=suspect-numero1&i=82.243.92.22&u=81d857ea405fdbc21f4a058ae99458ca&sum=64db6a4f344dfac87f389902c3fec71a
port : 1935
enregistrement du flux : 8857851.flv
adresse du lecteur Flash : https://www.wat.tv/images/v40/loaderexport.swf?revision=4.1.66
---
rtmpe://wske.wat.tv/ondemand/mp4:vod/H264-384x288/78/51/8857851.h264bu=&login=suspect-numero-1&i=82.243.92.22&u=81d857ea405fdbc21f4a058ae99458ca&sum=64db6a4f344dfac87f389902c3fec71a

Le constat se situe au niveau de l'adresse qui doit être RTMPE et non pas RTMPTE .
Vidéo obtenue sans PB .

Cordialement .

NB: Je suis sous XP sp3 .

Hors ligne

#2214 Le 05/10/2012, à 17:25

k3c

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

Merci 11gjm

version corrigée

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# TF1 version 0.2 par k3c, correction de 11gjm
import subprocess, optparse, re, sys, os, shlex
import socket
from urllib2 import Request, urlopen, URLError, HTTPError
from urllib2 import ProxyHandler, Request, urlopen, URLError, HTTPError
import time,md5,random,urllib2
import bs4 as BeautifulSoup
timeout = 90
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_wat(id):
    ID_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_WAT)+""+timesec).hexdigest()
    id_url1 = "http://www.wat.tv/get/web/"+str(ID_WAT)+"?token="+token+"/"+timesec+"&getURL=1&country=FR"
    return id_url1

def main():
    # timeout en secondes
    socket.setdefaulttimeout(timeout)
    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 )
    the_url = sys.argv[1] 
    html = urlopen(sys.argv[1]).read()
    nom = sys.argv[1].split('/')[-1:][0]
    no = nom.split('.')[-2:][0]
    soup = BeautifulSoup.BeautifulSoup(html)
    debut_id = str(soup.find('div', attrs={'class' : '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)
        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')
        player = "http://www.wat.tv/images/v40/PlayerWat.swf?revision=4.0.992"
        data0 = re.search('rtmpte://(.*)h264',data).group(0).replace('rtmpte','rtmpe')
        data1 = re.search('&u=(.*)&sum',data).group(1)
        data2 = re.search('&sum=(.*)$',data).group(1)
        data3 = data1+data2
        app = re.search('wske.wat.tv/(.*)/mp4:vod',data).group(1)
        playpath = re.search('mp4:vod(.*).h264',data).group(0)
#        cmds = "rtmpdump"+" --host "+host+" -l 0 --app "+app+" --playpath "+playpath+" --swfVfy "+player+" --port 443 -e -k 1 --flv "+str(no)+".mp4"
        cmds = 'rtmpdump -r "%s" -c 1935 -m 10 -w 40ee2a765514facfc6b1eb2745d22cdbdfaaf7f1488b17600c1a22dd3074735d -x 339543 -o "%s.mp4"' % (data0, str(no))
        arguments = shlex.split( cmds )
        print arguments
        process = subprocess.Popen( arguments, stdout = subprocess.PIPE).communicate()[0]
if __name__ == "__main__":
    main()

Archlinux sur Xiaomi Air 13

Hors ligne

#2215 Le 05/10/2012, à 20:53

11gjm

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

Bonjour ,

@k3c : merci de me nommer ; mais tous les remerciements te reviennent .

Concernant "tf1.py version 0.2"
Je ne sais pas , si cela a une importance .
Il faudrait modifier la version du player qui passe de :
revision=4.0.992  à  revision=4.1.66

Étant donné que je suis sous windows , et essayant un batch sous "Python27" .
J'ai des disfonctionnements :
----
import bs4 as BeautifulSoup
soup = BeautifulSoup.BeautifulSoup(html)
etc...
---

Ce n'est pas grave , puisque je peux utiliser "captvty" .
C'est juste pour le "fun" .

Cordialement .

Hors ligne

#2216 Le 05/10/2012, à 22:42

bibichouchou

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

@mac-gyver31
salut,
je ne veux pas te décourager mais m6/w9 a mis des verrous numériques (drm) sur tous (?) ses contenus. les fragments sont cryptés et je ne crois pas qu'il soit possible de les recoller. j'ai encore fait un essai cette semaine sans succès.
Sinon, en ce qui concerne le téléchargement des fragments, je ne comprends pas pourquoi tu n'as pas utilisé le script de KSV que tu indiques. La seule chose requise est de trouver l'adresse du manifest. Ensuite

php AdobeHDS.php --manifest url_du_manifest 

et ça télécharge... Le tout est de trouver l'adresse du manifest...

en tout cas, c'est gentil d'essayer et d'y consacrer du temps
Amicalement.

Dernière modification par bibichouchou (Le 05/10/2012, à 22:49)

Hors ligne

#2217 Le 07/10/2012, à 18:31

11gjm

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

Bonjour à tous ,

@k3c :
---
"TF1 version 0.2 par k3c" , sous "Python 2.73" :

_ j'ai résolu le problème "import bs4 as BeautifulSoup" .
_ j'ai changé la version du player .
_ j'ai lancé un fichier batch , tout fonctionne correctement .

sous windows XP sp3 .
---

Ayant lu , qu'il existait une nouvelle version de "Python" , la 3.3.0 .
Je me suis dit , essayons la .
( lien : http://www.python.org/ftp/python/3.3.0/python-3.3.0.msi ) .

---
"TF1 version 0.2 par k3c" , sous "Python 3.3.0" :

_ Ça ne fonctionne pas !!!

Message d'erreur

File "F:\TvDl\tf1_02.py" , line 70
host = re.search('rtmpte://(.*)/ondemand',data).group(1)

TabError : Inconsistent use of tabs and spaces in indentation .
---

Cordialement .

Dernière modification par 11gjm (Le 08/10/2012, à 10:02)

Hors ligne

#2218 Le 08/10/2012, à 19:32

k3c

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

@ 11gjm

On dirait que Python 3.3 est moins permissif que Python 2 sur le mélange tabulations et espaces.
Tu peux refaire un essai en ne mettant que des tabulations ou que des espaces pour l'indentation ?
Et sinon tu peux passer le code en question dans 2to3
http://docs.python.org/library/2to3.html

Sinon Python 3 (.x) est plus beau, plus objet... que Python 2 (il paraît).
Mais toutes les prods en Python que je connais sont en Python 2.3 à 2.7 pour les plus récentes.
Fin du hors-sujet.


Archlinux sur Xiaomi Air 13

Hors ligne

#2219 Le 08/10/2012, à 23:03

mac-gyver31

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

@k3c
mon script php n'a aucun intérêt en l'état pour l'instant. Les url des fragments d'un des épisodes NCIS sont en dur dans le code.
@bibichouchou.
J'ai essayé mais sans succés, probablement n'ayant pas compris comment l'utiliser, et en particulier la signification du mot "manifest". Est-ce l'url des fragments que j'ai trouvé avec wireshark ?

Bon, si les fragments sont cryptés, c'est sans espoir alors... M'enfin quand même, quand on regarde la video en utlisant un navigateur, ils sont bien décodés à la volée pour être affichés... C'est quoi qui le fait ? une nouvelle version d'un player flash ? comment est-il mis en oeuvre dans le navigateur ? c'est le plugin flash qui fait çà ?


Il est temps d'enlever les fenêtres, et de construire un monde ouvert.

Hors ligne

#2220 Le 08/10/2012, à 23:05

mac-gyver31

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

Je vais finir par utiliser un logiciel qui encode en avi tout ou partie de l'écran avec le son à la volée. J'aurai pas la qualité HD d'origine, mais ce sera mieux que rien, pour pouvoir au moins revoir les épisodes que j'ai pas pu voir.


Il est temps d'enlever les fenêtres, et de construire un monde ouvert.

Hors ligne

#2221 Le 09/10/2012, à 12:11

Tuxmouraille

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

Bonjour,
Les box TV ont la fonction TV Replay. Est ce que quelqu'un a déjà essayé d'analyser le flux réseau de la box TV lors de l'utilisation de cette fonction? Avec Wireshark par exemple.


Le support d'Optimus pour Linux.
Ubuntu 18.04 64 bits, portable ASUS N53SN-SZ161V, Intel® Core™ i5-2410M @ 2.30GHz, 8080MB SODIM Ram, NVIDIA® GeForce™ GT 550M

Hors ligne

#2222 Le 09/10/2012, à 17:43

chaoswizard

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

Tuxmouraille a écrit :

Bonjour,
Les box TV ont la fonction TV Replay. Est ce que quelqu'un a déjà essayé d'analyser le flux réseau de la box TV lors de l'utilisation de cette fonction? Avec Wireshark par exemple.

Pas con.
Dans la même idée, il est intéressant de tester l'accès au site avec un user-agent de type tablette ou smartphone ; certains sites changent du tout au tout.


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#2223 Le 10/10/2012, à 00:15

bibichouchou

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

@mac-gyver31
voilà un exemple de manifest. tu as du le voir passer dans le blabla de wireshark... je l'ai trouvé avec ngrep.
http://e203.cdn.m6web.fr/hds/4/d/3/w9_s … 1349910139

Sinon, je me pose les mêmes questions que toi. Je me demande si la clé du drm n'est pas dans le manifest. Et il me semble qu'avec mplayer on peut décoder une vidéo verrouillée en lui filant la clé de déverrouillage en ligne de commande. Mais je ne vois pas comment m'y prendre pour faire quelques tests...

Avez-vous vu qu'Arte s'est mise aux verrous numériques également ? Ces vilains ont bloqué les derniers épisodes des Tudors (oui oui seulement les 4 ou 6 derniers). Il me semble bien que c'est la première fois que je vois ça. En tout cas les verrous marchent bien, puisque l'on ne peut même pas voir les vidéos avec Firefox ! C'est vraiment pénible que les chaînes du service public, financées par nos deniers, se permettent ce genre de fantaisie...

Ciao.

Hors ligne

#2224 Le 10/10/2012, à 07:36

jediafr

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

Bonjour à tous,

Depuis 2 jours je ne vois plus les guignols dans Tvdownloader (quelquesoit la catégorie), avez vous le meme pb ?
C'est etrange car le dl du petit journal fonctionne bien...

Hors ligne

#2225 Le 10/10/2012, à 12:47

mac-gyver31

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

bibichouchou a écrit :

Je me demande si la clé du drm n'est pas dans le manifest.

Faut pas rêver. Ce serait trop simple...

bibichouchou a écrit :

Et il me semble qu'avec mplayer on peut décoder une vidéo verrouillée en lui filant la clé de déverrouillage en ligne de commande.

J'ai passé en revue toutes les options (http://tivo-mplayer.sourceforge.net/doc … r-man.html). J'ai rien vu de tel. Mais  y'en a tellement que j'ai pu passer dessus sans la voir.

Et puis c'est de la techno Adobe. Les connaissant, l'algorithme de codage / décodage est trés probablement propriétaire. Seul le player flv intégré au pluggin flash fournit par adobe peut donc lire ces vidéos (sans pluggin flash installé sur le navigateur, le site M6replay ne fonctionne pas. Tout le site est en flash pur), et la clé peut indifféremment être unique pour tous les sites qui implémentent cette techno, auquel cas elle peut trés bien être intégrée au lecteur, ou alors passée en paramètre via le manifest.

Quand bien même on trouverait la clé, on pourrait rien en faire.


Il est temps d'enlever les fenêtres, et de construire un monde ouvert.

Hors ligne