Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 18 additions & 6 deletions cloudmusic/download.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from . import musicObj

from . import setTags
import urllib
import os
import threadpool
import time

import re


def download(dirs, music):
Expand All @@ -15,15 +15,16 @@ def download(dirs, music):
for ar in music.artist:
artist += ar + " "
name = music.name + " - " + artist + "." + music.type
name = re.sub(r'[\\/*?:"<>|]', " ", name)

if not dirs:
dirs = "cloudmusic\\" + name
defalut_dirs = str(os.getcwd()) + '\\cloudmusic'
dirs = os.path.join('cloudmusic', name)
defalut_dirs = os.path.join(os.getcwd() , 'cloudmusic')
isExist = os.path.exists(defalut_dirs)
if not isExist:
os.makedirs(defalut_dirs)
else :
dirs += "\\" + name
dirs = os.path.join(dirs, name)

# 超时重连
for t in range(5):
Expand All @@ -43,9 +44,20 @@ def download(dirs, music):
binfile.write(respHtml)
binfile.close()

try:
if music.type == "mp3":
setTags.set_tags_for_mp3(dirs, music.picUrl, artist, music.album, music.name)
elif music.type == 'm4a':
setTags.set_tags_for_m4a(dirs, music.picUrl, artist, music.album, music.name)
elif music.type == 'flac':
setTags.set_tags_for_flac(dirs, music.picUrl, artist, music.album, music.name)
except Exception as e:
print("set tags failed - " + music.id)
print("Error: " + str(e))

print("dowload finish - " + music.id)

return str(os.getcwd()) + dirs
return os.path.join(os.getcwd(), dirs)


class Downloader():
Expand Down
2 changes: 1 addition & 1 deletion cloudmusic/musicObj.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def download(self, dirs="", level="standard"):
if level == "standard":
return download.download(dirs, self)
elif level in self.levels:
return createObj([self.id], level).download()
return createObj([self.id], level).download(dirs)
else:
print("没有这个level, 默认standard")
return download.download(dirs, self)
Expand Down
110 changes: 110 additions & 0 deletions cloudmusic/setTags.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
try:
import mutagen
mutagen_available = True
except:
mutagen_available = False

try:
from PIL import Image
pil_available = True
except:
pil_available = False

import urllib
import io

def resize_the_cover_picture(pic_url):
data = urllib.request.urlopen(pic_url).read()
if not pil_available:
return data
if len(data)>3e6:
img = Image.open(io.BytesIO(data))
img = img.convert("RGB")
img = img.resize((500, 500), Image.ANTIALIAS)
byte_arr = io.BytesIO()
img.save(byte_arr, format='JPEG', quality=95)
return byte_arr.getvalue()
else:
return data


def set_tags_for_mp3(mp_path,pic_url='',artist='',album='',music_name=''):
if not mutagen_available:
print("mutagen not available, won't set tags")
return

audio = mutagen.File(mp_path)
if pic_url:
audio.tags.add(
mutagen.id3.APIC(
encoding=3,
mime='image/jpeg',
type=3,
desc=u'Cover',
data=resize_the_cover_picture(pic_url)
)
)
if artist:
audio.tags.add(
mutagen.id3.TPE1(
encoding=3,
text=artist
)
)
if album:
audio.tags.add(
mutagen.id3.TALB(
encoding=3,
text=album
)
)
if music_name:
audio.tags.add(
mutagen.id3.TIT2(
encoding=3,
text=music_name
)
)
audio.save()


def set_tags_for_m4a(mp_path,pic_url='',artist='',album='',music_name=''):
if not mutagen_available:
print("mutagen not available, won't set tags")
return

audio = mutagen.File(mp_path)
if pic_url:
audio.tags['covr'] = [
mutagen.mp4.MP4Cover(
resize_the_cover_picture(pic_url),
imageformat=mutagen.mp4.MP4Cover.FORMAT_JPEG
)
]
if artist:
audio.tags['\xa9ART'] = artist
if album:
audio.tags['\xa9alb'] = album
if music_name:
audio.tags['\xa9nam'] = music_name
audio.save()

def set_tags_for_flac(mp_path,pic_url='',artist='',album='',music_name=''):
if not mutagen_available:
print("mutagen not available, won't set tags")
return

audio = mutagen.File(mp_path)
if pic_url:
pic = mutagen.flac.Picture()
pic.type = 3
pic.mime = 'image/jpeg'
pic.data = resize_the_cover_picture(pic_url)
audio.add_picture(pic)
if artist:
audio.tags['artist'] = artist
if album:
audio.tags['album'] = album
if music_name:
audio.tags['title'] = music_name
audio.save()