207.241.229.150
Le Poisson Libre #


Comment faire son propre script pour télécharger les vidéos Arte

Il y a quelques mois, le service ArteDowloader de Florian Crouzat fermait à cause de soucis de droits d'auteur. J'avais du coup décidé de créer mon propre moyen de télécharger les vidéos, mais je n'ai pas eu le temps de m'y mettre sérieusement, jusqu'à maintenant !

Je voudrais donc partager avec vous le chemin que j'ai parcouru pour y arriver ! N'hésitez pas à faire les manipulations, c'est toujours intéressant :-)

Commençons par le commencement

Tout d'abord allons sur le site d'Arte, puis sur le service Arte+7. J'ai choisi une vidéo au hasard.

Déjà, on peut remarquer au niveau de l'url que toutes les vidéos ont un ID qui leur est propre, cela nous sera bien utile par la suite !

Mais ce que l'on cherche c'est où Arte stocke ces vidéos, allons donc voir le lien d'intégration, il y a souvent des informations croustillantes à l'intérieur !

Et c'est bien le cas, on voit que le script pointe vers une url particulière. Rendons-nous dessus !

On arrive alors sur une page javascript, il ne faut pas prendre peur, il y a beaucoup de choses qui ne nous intéressent pas. Regardons la variable "player_code", on y trouve un lien qui contient lui-même un lien vers une page json. C'est ça qui va nous intéresser, car on devrait y trouver des informations sur la vidéo. Le json un standard d'écriture de documents, basé sur le javascript, il peut donc être traité par un algorithme facilement :-)

Chez moi ça ressemble à ça : http://arte.tv/papi/tvguide/videos/stream/player/F/054795-010_PLUS7-F/ALL/ALL.json. Et qu'est-ce que l'on remarque ? Et oui ! Le fameux ID est présent. Ce qui fait que l'on peut trouver la page json de l'importe quelle vidéo simplement avec son ID ! Testez, prenez celui d'une autre vidéo, remplacer le dans l'url et vous tomberez sur un autre document json.

Bon, on est content, mais cette page va nous servir à quoi ? Elle est vraiment indigeste :-/ Et bien je vous laisse faire un crtl+f et chercher ".mp4". On trouve plusieurs url de vidéos ! Vous pouvez en prendre une et la coller dans un autre onglet, vous tomberez sur la vidéo en elle même, c'est gagné !

Mais pourquoi y a-t-il plusieurs url ? En fait, ce sont les différentes langues et qualités disponibles. Le truc maintenant, c'est que si l'on veut faire un script à partir de ça, il va falloir comprendre comment se structure le document. Perso j'y suis allé à la méthode bourrine, j'ai copié collé dans un éditeur de texte et je l'ai analysé en mettant des sauts de lignes et des tabulations là afin d'éclairsir.

La structure

Un document au format json se constitue de cette manière : { clé1 : valeur1 , clé2 : valeur2 }. La clé permet d'identifier un élément, et la valeur peut être n'importe quoi, comme une autre ensemble entre accolades ! Et c'est le cas ici, afin de créer plusieurs niveaux de sections.

Ce qui nous intéresse se trouve dans la section reconnue par la clé "videoJsonPlayer". Ensuite, on trouve d'autres données dans les sous-sections, par exemple, le titre est dans celle "V7T". Les url des vidéos sont quant à elles dans la section "VSR".

Les vidéos sont triées par formats et qualités, ce qui nous intéresse donc ce sont tout les sections qui commencent par HTTP. On trouve :

  • HTTP_MP4_LQ_1
  • HTTP_MP4_MQ_1
  • HTTP_MP4_SQ_1
  • Qui correspondent aux vidéos françaises pour différentes qualités, les Allemandes ont un 2. Enfin, l'url de la vidéo est repérée par la clé "url".

    Un petit script

    J'ai choisi le python pour faire mon script, d'abord parce que c'est mon langage préféré, et parce qu'il est assez adapté pour ce genre de petit programme court.

    (Désolé pour la lisibilité, faut que je code de la coloration syntaxique un jour)

    #coding: utf-8
    import json #module pour lire les documents dans ce format
    import requests #module pour réaliser des requêtes http

    code=raw_input('Entrez le code la vidéo : ')
    rep=requests.get("http://arte.tv/papi/tvguide/videos/stream/player/F/{0}_PLUS7-F/ALL/ALL.json".format(code)) #on récupère le json
    resp=json.loads(rep.text) #on le parse

    qualite=raw_input('Quelle qualité ?[720p][400p][220p] ') #on demande la qualité voulue
    if(qualite=='720p'):
    qual='HTTP_MP4_SQ_1'
    elif(qualite=='400p'):
    qual='HTTP_MP4_MQ_1'
    else:
    qual='HTTP_MP4_LQ_1'
    print resp['videoJsonPlayer']['VSR'][qual]['url'] #on affiche l'url de la vidéo

    C'est assez sommaire, il serait peut être mieux de demander à l'utilisateur l'url au lieu du code, ou lancer un téléchargement automatique (et l’enregistrer avec son titre ?), ou permettre de choisir la langue. C'était juste pour montrer les grandes lignes, si ça peut inspirer quelqu'un ^^

    Sinon, mon code est fonctionnel, je le laisse là sans aucune licence, faîtes en ce que vous voulez :-)

    EDIT : J'en ai fait un script totalement fonctionnel, il est , enjoy !

    publié le 08/05/2015 à 23h35 dans libre

    Pseudo

    Salut !
    Il semble que ce ne soit pas pareil pour toutes les vidéos ou bien ce n'est plus pareil, mais ton billet m'a aidé à trouver le bon lien, voici ce que je vois :
    - Pour http://www.arte.tv/guide/fr/062201-006-A/jordskott-la-foret-des-disparus-6-10
    - Je coupe uMatrix pour pouvoir afficher le code de "Partager" après avoir lancé la vidéo ("Partager" plus bas dans l'article n'affiche pas la même chose)
    - L'URL réduite trouvée http://tinyurl.com/h8ethht me mène vers http://www.arte.tv/arte_vp/index.php?json_url=https%3A%2F%2Fapi.arte.tv%2Fapi%2Fplayer%2Fv1%2Fconfig%2Ffr%2F062201-006-A%3Fplatform%3DARTEPLUS7%26autostart%3D1⟨=fr_FR&config;=arte_tvguide&share;=1
    - Je me rends donc sur la page https://api.arte.tv/api/player/v1/config/fr/062201-006-A
    - Je trouve (entre autres) HTTP_MP4_SQ_1 et l'URL http:\/\/arte.gl-systemhaus.de\/am\/tvguide\/default\/062201-006-A_SQ_2_VF-STF_02346299_MP4-2200_AMM-Tvguide.mp4
    - Je corrige en http://arte.gl-systemhaus.de/am/tvguide/default/062201-006-A_SQ_2_VF-STF_02346299_MP4-2200_AMM-Tvguide.mp4

    Mes compétences s'arrête là malheureusement, je ne sais pas encore scripter, mais ça me permet d'ouvrir le flux avec VLC et de pouvoir l'enregistrer.

    Par ailleurs, je suis surpris de pouvoir lire la vidéo avec Abrowser (navigateur de GNU/Linux Trisquel) !

    publié le 22/05/2016 à 03h30





    RSS Suivre les RSS