[azmedien:showplaylist] Add support for all episodes playlists
authorAlex Seiler <seileralex@gmail.com>
Fri, 17 Feb 2017 03:49:25 +0000 (04:49 +0100)
committerSergey M․ <dstftw@gmail.com>
Tue, 28 Feb 2017 16:36:05 +0000 (23:36 +0700)
youtube_dl/extractor/azmedien.py
youtube_dl/extractor/extractors.py

index cbc3ed5640ca00818144abf312ee65c896207a2a..817fc6d570caa2e33b3480b708458c0c3a191b31 100644 (file)
@@ -5,6 +5,7 @@ import re
 from .common import InfoExtractor
 from .kaltura import KalturaIE
 from ..utils import (
+    get_element_by_class,
     get_element_by_id,
     strip_or_none,
     urljoin,
@@ -170,3 +171,51 @@ class AZMedienPlaylistIE(AZMedienBaseIE):
                 'video-title', webpage)), group='title')
 
         return self.playlist_result(entries, show_id, title)
+
+
+class AZMedienShowPlaylistIE(AZMedienBaseIE):
+    IE_DESC = 'AZ Medien Show playlists'
+    _VALID_URL = r'''(?x)
+                    https?://
+                        (?:www\.)?
+                        (?P<id>
+                        (?:
+                            telezueri\.ch|
+                            telebaern\.tv|
+                            telem1\.ch
+                        )/
+                        (?:
+                            all-episodes|
+                            alle-episoden
+                        )
+                        /[^/]+
+                        )
+                    '''
+
+    _TEST = {
+        'url': 'http://www.telezueri.ch/all-episodes/astrotalk',
+        'info_dict': {
+            'id': 'telezueri.ch/all-episodes/astrotalk',
+            'title': 'TeleZüri: AstroTalk - alle episoden',
+            'description': 'md5:4c0f7e7d741d906004266e295ceb4a26',
+        },
+        'playlist_mincount': 13,
+        'params': {
+            'skip_download': True,
+        }
+    }
+
+    def _real_extract(self, url):
+        playlist_id = self._match_id(url)
+        webpage = self._download_webpage(url, playlist_id)
+        episodes = get_element_by_class('search-mobile-box', webpage)
+        entries = [self.url_result(
+            urljoin(url, m.group('url'))) for m in re.finditer(
+                r'<a[^>]+href=(["\'])(?P<url>.+?)\1', episodes)]
+        title = self._og_search_title(webpage)
+        description = self._og_search_description(webpage)
+        return self.playlist_result(
+            entries,
+            playlist_id=playlist_id,
+            playlist_title=title,
+            playlist_description=description)
index e251d84789dcdc98e39aa4194ca1d7912b74bce8..b1613a9d350721bfbcf73ae94726cc75ec9a13df 100644 (file)
@@ -83,6 +83,7 @@ from .awaan import (
 from .azmedien import (
     AZMedienIE,
     AZMedienPlaylistIE,
+    AZMedienShowPlaylistIE,
 )
 from .azubu import AzubuIE, AzubuLiveIE
 from .baidu import BaiduVideoIE