diff options
| author | Remita Amine <remitamine@gmail.com> | 2021-01-19 14:47:39 +0100 | 
|---|---|---|
| committer | Remita Amine <remitamine@gmail.com> | 2021-01-19 14:47:39 +0100 | 
| commit | bc7c8f3d4ea6cb98fa62a5fe457046dd4e9b5379 (patch) | |
| tree | a1c1cc03e4508ed957c6056cb10adaf05c6c676b /youtube_dl/extractor/yahoo.py | |
| parent | 015e19b350a4bb7868008fb9df9092f4a60a5f00 (diff) | |
[yahoo] fix single video extraction
Diffstat (limited to 'youtube_dl/extractor/yahoo.py')
| -rw-r--r-- | youtube_dl/extractor/yahoo.py | 80 | 
1 files changed, 40 insertions, 40 deletions
| diff --git a/youtube_dl/extractor/yahoo.py b/youtube_dl/extractor/yahoo.py index e4615376c..a17b10d6e 100644 --- a/youtube_dl/extractor/yahoo.py +++ b/youtube_dl/extractor/yahoo.py @@ -177,46 +177,9 @@ class YahooIE(InfoExtractor):          'only_matching': True,      }] -    def _real_extract(self, url): -        url, country, display_id = re.match(self._VALID_URL, url).groups() -        if not country: -            country = 'us' -        else: -            country = country.split('-')[0] -        api_base = 'https://%s.yahoo.com/_td/api/resource/' % country - -        for i, uuid in enumerate(['url=' + url, 'ymedia-alias=' + display_id]): -            content = self._download_json( -                api_base + 'content;getDetailView=true;uuids=["%s"]' % uuid, -                display_id, 'Downloading content JSON metadata', fatal=i == 1) -            if content: -                item = content['items'][0] -                break - -        if item.get('type') != 'video': -            entries = [] - -            cover = item.get('cover') or {} -            if cover.get('type') == 'yvideo': -                cover_url = cover.get('url') -                if cover_url: -                    entries.append(self.url_result( -                        cover_url, 'Yahoo', cover.get('uuid'))) - -            for e in item.get('body', []): -                if e.get('type') == 'videoIframe': -                    iframe_url = e.get('url') -                    if not iframe_url: -                        continue -                    entries.append(self.url_result(iframe_url)) - -            return self.playlist_result( -                entries, item.get('uuid'), -                item.get('title'), item.get('summary')) - -        video_id = item['uuid'] +    def _extract_yahoo_video(self, video_id, country):          video = self._download_json( -            api_base + 'VideoService.videos;view=full;video_ids=["%s"]' % video_id, +            'https://%s.yahoo.com/_td/api/resource/VideoService.videos;view=full;video_ids=["%s"]' % (country, video_id),              video_id, 'Downloading video JSON metadata')[0]          title = video['title'] @@ -298,7 +261,6 @@ class YahooIE(InfoExtractor):              'id': video_id,              'title': self._live_title(title) if is_live else title,              'formats': formats, -            'display_id': display_id,              'thumbnails': thumbnails,              'description': clean_html(video.get('description')),              'timestamp': parse_iso8601(video.get('publish_time')), @@ -311,6 +273,44 @@ class YahooIE(InfoExtractor):              'episode_number': int_or_none(series_info.get('episode_number')),          } +    def _real_extract(self, url): +        url, country, display_id = re.match(self._VALID_URL, url).groups() +        if not country: +            country = 'us' +        else: +            country = country.split('-')[0] + +        item = self._download_json( +            'https://%s.yahoo.com/caas/content/article' % country, display_id, +            'Downloading content JSON metadata', query={ +                'url': url +            })['items'][0]['data']['partnerData'] + +        if item.get('type') != 'video': +            entries = [] + +            cover = item.get('cover') or {} +            if cover.get('type') == 'yvideo': +                cover_url = cover.get('url') +                if cover_url: +                    entries.append(self.url_result( +                        cover_url, 'Yahoo', cover.get('uuid'))) + +            for e in (item.get('body') or []): +                if e.get('type') == 'videoIframe': +                    iframe_url = e.get('url') +                    if not iframe_url: +                        continue +                    entries.append(self.url_result(iframe_url)) + +            return self.playlist_result( +                entries, item.get('uuid'), +                item.get('title'), item.get('summary')) + +        info = self._extract_yahoo_video(item['uuid'], country) +        info['display_id'] = display_id +        return info +  class YahooSearchIE(SearchInfoExtractor):      IE_DESC = 'Yahoo screen search' | 
