X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fcanvas.py;h=174fd9e2b4b00b384b1737a1df058050e4603de9;hb=2f483bc1c389709623117079439708783122b5ec;hp=c7e9b8ff9c4970724aa2a2496a29db892df76ed2;hpb=7913e0fca7df6840e8434449f534f9744c9394f2;p=youtube-dl diff --git a/youtube_dl/extractor/canvas.py b/youtube_dl/extractor/canvas.py index c7e9b8ff9..174fd9e2b 100644 --- a/youtube_dl/extractor/canvas.py +++ b/youtube_dl/extractor/canvas.py @@ -5,14 +5,13 @@ import json from .common import InfoExtractor from .gigya import GigyaBaseIE - - from ..compat import compat_HTTPError from ..utils import ( ExtractorError, strip_or_none, float_or_none, int_or_none, + merge_dicts, parse_iso8601, ) @@ -192,7 +191,7 @@ class VrtNUIE(GigyaBaseIE): 'season_number': 1, 'episode_number': 1, }, - # 'skip': 'This video is only available for registered users' + 'skip': 'This video is only available for registered users' }] _NETRC_MACHINE = 'vrtnu' _APIKEY = '3_0Z2HujMtiWq_pkAjgnS2Md2E11a1AwZjYiBETtwNE-EoEHDINgtnvcAOpNgmrVGy' @@ -204,7 +203,7 @@ class VrtNUIE(GigyaBaseIE): def _login(self): username, password = self._get_login_info() if username is None: - self.raise_login_required() + return auth_data = { 'APIKey': self._APIKEY, @@ -248,11 +247,15 @@ class VrtNUIE(GigyaBaseIE): def _real_extract(self, url): display_id = self._match_id(url) - webpage = self._download_webpage(url, display_id) + webpage, urlh = self._download_webpage_handle(url, display_id) + + info = self._search_json_ld(webpage, display_id, default={}) - title = self._html_search_regex( + # title is optional here since it may be extracted by extractor + # that is delegated from here + title = strip_or_none(self._html_search_regex( r'(?ms)

(.+?)

', - webpage, 'title').strip() + webpage, 'title', default=None)) description = self._html_search_regex( r'(?ms)
(.+?)
', @@ -278,20 +281,26 @@ class VrtNUIE(GigyaBaseIE): webpage, 'release_date', default=None)) # If there's a ? or a # in the URL, remove them and everything after - clean_url = url.split('?')[0].split('#')[0].strip('/') + clean_url = urlh.geturl().split('?')[0].split('#')[0].strip('/') securevideo_url = clean_url + '.mssecurevideo.json' - json = self._download_json(securevideo_url, display_id) + try: + video = self._download_json(securevideo_url, display_id) + except ExtractorError as e: + if isinstance(e.cause, compat_HTTPError) and e.cause.code == 401: + self.raise_login_required() + raise + # We are dealing with a '../.relevant' URL - redirect_url = json.get('url') + redirect_url = video.get('url') if redirect_url: - return self.url_result('https:' + redirect_url) - else: - # There is only one entry, but with an unknown key, so just get - # the first one - video_id = list(json.values())[0].get('videoid') + return self.url_result(self._proto_relative_url(redirect_url, 'https:')) - return { + # There is only one entry, but with an unknown key, so just get + # the first one + video_id = list(video.values())[0].get('videoid') + + return merge_dicts(info, { '_type': 'url_transparent', 'url': 'https://mediazone.vrt.be/api/v1/vrtvideo/assets/%s' % video_id, 'ie_key': CanvasIE.ie_key(), @@ -303,4 +312,4 @@ class VrtNUIE(GigyaBaseIE): 'season_number': season_number, 'episode_number': episode_number, 'release_date': release_date, - } + })