[netease] resolve an issue about the HTTP error 404.

e.g.: you-get http://music.163.com/?#/playlist?id=484882742&_hash=songlist-368727
This commit is contained in:
DDGG 2016-12-31 06:45:30 +08:00
parent af4db738a2
commit 0638b0a136

View File

@ -7,6 +7,7 @@ from ..common import *
from ..common import print_more_compatible as print from ..common import print_more_compatible as print
from ..util import fs from ..util import fs
from json import loads from json import loads
import urllib
import hashlib import hashlib
import base64 import base64
import os import os
@ -106,18 +107,41 @@ def netease_video_download(vinfo, output_dir='.', info_only=False):
output_dir=output_dir, info_only=info_only) output_dir=output_dir, info_only=info_only)
def netease_song_download(song, output_dir='.', info_only=False, playlist_prefix=""): def netease_song_download(song, output_dir='.', info_only=False, playlist_prefix=""):
def _download():
netease_download_common(title, url_best,
output_dir=output_dir, info_only=info_only)
title = "%s%s. %s" % (playlist_prefix, song['position'], song['name']) title = "%s%s. %s" % (playlist_prefix, song['position'], song['name'])
songNet = 'p' + song['mp3Url'].split('/')[2][1:] songNet = 'p' + song['mp3Url'].split('/')[2][1:]
if 'hMusic' in song and song['hMusic'] != None: k = 0
url_best = make_url(songNet, song['hMusic']['dfsId']) while k < 3:
elif 'mp3Url' in song: down = False
url_best = song['mp3Url'] if k == 0:
elif 'bMusic' in song: if 'hMusic' in song and song['hMusic'] != None:
url_best = make_url(songNet, song['bMusic']['dfsId']) url_best = make_url(songNet, song['hMusic']['dfsId'])
print('hMusic url: %s' % url_best)
down = True
elif k == 1:
if 'mp3Url' in song:
url_best = song['mp3Url']
print('mp3Url url: %s' % url_best)
down = True
elif k == 2:
if 'bMusic' in song:
url_best = make_url(songNet, song['bMusic']['dfsId'])
print('bMusic url: %s' % url_best)
down = True
if down:
try:
_download()
break
except urllib.error.HTTPError: # urllib.error.HTTPError: HTTP Error 404: Not Found
import traceback
print(traceback.format_exc())
k += 1
netease_download_common(title, url_best,
output_dir=output_dir, info_only=info_only)
def netease_download_common(title, url_best, output_dir, info_only): def netease_download_common(title, url_best, output_dir, info_only):
songtype, ext, size = url_info(url_best) songtype, ext, size = url_info(url_best)