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