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 NeoX . Évalué à 5.
de sortir le shell python pour :
# weboob le fait
Posté par Nonolapéro . É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 Fab . É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 VoixOff . É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.