youtube-dl

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

plays.py (1841B)


      1 # coding: utf-8
      2 from __future__ import unicode_literals
      3 
      4 import re
      5 
      6 from .common import InfoExtractor
      7 from ..utils import int_or_none
      8 
      9 
     10 class PlaysTVIE(InfoExtractor):
     11     _VALID_URL = r'https?://(?:www\.)?plays\.tv/(?:video|embeds)/(?P<id>[0-9a-f]{18})'
     12     _TESTS = [{
     13         'url': 'https://plays.tv/video/56af17f56c95335490/when-you-outplay-the-azir-wall',
     14         'md5': 'dfeac1198506652b5257a62762cec7bc',
     15         'info_dict': {
     16             'id': '56af17f56c95335490',
     17             'ext': 'mp4',
     18             'title': 'Bjergsen - When you outplay the Azir wall',
     19             'description': 'Posted by Bjergsen',
     20         }
     21     }, {
     22         'url': 'https://plays.tv/embeds/56af17f56c95335490',
     23         'only_matching': True,
     24     }]
     25 
     26     def _real_extract(self, url):
     27         video_id = self._match_id(url)
     28         webpage = self._download_webpage(
     29             'https://plays.tv/video/%s' % video_id, video_id)
     30 
     31         info = self._search_json_ld(webpage, video_id,)
     32 
     33         mpd_url, sources = re.search(
     34             r'(?s)<video[^>]+data-mpd="([^"]+)"[^>]*>(.+?)</video>',
     35             webpage).groups()
     36         formats = self._extract_mpd_formats(
     37             self._proto_relative_url(mpd_url), video_id, mpd_id='DASH')
     38         for format_id, height, format_url in re.findall(r'<source\s+res="((\d+)h?)"\s+src="([^"]+)"', sources):
     39             formats.append({
     40                 'url': self._proto_relative_url(format_url),
     41                 'format_id': 'http-' + format_id,
     42                 'height': int_or_none(height),
     43             })
     44         self._sort_formats(formats)
     45 
     46         info.update({
     47             'id': video_id,
     48             'description': self._og_search_description(webpage),
     49             'thumbnail': info.get('thumbnail') or self._og_search_thumbnail(webpage),
     50             'formats': formats,
     51         })
     52 
     53         return info