Merge branch 'qqmusic-album-fix' of https://github.com/ping/youtube-dl into ping...
authorYen Chi Hsuan <yan12125@gmail.com>
Mon, 6 Jul 2015 09:01:59 +0000 (17:01 +0800)
committerYen Chi Hsuan <yan12125@gmail.com>
Mon, 6 Jul 2015 09:01:59 +0000 (17:01 +0800)
1  2 
youtube_dl/extractor/qqmusic.py

index d6bc05b7b24d8536429a8fb4999a3b0292b997f1,d9a783f8ab2f00f16c211e6e4ae749e187b647dc..e704640e5916347aacee3df75d98927d8ba003b9
@@@ -9,7 -9,6 +9,7 @@@ from .common import InfoExtracto
  from ..utils import (
      strip_jsonp,
      unescapeHTML,
 +    clean_html,
  )
  from ..compat import compat_urllib_request
  
@@@ -164,31 -163,38 +164,38 @@@ class QQMusicAlbumIE(QQPlaylistBaseIE)
      IE_NAME = 'qqmusic:album'
      _VALID_URL = r'http://y.qq.com/#type=album&mid=(?P<id>[0-9A-Za-z]+)'
  
-     _TEST = {
-         'url': 'http://y.qq.com/#type=album&mid=000gXCTb2AhRR1&play=0',
+     _TESTS = [{
+         'url': 'http://y.qq.com/#type=album&mid=000gXCTb2AhRR1',
          'info_dict': {
              'id': '000gXCTb2AhRR1',
              'title': '我们都是这样长大的',
-             'description': 'md5:d216c55a2d4b3537fe4415b8767d74d6',
+             'description': 'md5:712f0cdbfc7e776820d08150e6df593d',
          },
          'playlist_count': 4,
-     }
+     }, {
+         'url': 'http://y.qq.com/#type=album&mid=002Y5a3b3AlCu3',
+         'info_dict': {
+             'id': '002Y5a3b3AlCu3',
+             'title': '그리고...',
+             'description': 'md5:b1d133b8c9bac8fed4e1a97df759f4cf',
+         },
+         'playlist_count': 8,
+     }]
  
      def _real_extract(self, url):
          mid = self._match_id(url)
  
-         album_page = self._download_webpage(
-             self.qq_static_url('album', mid), mid, 'Download album page')
-         entries = self.get_entries_from_page(album_page)
-         album_name = self._html_search_regex(
-             r"albumname\s*:\s*'([^']+)',", album_page, 'album name',
-             default=None)
-         album_detail = self._html_search_regex(
-             r'<div class="album_detail close_detail">\s*<p>((?:[^<>]+(?:<br />)?)+)</p>',
-             album_page, 'album details', default=None)
+         album = self._download_json(
+             'http://i.y.qq.com/v8/fcg-bin/fcg_v8_album_info_cp.fcg?albummid=%s&format=json' % mid,
+             mid, 'Download album page')['data']
+         entries = [
+             self.url_result(
+                 'http://y.qq.com/#type=song&mid=' + song['songmid'], 'QQMusic', song['songmid']
+             ) for song in album['list']
+         ]
+         album_name = album['name']
+         album_detail = album.get('desc')
  
          return self.playlist_result(entries, mid, album_name, album_detail)
  
@@@ -244,36 -250,3 +251,36 @@@ class QQMusicToplistIE(QQPlaylistBaseIE
          list_name = topinfo.get('ListName')
          list_description = topinfo.get('info')
          return self.playlist_result(entries, list_id, list_name, list_description)
 +
 +
 +class QQMusicPlaylistIE(QQPlaylistBaseIE):
 +    IE_NAME = 'qqmusic:playlist'
 +    _VALID_URL = r'http://y\.qq\.com/#type=taoge&id=(?P<id>[0-9]+)'
 +
 +    _TEST = {
 +        'url': 'http://y.qq.com/#type=taoge&id=3462654915',
 +        'info_dict': {
 +            'id': '3462654915',
 +            'title': '韩国5月新歌精选下旬',
 +            'description': 'md5:d2c9d758a96b9888cf4fe82f603121d4',
 +        },
 +        'playlist_count': 40,
 +    }
 +
 +    def _real_extract(self, url):
 +        list_id = self._match_id(url)
 +
 +        list_json = self._download_json(
 +            'http://i.y.qq.com/qzone-music/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&disstid=%s'
 +            % list_id, list_id, 'Download list page',
 +            transform_source=strip_jsonp)['cdlist'][0]
 +
 +        entries = [
 +            self.url_result(
 +                'http://y.qq.com/#type=song&mid=' + song['songmid'], 'QQMusic', song['songmid']
 +            ) for song in list_json['songlist']
 +        ]
 +
 +        list_name = list_json.get('dissname')
 +        list_description = clean_html(unescapeHTML(list_json.get('desc')))
 +        return self.playlist_result(entries, list_id, list_name, list_description)