youtube-dl

Another place where youtube-dl lives on
git clone git://git.oshgnacknak.de/youtube-dl.git
Log | Files | Refs | README | LICENSE

tv5unis.py (4090B)


      1 # coding: utf-8
      2 from __future__ import unicode_literals
      3 
      4 import re
      5 
      6 from .common import InfoExtractor
      7 from ..utils import (
      8     int_or_none,
      9     parse_age_limit,
     10     smuggle_url,
     11     try_get,
     12 )
     13 
     14 
     15 class TV5UnisBaseIE(InfoExtractor):
     16     _GEO_COUNTRIES = ['CA']
     17 
     18     def _real_extract(self, url):
     19         groups = re.match(self._VALID_URL, url).groups()
     20         product = self._download_json(
     21             'https://api.tv5unis.ca/graphql', groups[0], query={
     22                 'query': '''{
     23   %s(%s) {
     24     collection {
     25       title
     26     }
     27     episodeNumber
     28     rating {
     29       name
     30     }
     31     seasonNumber
     32     tags
     33     title
     34     videoElement {
     35       ... on Video {
     36         mediaId
     37       }
     38     }
     39   }
     40 }''' % (self._GQL_QUERY_NAME, self._gql_args(groups)),
     41             })['data'][self._GQL_QUERY_NAME]
     42         media_id = product['videoElement']['mediaId']
     43 
     44         return {
     45             '_type': 'url_transparent',
     46             'id': media_id,
     47             'title': product.get('title'),
     48             'url': smuggle_url('limelight:media:' + media_id, {'geo_countries': self._GEO_COUNTRIES}),
     49             'age_limit': parse_age_limit(try_get(product, lambda x: x['rating']['name'])),
     50             'tags': product.get('tags'),
     51             'series': try_get(product, lambda x: x['collection']['title']),
     52             'season_number': int_or_none(product.get('seasonNumber')),
     53             'episode_number': int_or_none(product.get('episodeNumber')),
     54             'ie_key': 'LimelightMedia',
     55         }
     56 
     57 
     58 class TV5UnisVideoIE(TV5UnisBaseIE):
     59     IE_NAME = 'tv5unis:video'
     60     _VALID_URL = r'https?://(?:www\.)?tv5unis\.ca/videos/[^/]+/(?P<id>\d+)'
     61     _TEST = {
     62         'url': 'https://www.tv5unis.ca/videos/bande-annonces/71843',
     63         'md5': '3d794164928bda97fb87a17e89923d9b',
     64         'info_dict': {
     65             'id': 'a883684aecb2486cad9bdc7bbe17f861',
     66             'ext': 'mp4',
     67             'title': 'Watatatow',
     68             'duration': 10.01,
     69         }
     70     }
     71     _GQL_QUERY_NAME = 'productById'
     72 
     73     @staticmethod
     74     def _gql_args(groups):
     75         return 'id: %s' % groups
     76 
     77 
     78 class TV5UnisIE(TV5UnisBaseIE):
     79     IE_NAME = 'tv5unis'
     80     _VALID_URL = r'https?://(?:www\.)?tv5unis\.ca/videos/(?P<id>[^/]+)(?:/saisons/(?P<season_number>\d+)/episodes/(?P<episode_number>\d+))?/?(?:[?#&]|$)'
     81     _TESTS = [{
     82         'url': 'https://www.tv5unis.ca/videos/watatatow/saisons/6/episodes/1',
     83         'md5': 'a479907d2e531a73e1f8dc48d6388d02',
     84         'info_dict': {
     85             'id': 'e5ee23a586c44612a56aad61accf16ef',
     86             'ext': 'mp4',
     87             'title': 'Je ne peux pas lui résister',
     88             'description': "Atys, le nouveau concierge de l'école, a réussi à ébranler la confiance de Mado en affirmant qu\'une médaille, ce n'est que du métal. Comme Mado essaie de lui prouver que ses valeurs sont solides, il veut la mettre à l'épreuve...",
     89             'subtitles': {
     90                 'fr': 'count:1',
     91             },
     92             'duration': 1370,
     93             'age_limit': 8,
     94             'tags': 'count:3',
     95             'series': 'Watatatow',
     96             'season_number': 6,
     97             'episode_number': 1,
     98         },
     99     }, {
    100         'url': 'https://www.tv5unis.ca/videos/le-voyage-de-fanny',
    101         'md5': '9ca80ebb575c681d10cae1adff3d4774',
    102         'info_dict': {
    103             'id': '726188eefe094d8faefb13381d42bc06',
    104             'ext': 'mp4',
    105             'title': 'Le voyage de Fanny',
    106             'description': "Fanny, 12 ans, cachée dans un foyer loin de ses parents, s'occupe de ses deux soeurs. Devant fuir, Fanny prend la tête d'un groupe de huit enfants et s'engage dans un dangereux périple à travers la France occupée pour rejoindre la frontière suisse.",
    107             'subtitles': {
    108                 'fr': 'count:1',
    109             },
    110             'duration': 5587.034,
    111             'tags': 'count:4',
    112         },
    113     }]
    114     _GQL_QUERY_NAME = 'productByRootProductSlug'
    115 
    116     @staticmethod
    117     def _gql_args(groups):
    118         args = 'rootProductSlug: "%s"' % groups[0]
    119         if groups[1]:
    120             args += ', seasonNumber: %s, episodeNumber: %s' % groups[1:]
    121         return args