|
@ -8,7 +8,8 @@ from ..utils import float_or_none |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class VGTVIE(InfoExtractor): |
|
|
class VGTVIE(InfoExtractor): |
|
|
_VALID_URL = r'http://(?:www\.)?vgtv\.no/#!/[^/]+/(?P<id>[0-9]+)' |
|
|
|
|
|
|
|
|
IE_DESC = 'VGTV and BTTV' |
|
|
|
|
|
_VALID_URL = r'http://(?:www\.)?(?P<host>vgtv|bt)\.no/(?:(?:tv/)?#!/(?:video|live)/(?P<id>[0-9]+)|(?:[^/]+/)*(?P<path>[^/]+))' |
|
|
_TESTS = [ |
|
|
_TESTS = [ |
|
|
{ |
|
|
{ |
|
|
# streamType: vod |
|
|
# streamType: vod |
|
@ -64,12 +65,25 @@ class VGTVIE(InfoExtractor): |
|
|
'skip_download': True, |
|
|
'skip_download': True, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
'url': 'http://www.bt.no/tv/#!/video/100250/norling-dette-er-forskjellen-paa-1-divisjon-og-eliteserien', |
|
|
|
|
|
'only_matching': True, |
|
|
|
|
|
}, |
|
|
] |
|
|
] |
|
|
|
|
|
|
|
|
def _real_extract(self, url): |
|
|
def _real_extract(self, url): |
|
|
video_id = self._match_id(url) |
|
|
|
|
|
|
|
|
mobj = re.match(self._VALID_URL, url) |
|
|
|
|
|
video_id = mobj.group('id') |
|
|
|
|
|
host = mobj.group('host') |
|
|
|
|
|
|
|
|
|
|
|
HOST_WEBSITES = { |
|
|
|
|
|
'vgtv': 'vgtv', |
|
|
|
|
|
'bt': 'bttv', |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
data = self._download_json( |
|
|
data = self._download_json( |
|
|
'http://svp.vg.no/svp/api/v1/vgtv/assets/%s?appName=vgtv-website' % video_id, |
|
|
|
|
|
|
|
|
'http://svp.vg.no/svp/api/v1/%s/assets/%s?appName=%s-website' |
|
|
|
|
|
% (host, video_id, HOST_WEBSITES[host]), |
|
|
video_id, 'Downloading media JSON') |
|
|
video_id, 'Downloading media JSON') |
|
|
|
|
|
|
|
|
streams = data['streamUrls'] |
|
|
streams = data['streamUrls'] |
|
|