aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2018-08-26 20:07:52 +0700
committerSergey M․ <dstftw@gmail.com>2018-08-26 20:08:55 +0700
commitdac6f7654a577533ebcb825f34f0d7735274b205 (patch)
treea48569a2192dba9cdd7c984309370171f0233c38
parente0b6e988710037791057cd0b65f795d44e2f534c (diff)
downloadyoutube-dl-dac6f7654a577533ebcb825f34f0d7735274b205.tar.xz
[tvplayhome] Add extractor (closes #17344)
-rw-r--r--youtube_dl/extractor/extractors.py1
-rw-r--r--youtube_dl/extractor/tvplay.py114
2 files changed, 112 insertions, 3 deletions
diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py
index a8b89bcde..6012d0f5f 100644
--- a/youtube_dl/extractor/extractors.py
+++ b/youtube_dl/extractor/extractors.py
@@ -1181,6 +1181,7 @@ from .tvp import (
from .tvplay import (
TVPlayIE,
ViafreeIE,
+ TVPlayHomeIE,
)
from .tvplayer import TVPlayerIE
from .tweakers import TweakersIE
diff --git a/youtube_dl/extractor/tvplay.py b/youtube_dl/extractor/tvplay.py
index d3adab457..8f1ff3b76 100644
--- a/youtube_dl/extractor/tvplay.py
+++ b/youtube_dl/extractor/tvplay.py
@@ -32,12 +32,12 @@ class TVPlayIE(InfoExtractor):
https?://
(?:www\.)?
(?:
- tvplay(?:\.skaties)?\.lv/parraides|
- (?:tv3play|play\.tv3)\.lt/programos|
+ tvplay(?:\.skaties)?\.lv(?:/parraides)?|
+ (?:tv3play|play\.tv3)\.lt(?:/programos)?|
tv3play(?:\.tv3)?\.ee/sisu|
(?:tv(?:3|6|8|10)play|viafree)\.se/program|
(?:(?:tv3play|viasat4play|tv6play|viafree)\.no|(?:tv3play|viafree)\.dk)/programmer|
- play\.novatv\.bg/programi
+ play\.nova(?:tv)?\.bg/programi
)
/(?:[^/]+/)+
)
@@ -204,10 +204,18 @@ class TVPlayIE(InfoExtractor):
},
},
{
+ 'url': 'https://play.nova.bg/programi/zdravei-bulgariya/764300?autostart=true',
+ 'only_matching': True,
+ },
+ {
'url': 'http://tvplay.skaties.lv/parraides/vinas-melo-labak/418113?autostart=true',
'only_matching': True,
},
{
+ 'url': 'https://tvplay.skaties.lv/vinas-melo-labak/418113/?autostart=true',
+ 'only_matching': True,
+ },
+ {
# views is null
'url': 'http://tvplay.skaties.lv/parraides/tv3-zinas/760183',
'only_matching': True,
@@ -288,6 +296,7 @@ class TVPlayIE(InfoExtractor):
'url': m.group('url'),
'app': m.group('app'),
'play_path': m.group('playpath'),
+ 'preference': -1,
})
else:
fmt.update({
@@ -447,3 +456,102 @@ class ViafreeIE(InfoExtractor):
'skip_rtmp': True,
}),
ie=TVPlayIE.ie_key(), video_id=video_id)
+
+
+class TVPlayHomeIE(InfoExtractor):
+ _VALID_URL = r'https?://tvplay\.(?:tv3\.lt|skaties\.lv|tv3\.ee)/[^/]+/[^/?#&]+-(?P<id>\d+)'
+ _TESTS = [{
+ 'url': 'https://tvplay.tv3.lt/aferistai-n-7/aferistai-10047125/',
+ 'info_dict': {
+ 'id': '366367',
+ 'ext': 'mp4',
+ 'title': 'Aferistai',
+ 'description': 'Aferistai. Kalėdinė pasaka.',
+ 'series': 'Aferistai [N-7]',
+ 'season': '1 sezonas',
+ 'season_number': 1,
+ 'duration': 464,
+ 'timestamp': 1394209658,
+ 'upload_date': '20140307',
+ 'age_limit': 18,
+ },
+ 'params': {
+ 'skip_download': True,
+ },
+ 'add_ie': [TVPlayIE.ie_key()],
+ }, {
+ 'url': 'https://tvplay.skaties.lv/vinas-melo-labak/vinas-melo-labak-10280317/',
+ 'only_matching': True,
+ }, {
+ 'url': 'https://tvplay.tv3.ee/cool-d-ga-mehhikosse/cool-d-ga-mehhikosse-10044354/',
+ 'only_matching': True,
+ }]
+
+ def _real_extract(self, url):
+ video_id = self._match_id(url)
+
+ webpage = self._download_webpage(url, video_id)
+
+ video_id = self._search_regex(
+ r'data-asset-id\s*=\s*["\'](\d{5,7})\b', webpage, 'video id',
+ default=None)
+
+ if video_id:
+ return self.url_result(
+ 'mtg:%s' % video_id, ie=TVPlayIE.ie_key(), video_id=video_id)
+
+ m3u8_url = self._search_regex(
+ r'data-file\s*=\s*(["\'])(?P<url>(?:(?!\1).)+)\1', webpage,
+ 'm3u8 url', group='url')
+
+ formats = self._extract_m3u8_formats(
+ m3u8_url, video_id, 'mp4', entry_protocol='m3u8_native',
+ m3u8_id='hls')
+ self._sort_formats(formats)
+
+ title = self._search_regex(
+ r'data-title\s*=\s*(["\'])(?P<value>(?:(?!\1).)+)\1', webpage,
+ 'title', default=None, group='value') or self._html_search_meta(
+ 'title', webpage, default=None) or self._og_search_title(
+ webpage)
+
+ description = self._html_search_meta(
+ 'description', webpage,
+ default=None) or self._og_search_description(webpage)
+
+ thumbnail = self._search_regex(
+ r'data-image\s*=\s*(["\'])(?P<url>(?:(?!\1).)+)\1', webpage,
+ 'thumbnail', default=None, group='url') or self._html_search_meta(
+ 'thumbnail', webpage, default=None) or self._og_search_thumbnail(
+ webpage)
+
+ duration = int_or_none(self._search_regex(
+ r'data-duration\s*=\s*["\'](\d+)', webpage, 'duration',
+ fatal=False))
+
+ season = self._search_regex(
+ (r'data-series-title\s*=\s*(["\'])[^/]+/(?P<value>(?:(?!\1).)+)\1',
+ r'\bseason\s*:\s*(["\'])(?P<value>(?:(?!\1).)+)\1'), webpage,
+ 'season', default=None, group='value')
+ season_number = int_or_none(self._search_regex(
+ r'(\d+)(?:[.\s]+sezona|\s+HOOAEG)', season or '', 'season number',
+ default=None))
+ episode = self._search_regex(
+ r'(["\'])(?P<value>(?:(?!\1).)+)\1', webpage, 'episode',
+ default=None, group='value')
+ episode_number = int_or_none(self._search_regex(
+ r'(?:S[eē]rija|Osa)\s+(\d+)', episode or '', 'episode number',
+ default=None))
+
+ return {
+ 'id': video_id,
+ 'title': title,
+ 'description': description,
+ 'thumbnail': thumbnail,
+ 'duration': duration,
+ 'season': season,
+ 'season_number': season_number,
+ 'episode': episode,
+ 'episode_number': episode_number,
+ 'formats': formats,
+ }