diff options
| -rw-r--r-- | youtube_dl/extractor/common.py | 20 | ||||
| -rw-r--r-- | youtube_dl/extractor/udemy.py | 25 | ||||
| -rw-r--r-- | youtube_dl/extractor/videomore.py | 56 | 
3 files changed, 96 insertions, 5 deletions
| diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 2823b1d18..0719c7bcd 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -201,6 +201,26 @@ class InfoExtractor(object):      end_time:       Time in seconds where the reproduction should end, as                      specified in the URL. +    The following fields should only be used when the video belongs to some logical +    chapter or section: + +    chapter:        Name or title of the chapter the video belongs to. +    chapter_number: Number of the chapter the video belongs to, as an integer. +    chapter_id:     Id of the chapter the video belongs to, as a unicode string. + +    The following fields should only be used when the video is an episode of some +    series or programme: + +    series:         Title of the series or programme the video episode belongs to. +    season:         Title of the season the video episode belongs to. +    season_number:  Number of the season the video episode belongs to, as an integer. +    season_id:      Id of the season the video episode belongs to, as a unicode string. +    episode:        Title of the video episode. Unlike mandatory video title field, +                    this field should denote the exact title of the video episode +                    without any kind of decoration. +    episode_number: Number of the video episode within a season, as an integer. +    episode_id:     Id of the video episode, as a unicode string. +      Unless mentioned otherwise, the fields should be Unicode strings.      Unless mentioned otherwise, None is equivalent to absence of information. diff --git a/youtube_dl/extractor/udemy.py b/youtube_dl/extractor/udemy.py index ce7e211fc..1df636779 100644 --- a/youtube_dl/extractor/udemy.py +++ b/youtube_dl/extractor/udemy.py @@ -244,10 +244,25 @@ class UdemyCourseIE(UdemyIE):              'https://www.udemy.com/api-1.1/courses/%s/curriculum' % course_id,              course_id, 'Downloading course curriculum') -        entries = [ -            self.url_result( -                'https://www.udemy.com/%s/#/lecture/%s' % (course_path, asset['id']), 'Udemy') -            for asset in response if asset.get('assetType') or asset.get('asset_type') == 'Video' -        ] +        entries = [] +        chapter, chapter_number = None, None +        for asset in response: +            asset_type = asset.get('assetType') or asset.get('asset_type') +            if asset_type == 'Video': +                asset_id = asset.get('id') +                if asset_id: +                    entry = { +                        '_type': 'url_transparent', +                        'url': 'https://www.udemy.com/%s/#/lecture/%s' % (course_path, asset['id']), +                        'ie_key': UdemyIE.ie_key(), +                    } +                    if chapter_number: +                        entry['chapter_number'] = chapter_number +                    if chapter: +                        entry['chapter'] = chapter +                    entries.append(entry) +            elif asset.get('type') == 'chapter': +                chapter_number = asset.get('index') or asset.get('object_index') +                chapter = asset.get('title')          return self.playlist_result(entries, course_id, course_title) diff --git a/youtube_dl/extractor/videomore.py b/youtube_dl/extractor/videomore.py index 16078ac19..a66d6de23 100644 --- a/youtube_dl/extractor/videomore.py +++ b/youtube_dl/extractor/videomore.py @@ -23,12 +23,57 @@ class VideomoreIE(InfoExtractor):              'ext': 'flv',              'title': 'В гостях Алексей Чумаков и Юлия Ковальчук',              'description': 'В гостях – лучшие романтические комедии года, «Выживший» Иньярриту и «Стив Джобс» Дэнни Бойла.', +            'series': 'Кино в деталях', +            'episode': 'В гостях Алексей Чумаков и Юлия Ковальчук', +            'episode_number': None, +            'season': 'Сезон 2015', +            'season_number': 5,              'thumbnail': 're:^https?://.*\.jpg',              'duration': 2910,              'age_limit': 16,              'view_count': int,          },      }, { +        'url': 'http://videomore.ru/embed/259974', +        'info_dict': { +            'id': '259974', +            'ext': 'flv', +            'title': '80 серия', +            'description': '«Медведей» ждет решающий матч. Макеев выясняет отношения со Стрельцовым. Парни узнают подробности прошлого Макеева.', +            'series': 'Молодежка', +            'episode': '80 серия', +            'episode_number': 40, +            'season': '2 сезон', +            'season_number': 2, +            'thumbnail': 're:^https?://.*\.jpg', +            'duration': 2809, +            'age_limit': 16, +            'view_count': int, +        }, +        'params': { +            'skip_download': True, +        }, +    }, { +        'url': 'http://videomore.ru/molodezhka/sezon_promo/341073', +        'info_dict': { +            'id': '341073', +            'ext': 'flv', +            'title': 'Команда проиграла из-за Бакина?', +            'description': 'Молодежка 3 сезон скоро', +            'series': 'Молодежка', +            'episode': 'Команда проиграла из-за Бакина?', +            'episode_number': None, +            'season': 'Промо', +            'season_number': 99, +            'thumbnail': 're:^https?://.*\.jpg', +            'duration': 29, +            'age_limit': 16, +            'view_count': int, +        }, +        'params': { +            'skip_download': True, +        }, +    }, {          'url': 'http://videomore.ru/elki_3?track_id=364623',          'only_matching': True,      }, { @@ -81,10 +126,21 @@ class VideomoreIE(InfoExtractor):              'url': thumbnail,          } for thumbnail in data.get('big_thumbnail_urls', [])] +        series = data.get('project_title') +        episode = data.get('title') +        episode_number = int_or_none(data.get('episode_of_season') or None) +        season = data.get('season_title') +        season_number = int_or_none(data.get('season_pos') or None) +          return {              'id': video_id,              'title': title,              'description': description, +            'series': series, +            'episode': episode, +            'episode_number': episode_number, +            'season': season, +            'season_number': season_number,              'thumbnails': thumbnails,              'timestamp': timestamp,              'duration': duration, | 
