diff options
Diffstat (limited to 'youtube_dl/extractor/neteasemusic.py')
| -rw-r--r-- | youtube_dl/extractor/neteasemusic.py | 40 | 
1 files changed, 26 insertions, 14 deletions
| diff --git a/youtube_dl/extractor/neteasemusic.py b/youtube_dl/extractor/neteasemusic.py index 15eca825a..7830616f8 100644 --- a/youtube_dl/extractor/neteasemusic.py +++ b/youtube_dl/extractor/neteasemusic.py @@ -12,7 +12,10 @@ from ..compat import (      compat_str,      compat_itertools_count,  ) -from ..utils import sanitized_Request +from ..utils import ( +    sanitized_Request, +    float_or_none, +)  class NetEaseMusicBaseIE(InfoExtractor): @@ -32,23 +35,32 @@ class NetEaseMusicBaseIE(InfoExtractor):          result = b64encode(m.digest()).decode('ascii')          return result.replace('/', '_').replace('+', '-') -    @classmethod -    def extract_formats(cls, info): +    def extract_formats(self, info):          formats = [] -        for song_format in cls._FORMATS: +        for song_format in self._FORMATS:              details = info.get(song_format)              if not details:                  continue -            formats.append({ -                'url': 'http://m5.music.126.net/%s/%s.%s' % -                       (cls._encrypt(details['dfsId']), details['dfsId'], -                        details['extension']), -                'ext': details.get('extension'), -                'abr': details.get('bitrate', 0) / 1000, -                'format_id': song_format, -                'filesize': details.get('size'), -                'asr': details.get('sr') -            }) +            song_file_path = '/%s/%s.%s' % ( +                self._encrypt(details['dfsId']), details['dfsId'], details['extension']) + +            # 203.130.59.9, 124.40.233.182, 115.231.74.139, etc is a reverse proxy-like feature +            # from NetEase's CDN provider that can be used if m5.music.126.net does not +            # work, especially for users outside of Mainland China +            # via: https://github.com/JixunMoe/unblock-163/issues/3#issuecomment-163115880 +            for host in ('http://m5.music.126.net', 'http://115.231.74.139/m1.music.126.net', +                         'http://124.40.233.182/m1.music.126.net', 'http://203.130.59.9/m1.music.126.net'): +                song_url = host + song_file_path +                if self._is_valid_url(song_url, info['id'], 'song'): +                    formats.append({ +                        'url': song_url, +                        'ext': details.get('extension'), +                        'abr': float_or_none(details.get('bitrate'), scale=1000), +                        'format_id': song_format, +                        'filesize': details.get('size'), +                        'asr': details.get('sr') +                    }) +                    break          return formats      @classmethod | 
