-
Notifications
You must be signed in to change notification settings - Fork 0
/
BaiduMusicUtils.py
executable file
·98 lines (79 loc) · 2.89 KB
/
BaiduMusicUtils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/env python
# coding=utf-8
import requests
import json
# 'ascii' codec can't encode characters
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from download import Download
class MusicDownload(object):
def __init__(self):
self.__SONG_DATA_URL = r'http://music.baidu.com/data/music/fmlink?songIds='
self.__SONG_REAL_URL = None
# Song info
self.__SONG_ID = None
self.__SONG_NAME = None
self.__SONG_AUTHOR = None
self.__SONG_FORMAT = None
self.__SONG_ALBUM = None
def get_real_song_data(self, song_id):
self.__SONG_ID = song_id
data_url = self.__SONG_DATA_URL+str(self.__SONG_ID)
req = requests.get(data_url)
song_data = json.loads(str(req.content))['data']
if song_data != '':
songList = song_data['songList'][0]
self.__SONG_NAME = songList['songName'].replace('/', '-')
self.__SONG_AUTHOR = songList['artistName'].replace('/', '-')
self.__SONG_FORMAT = songList['format']
self.__SONG_ALBUM = '' if songList['albumName'] == None else songList['albumName'].replace('/', '-')
self.__SONG_REAL_URL = songList['songLink']
self.__SONG_REAL_DATA = song_data
return self.__SONG_REAL_DATA
def download_song(self, song_id, path='.', id=0, ids=0):
# Cannot Find Or download This song
self.get_real_song_data(song_id)
mp3Name = "{songName}--{author}.{format}".format(
songName = self.__SONG_NAME,
author = self.__SONG_AUTHOR,
format = self.__SONG_FORMAT,
).strip()
download_flag = (0, 0, 0)
if not self.__SONG_REAL_URL:
print("No valid Url.")
else:
download = Download()
download_flag = download.download(self.__SONG_REAL_URL,
mp3Name, path, id, ids)
return download_flag
def get_real_song_url(self, song_id):
'''
url
'''
self.get_real_song_data(song_id)
return self.__SONG_REAL_URL
def get_song_name(self, song_id):
'''
name
'''
self.get_real_song_data(song_id)
return self.__SONG_NAME
def get_song_author(self, song_id):
self.get_real_song_data(song_id)
return self.__SONG_AUTHOR
def get_song_album(self, song_id):
self.get_real_song_data(song_id)
return self.__SONG_ALBUM
if __name__ == '__main__':
import sys
Baidu = MusicDownload()
if len(sys.argv) == 1:
print "Usage:"
print "\t{filename} Song_id".format(filename=sys.argv[0])
print "\t{filename} song_id1 song_id2 ...".format(filename=sys.argv[0])
exit(False)
for song_id in sys.argv:
if song_id == sys.argv[0]:
continue
Baidu.download_song(song_id)