Porneia delights

— Il y a quelques années, illovæ avait écrit un script bash pour aisément lister et télécharger les émissions d'Arte+7, le fameux portail vidéo d'Arte qui permet d'en revoir certaines émissions gratuitement pendant 7 jours. Le temps passant et l'architecture du site de la chaîne ayant changé, le code n'avait plus été maintenu.

Il existe de nos jours des projets similaires et très évolués comme Qarte par exemple. Je ne l'ai jamais testé, c'est un outil graphique. En ligne de commande, il est possible d'arriver à télécharger ces émissions avec weboob — par l'intermédiaire d'un plugin je crois. C'est un programme très sympas qui permet de faire plein de choses, que l'on doit normalement faire depuis un navigateur internet, mais depuis son terminal (plus d'informations par ici). Mais en ce qui concerne le téléchargement (et surtout le listing en fait) des vidéos d'Arte+7 je n'avais pas été convaincu (je ne prétend pas masteriser cet outil, j'ai sûrement dû mal m'y prendre, mais le fait est que j'ai laissé tomber).

Bref, tout ça pour dire que je m'étais mis en tête de me faire mon propre script. Mes propres scripts devrais-je même plutôt dire. N'ayant pas les compétences pour faire quelques choses de très pointu avec des tas d'options comme c'était le cas pour le script d'illovæ, ma réalisation est très simple, probablement maladroite et pas forcément ergonomique. Je sais qu'on doit pouvoir faire dix fois mieux et en un seul script. Mais ça me convient comme ça (et je sais qu'elle convient à au moins une autre personne). Je ne pensais donc jamais la diffuser.

En parcourant tout à l'heure les archives du newsgroup fcol.configuration, je suis retombé sur un vieux fil traitant justement de cette question de capture de stream d'Arte+7 où j'avais partagé mes quelques lignes de code. J'ai trouvé que c'était la bonne occasion pour mettre tout ça dans une page html et de l'archiver sur le Porneia delights...

Lister les vidéos disponibles

Arte utilise un fichier xml pour les vidéos disponibles, nous utilisons donc xsltproc pour le travailler.

Le script arte-ls.sh qui suit requiert wget, xsltproc et lynx (ou tout autre navigateur en CLI — éditez les dernières lignes en fonction) :

#!/bin/sh
# arte-ls.sh 0.1 e20100633
# $ arte-ls.sh

TDATE=$(date "+%m%d-%H%M")
XMLLINK=$(wget -q -O - http://videos.arte.tv/fr/videos |grep XmlUrl |cut -d "\"" -f2)

wget -O /tmp/arte_$$_$TDATE.xml "http://videos.arte.tv$XMLLINK"

xsltproc /tmp/artexml.xsl /tmp/arte_$$_$TDATE.xml > /tmp/arte.html

# Pour utiliser lynx
lynx /tmp/arte.html

# Pour utiliser w3m via l'instance d'Emacs
#emacsclient --eval '(w3m-find-file "/tmp/arte.html")'

Le fichier artexml.xsl (utilisé par xsltproc) à placer dans /tmp qui va servir au formatage de la page html finale :

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<body>
<dl>
<xsl:for-each select="coverflow/video">
<dt>
<xsl:value-of select="title"/>
</dt>
<dd>
<xsl:value-of select="startDate"/> - <xsl:value-of select="duration"/><br/>
[http://videos.arte.tv/<xsl:value-of select="targetUrl"/>]
<p>
<xsl:value-of select="teaserText"/>
</p>
</dd>
<hr/>
</xsl:for-each>
</dl>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Il suffit de lancer arte-ls.sh et après traitement lynx s'ouvre avec les vidéos disponibles (titre, url, synopsys, etc).

Enregistrer une vidéo

Si une des vidéos vous intéresse, récupérez le lien fourni sur la page générée par arte-ls.sh (du genre http://videos.arte.tv/fr/videos/a_qui_profite_la_crise_-4204438.html donc) et mettez le en argument à ce script, nommé chez moi arte-dl.sh :

#!/bin/bash
# arte-dl.sh 0.1 e20100633
# $ arte-dl.sh <lien>

XMLLINK=$(wget -q -O - $1 |grep "embed src" |cut -d"=" -f11 |sed 's/"//;s/%3A/:/;s/%2F/\//g')
XMLVIDEOLINK=$(wget -q -O - $XMLLINK |grep 'lang="fr"' |cut -d"\"" -f4)
RTMPLINK=$(wget -q -O - $XMLVIDEOLINK |grep hd |cut -d">" -f2 |sed 's/<\/url//')

echo "$RTMPLINK"
#rtmpdump -e -W "http://videos.arte.tv/videoplayer.swf" -r "$RTMPLINK" -o "$2"

Par défaut, le script renvoie simplement l'adresse rtmp de la vidéo dans votre terminal. Vous pouvez décommenter la dernière ligne si vous avez rtmpdump. Le script s'utilisera alors de cette manière :

$ arte-dl.sh [http://lien] [titre_voulu_video.flv]

Remarquez l'option -W "http://videos.arte.tv/videoplayer.swf" passée à rtmpdump. Sans elle votre téléchargement se coupera aléatoirement sans en avoir terminé.


Vous pouvez envoyer par mail vos commentaires et vos remarques à e20100633[at]inbox[dot]lv.

Enregistrer les émissions d'Arte+7 (695 mots) de e20100633 est diffusé sous la licence WTFPLv2 et Beer-ware (Révision 42).

Vulnerant omnes, ultima necat. Sic transit hominis regnum.
Copyleft © 2012 — e20100633