diff options
Diffstat (limited to 'youtube_dl/extractor/dailymotion.py')
| -rw-r--r-- | youtube_dl/extractor/dailymotion.py | 34 | 
1 files changed, 31 insertions, 3 deletions
diff --git a/youtube_dl/extractor/dailymotion.py b/youtube_dl/extractor/dailymotion.py index 1ea449ca8..360113f9c 100644 --- a/youtube_dl/extractor/dailymotion.py +++ b/youtube_dl/extractor/dailymotion.py @@ -3,18 +3,22 @@ import json  import itertools  from .common import InfoExtractor +from .subtitles import SubtitlesInfoExtractor +  from ..utils import (      compat_urllib_request, +    compat_str,      get_element_by_attribute,      get_element_by_id,      ExtractorError,  ) -class DailymotionIE(InfoExtractor): + +class DailymotionIE(SubtitlesInfoExtractor):      """Information Extractor for Dailymotion""" -    _VALID_URL = r'(?i)(?:https?://)?(?:www\.)?dailymotion\.[a-z]{2,3}/video/([^/]+)' +    _VALID_URL = r'(?i)(?:https?://)?(?:www\.)?dailymotion\.[a-z]{2,3}/(?:embed/)?video/([^/]+)'      IE_NAME = u'dailymotion'      _TEST = {          u'url': u'http://www.dailymotion.com/video/x33vw9_tutoriel-de-youtubeur-dl-des-video_tech', @@ -33,6 +37,7 @@ class DailymotionIE(InfoExtractor):          video_id = mobj.group(1).split('_')[0].split('?')[0]          video_extension = 'mp4' +        url = 'http://www.dailymotion.com/video/%s' % video_id          # Retrieve video webpage to extract further information          request = compat_urllib_request.Request(url) @@ -55,7 +60,8 @@ class DailymotionIE(InfoExtractor):          embed_url = 'http://www.dailymotion.com/embed/video/%s' % video_id          embed_page = self._download_webpage(embed_url, video_id,                                              u'Downloading embed page') -        info = self._search_regex(r'var info = ({.*?}),', embed_page, 'video info') +        info = self._search_regex(r'var info = ({.*?}),$', embed_page, +            'video info', flags=re.MULTILINE)          info = json.loads(info)          # TODO: support choosing qualities @@ -71,6 +77,12 @@ class DailymotionIE(InfoExtractor):              raise ExtractorError(u'Unable to extract video URL')          video_url = info[max_quality] +        # subtitles +        video_subtitles = self.extract_subtitles(video_id) +        if self._downloader.params.get('listsubtitles', False): +            self._list_available_subtitles(video_id) +            return +          return [{              'id':       video_id,              'url':      video_url, @@ -78,9 +90,25 @@ class DailymotionIE(InfoExtractor):              'upload_date':  video_upload_date,              'title':    self._og_search_title(webpage),              'ext':      video_extension, +            'subtitles':    video_subtitles,              'thumbnail': info['thumbnail_url']          }] +    def _get_available_subtitles(self, video_id): +        try: +            sub_list = self._download_webpage( +                'https://api.dailymotion.com/video/%s/subtitles?fields=id,language,url' % video_id, +                video_id, note=False) +        except ExtractorError as err: +            self._downloader.report_warning(u'unable to download video subtitles: %s' % compat_str(err)) +            return {} +        info = json.loads(sub_list) +        if (info['total'] > 0): +            sub_lang_list = dict((l['language'], l['url']) for l in info['list']) +            return sub_lang_list +        self._downloader.report_warning(u'video doesn\'t have subtitles') +        return {} +  class DailymotionPlaylistIE(InfoExtractor):      _VALID_URL = r'(?:https?://)?(?:www\.)?dailymotion\.[a-z]{2,3}/playlist/(?P<id>.+?)/'  | 
