diff options
author | ping <lipng.ong@gmail.com> | 2015-06-18 21:06:25 +0800 |
---|---|---|
committer | ping <lipng.ong@gmail.com> | 2015-06-18 21:06:25 +0800 |
commit | 5e3915cbe3fabd2dbb633131b851b1158c0bba7b (patch) | |
tree | f96983f9392ea18d180f294c11cc9f5dbc9fdc3e | |
parent | a69e8bfdd9e94537eb72a358c1b62dbea8a59a04 (diff) |
[qqmusic] Fix song extraction when certain formats are unavailable
-rw-r--r-- | youtube_dl/extractor/qqmusic.py | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/youtube_dl/extractor/qqmusic.py b/youtube_dl/extractor/qqmusic.py index bafa81c21..7ddc4ca25 100644 --- a/youtube_dl/extractor/qqmusic.py +++ b/youtube_dl/extractor/qqmusic.py @@ -9,8 +9,13 @@ from .common import InfoExtractor from ..utils import ( strip_jsonp, unescapeHTML, + HEADRequest, + ExtractorError, +) +from ..compat import ( + compat_urllib_request, + compat_HTTPError, ) -from ..compat import compat_urllib_request class QQMusicIE(InfoExtractor): @@ -26,6 +31,20 @@ class QQMusicIE(InfoExtractor): 'upload_date': '20141227', 'creator': '林俊杰', 'description': 'md5:d327722d0361576fde558f1ac68a7065', + 'thumbnail': 'http://i.gtimg.cn/music/photo/mid_album_500/7/p/001IV22P1RDX7p.jpg', + } + }, { + 'note': 'There is no mp3-320 version of this song.', + 'url': 'http://y.qq.com/#type=song&mid=004MsGEo3DdNxV', + 'md5': 'fa3926f0c585cda0af8fa4f796482e3e', + 'info_dict': { + 'id': '004MsGEo3DdNxV', + 'ext': 'mp3', + 'title': '如果', + 'upload_date': '20050626', + 'creator': '李季美', + 'description': 'md5:46857d5ed62bc4ba84607a805dccf437', + 'thumbnail': 'http://i.gtimg.cn/music/photo/mid_album_500/r/Q/0042owYj46IxrQ.jpg', } }] @@ -68,6 +87,13 @@ class QQMusicIE(InfoExtractor): if lrc_content: lrc_content = lrc_content.replace('\\n', '\n') + thumbnail_url = None + albummid = self._search_regex( + [r'albummid:\'([0-9a-zA-Z]+)\'', r'"albummid":"([0-9a-zA-Z]+)"'], detail_info_page, 'album mid', default=None) + if albummid: + thumbnail_url = "http://i.gtimg.cn/music/photo/mid_album_500/%s/%s/%s.jpg" \ + % (albummid[-2:-1], albummid[-1], albummid) + guid = self.m_r_get_ruin() vkey = self._download_json( @@ -77,14 +103,24 @@ class QQMusicIE(InfoExtractor): formats = [] for format_id, details in self._FORMATS.items(): - formats.append({ - 'url': 'http://cc.stream.qqmusic.qq.com/%s%s.%s?vkey=%s&guid=%s&fromtag=0' - % (details['prefix'], mid, details['ext'], vkey, guid), - 'format': format_id, - 'format_id': format_id, - 'preference': details['preference'], - 'abr': details.get('abr'), - }) + video_url = 'http://cc.stream.qqmusic.qq.com/%s%s.%s?vkey=%s&guid=%s&fromtag=0' \ + % (details['prefix'], mid, details['ext'], vkey, guid) + req = HEADRequest(video_url) + try: + res = self._request_webpage( + req, mid, note='Testing %s video URL' % format_id, fatal=False) + except ExtractorError as e: + if isinstance(e.cause, compat_HTTPError) and e.cause.code in [400, 404]: + self.report_warning('Invalid %s video URL' % format_id, mid) + else: + if res: + formats.append({ + 'url': video_url, + 'format': format_id, + 'format_id': format_id, + 'preference': details['preference'], + 'abr': details.get('abr'), + }) self._sort_formats(formats) return { @@ -94,6 +130,7 @@ class QQMusicIE(InfoExtractor): 'upload_date': publish_time, 'creator': singer, 'description': lrc_content, + 'thumbnail': thumbnail_url, } |