Forum Astuces.divers Télécharger Arte HD

Posté par  . Licence CC By‑SA.
Étiquettes :
9
28
sept.
2013

Salut tout le monde

Je viens partager mon grabber perso.

Ajouter en ligne de commande les liens de Arte+7, et hop !
Les émissions régulières (listées dans show_names) sont horodatées.
(Nécessite BeautifulSoup 4 et rtmpdump, et il y a certainement à redire sur la qualité du code :)

#!/usr/bin/python3
#
# Téléchargeur pour Arte
#
import sys
import json
import urllib.request
import subprocess
from bs4 import BeautifulSoup

def call_rtmpdump(rtmpdump_opts):
    ''' Paramètres obtenus grâce à rtmpsuck :
        flashVer: LNX 11,2,202,297
        swfUrl: http://www.arte.tv/player/v2//jwplayer6/mediaplayer.6.3.3242.swf
        pageUrl: http://www.arte.tv
    '''
    opt_f = ['-f', 'LNX 11,2,202,297']
    opt_W = ['-W', 'http://www.arte.tv/player/v2//jwplayer6/mediaplayer.6.3.3242.swf']
    opt_p = ['-p', 'http://www.arte.tv']
    cmd = ['/usr/bin/rtmpdump'] + opt_f + opt_W + opt_p + rtmpdump_opts
    try:
        subprocess.check_call(cmd)
    except subprocess.CalledProcessError:
        print("Téléchargement incomplet :(")
    return

def find_video(plus7_url):
    video_name, video_excerpt, video_url = None, None, None
    tr_map = ''.maketrans('/', 'x', '"')
    show_names = ["360° - Géo","360° - GÉO", "Architectures", "Mystères d'archives", "Personne ne bouge !", "Tracks"]

    soup = BeautifulSoup(urllib.request.urlopen(plus7_url).read().decode())
    divs = soup.findAll('div', {'class':'video-container'})
    for a in divs:
        if 'arte_vp_url' in a.attrs:
            json_url = a.attrs['arte_vp_url']
            if 'PLUS7' in json_url:
                break
    else:
        print("\nAucune vidéo trouvée dans {}".format(plus7_url))
        return None

    jdic1 = json.loads(urllib.request.urlopen(json_url).read().decode())
    vjp = jdic1['videoJsonPlayer']

    vs5 = vjp['VST']['VS5']
    video_date = '-'.join((vs5[4:], vs5[2:4], vs5[:2]))
    if 'V7T' in vjp:
        video_excerpt = vjp['V7T']
    else:
        video_excerpt = "<Aucune description>"

    vti = vjp['VTI']
    title = vti.replace('"', '«', 1).replace('"', '»', 1)
    title = title.translate(tr_map).strip()

    if title in show_names:
        video_name = 'Arte - {} - {}.flv'.format(title, video_date)
    else:
        video_name = 'Arte - {}.flv'.format(title)
    print("\nVidéo trouvée : {}\n{}".format(video_name, video_excerpt))

    sq1 = vjp['VSR']['RTMP_SQ_1']
    opt_r = sq1['streamer']
    split_result = urllib.parse.urlsplit(opt_r)
    opt_a = split_result.path.lstrip('/')
    opt_y = 'mp4:' + sq1['url']
    rtmpdump_opts = ['-r', opt_r, '-a', opt_a, '-y', opt_y, '-o', video_name]
    return rtmpdump_opts

for url in sys.argv[1:]:
    opts = find_video(url)
    if opts:
        call_rtmpdump(opts)
  • # c'est beau

    Posté par  . Évalué à 5.

    de sortir le shell python pour :

    • parser une URL
    • lancer une commande shell pour avoir le dump
  • # weboob le fait

    Posté par  . Évalué à 4.

    Tu devrais regarder du côté de weboob et l'application videoob
    http://weboob.org/applications/videoob

    • [^] # Re: weboob le fait

      Posté par  . Évalué à 3.

      La dernière fois que j'ai voulu tester videoob pour Arte+7, çà ne fonctionnait pas (weboob-0g).
      En revanche, Qarte fonctionne : https://launchpad.net/qarte

    • [^] # Re: weboob le fait

      Posté par  . Évalué à 2.

      J'ai installé weboob, mais ça ne fonctionnait pas bien pour Arte, et puis je voulais un truc qui marche en batch, tout seul.
      Je me suis inspiré de ce site pour la première version.
      Puis en juillet, ça n'a plus marché, Arte avait supprimé cette possibilité.
      Après avoir trouvé un exemple fonctionnel d'utilisation de rtmpdump, j'ai réécrit le script, que voici.
      J'aurais dû creuser weboob, mais y'avait urgence :) Et puis je débute en Python, alors contribuer à tel projet…

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.