Merge pull request #7045 from remitamine/ign
[youtube-dl] / youtube_dl / extractor / zingmp3.py
index 2c2073adf5bc2afeeab8535a338319367feac36e..437eecb6737161c9d730bf9a93eaed1bdb541799 100644 (file)
@@ -4,12 +4,20 @@ from __future__ import unicode_literals
 import re
 
 from .common import InfoExtractor
+from ..utils import ExtractorError
 
 
 class ZingMp3BaseInfoExtractor(InfoExtractor):
 
-    @staticmethod
-    def _extract_item(item):
+    def _extract_item(self, item, fatal=True):
+        error_message = item.find('./errormessage').text
+        if error_message:
+            if not fatal:
+                return
+            raise ExtractorError(
+                '%s returned error: %s' % (self.IE_NAME, error_message),
+                expected=True)
+
         title = item.find('./title').text.strip()
         source = item.find('./source').text
         extension = item.attrib['type']
@@ -24,8 +32,6 @@ class ZingMp3BaseInfoExtractor(InfoExtractor):
 
     def _extract_player_xml(self, player_xml_url, id, playlist_title=None):
         player_xml = self._download_xml(player_xml_url, id, 'Downloading Player XML')
-
-        self.report_extraction(id)
         items = player_xml.findall('./item')
 
         if len(items) == 1:
@@ -39,7 +45,9 @@ class ZingMp3BaseInfoExtractor(InfoExtractor):
             entries = []
 
             for i, item in enumerate(items, 1):
-                entry = self._extract_item(item)
+                entry = self._extract_item(item, fatal=False)
+                if not entry:
+                    continue
                 entry['id'] = '%s-%d' % (id, i)
                 entries.append(entry)
 
@@ -55,12 +63,13 @@ class ZingMp3SongIE(ZingMp3BaseInfoExtractor):
     _VALID_URL = r'https?://mp3\.zing\.vn/bai-hat/(?P<slug>[^/]+)/(?P<song_id>\w+)\.html'
     _TESTS = [{
         'url': 'http://mp3.zing.vn/bai-hat/Xa-Mai-Xa-Bao-Thy/ZWZB9WAB.html',
+        'md5': 'ead7ae13693b3205cbc89536a077daed',
         'info_dict': {
             'id': 'ZWZB9WAB',
-            'title': u'Xa Mãi Xa',
+            'title': 'Xa Mãi Xa',
             'ext': 'mp3',
+            'thumbnail': 're:^https?://.*\.jpg$',
         },
-        'md5': 'ead7ae13693b3205cbc89536a077daed',
     }]
     IE_NAME = 'zingmp3:song'
     IE_DESC = 'mp3.zing.vn songs'
@@ -70,23 +79,28 @@ class ZingMp3SongIE(ZingMp3BaseInfoExtractor):
         slug = matched.group('slug')
         song_id = matched.group('song_id')
 
-        webpage = self._download_webpage('http://mp3.zing.vn/bai-hat/%s/%s.html' % (slug, song_id), song_id)
+        webpage = self._download_webpage(
+            'http://mp3.zing.vn/bai-hat/%s/%s.html' % (slug, song_id), song_id)
 
-        player_xml_url = self._search_regex(r'&amp;xmlURL=(?P<xml_url>[^&]+)&', webpage, 'player xml url')
+        player_xml_url = self._search_regex(
+            r'&amp;xmlURL=(?P<xml_url>[^&]+)&', webpage, 'player xml url')
 
         return self._extract_player_xml(player_xml_url, song_id)
 
 
 class ZingMp3AlbumIE(ZingMp3BaseInfoExtractor):
-    _VALID_URL = r'https?://mp3\.zing\.vn/album/(?P<slug>[^/]+)/(?P<album_id>\w+)\.html'
+    _VALID_URL = r'https?://mp3\.zing\.vn/(?:album|playlist)/(?P<slug>[^/]+)/(?P<album_id>\w+)\.html'
     _TESTS = [{
         'url': 'http://mp3.zing.vn/album/Lau-Dai-Tinh-Ai-Bang-Kieu-Minh-Tuyet/ZWZBWDAF.html',
         'info_dict': {
             '_type': 'playlist',
             'id': 'ZWZBWDAF',
-            'title': u'Lâu Đài Tình Ái - Bằng Kiều ft. Minh Tuyết | Album 320 lossless',
+            'title': 'Lâu Đài Tình Ái - Bằng Kiều ft. Minh Tuyết | Album 320 lossless',
         },
         'playlist_count': 10,
+    }, {
+        'url': 'http://mp3.zing.vn/playlist/Duong-Hong-Loan-apollobee/IWCAACCB.html',
+        'only_matching': True,
     }]
     IE_NAME = 'zingmp3:album'
     IE_DESC = 'mp3.zing.vn albums'
@@ -96,8 +110,11 @@ class ZingMp3AlbumIE(ZingMp3BaseInfoExtractor):
         slug = matched.group('slug')
         album_id = matched.group('album_id')
 
-        webpage = self._download_webpage('http://mp3.zing.vn/album/%s/%s.html' % (slug, album_id), album_id)
-
-        player_xml_url = self._search_regex(r'&amp;xmlURL=(?P<xml_url>[^&]+)&', webpage, 'player xml url')
+        webpage = self._download_webpage(
+            'http://mp3.zing.vn/album/%s/%s.html' % (slug, album_id), album_id)
+        player_xml_url = self._search_regex(
+            r'&amp;xmlURL=(?P<xml_url>[^&]+)&', webpage, 'player xml url')
 
-        return self._extract_player_xml(player_xml_url, album_id, playlist_title=self._og_search_title(webpage))
\ No newline at end of file
+        return self._extract_player_xml(
+            player_xml_url, album_id,
+            playlist_title=self._og_search_title(webpage))