From 5e3915cbe3fabd2dbb633131b851b1158c0bba7b Mon Sep 17 00:00:00 2001 From: ping Date: Thu, 18 Jun 2015 21:06:25 +0800 Subject: [PATCH 1/3] [qqmusic] Fix song extraction when certain formats are unavailable --- youtube_dl/extractor/qqmusic.py | 55 +++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/youtube_dl/extractor/qqmusic.py b/youtube_dl/extractor/qqmusic.py index bafa81c21c..7ddc4ca25c 100644 --- a/youtube_dl/extractor/qqmusic.py +++ b/youtube_dl/extractor/qqmusic.py @@ -9,8 +9,13 @@ 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 @@ def _real_extract(self, url): 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 @@ def _real_extract(self, url): 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 @@ def _real_extract(self, url): 'upload_date': publish_time, 'creator': singer, 'description': lrc_content, + 'thumbnail': thumbnail_url, } From 0392ac98d2c5c5a6fd2ab51c51096f82312a287c Mon Sep 17 00:00:00 2001 From: ping Date: Thu, 18 Jun 2015 21:13:03 +0800 Subject: [PATCH 2/3] [qqmusic] Fix code formatting --- youtube_dl/extractor/qqmusic.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/youtube_dl/extractor/qqmusic.py b/youtube_dl/extractor/qqmusic.py index 7ddc4ca25c..5a18191bc5 100644 --- a/youtube_dl/extractor/qqmusic.py +++ b/youtube_dl/extractor/qqmusic.py @@ -89,7 +89,8 @@ def _real_extract(self, url): 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) + [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) From 4d58b24c15ea0efc699a7ad7ee468245029da4e3 Mon Sep 17 00:00:00 2001 From: ping Date: Thu, 18 Jun 2015 23:09:04 +0800 Subject: [PATCH 3/3] [qqmusic] Use _check_formats instead --- youtube_dl/extractor/qqmusic.py | 34 ++++++++++----------------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/youtube_dl/extractor/qqmusic.py b/youtube_dl/extractor/qqmusic.py index 5a18191bc5..7183c2bb11 100644 --- a/youtube_dl/extractor/qqmusic.py +++ b/youtube_dl/extractor/qqmusic.py @@ -9,13 +9,8 @@ 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): @@ -104,24 +99,15 @@ def _real_extract(self, url): formats = [] for format_id, details in self._FORMATS.items(): - 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'), - }) + 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'), + }) + self._check_formats(formats, mid) self._sort_formats(formats) return {