diff options
| author | ping <lipng.ong@gmail.com> | 2016-01-17 07:48:46 +0800 | 
|---|---|---|
| committer | ping <lipng.ong@gmail.com> | 2016-01-17 07:48:46 +0800 | 
| commit | e0ef13ddebfab39d8c59c8cd9c11882cfc604070 (patch) | |
| tree | 858d609a24d617a1ecaa0c65671d5fbdf0339fd1 | |
| parent | 3a0a78731b5223b232beaabc3cdc771b9cebb078 (diff) | |
[neteasemusic] Fallback to alt hosts if m5.music.126.net doesn't work
| -rw-r--r-- | youtube_dl/extractor/neteasemusic.py | 35 | 
1 files changed, 22 insertions, 13 deletions
diff --git a/youtube_dl/extractor/neteasemusic.py b/youtube_dl/extractor/neteasemusic.py index 848ebdea0..435cd8e2e 100644 --- a/youtube_dl/extractor/neteasemusic.py +++ b/youtube_dl/extractor/neteasemusic.py @@ -32,23 +32,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://203.130.59.9/m1.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': details.get('bitrate', 0) / 1000, +                        'format_id': song_format, +                        'filesize': details.get('size'), +                        'asr': details.get('sr') +                    }) +                    break          return formats      @classmethod  | 
