浏览代码

safe filename

boyska 7 年之前
父节点
当前提交
cd973ae368
共有 1 个文件被更改,包括 9 次插入4 次删除
  1. 9 4
      bandcavall/download.py

+ 9 - 4
bandcavall/download.py

@@ -3,16 +3,21 @@ from os.path import join, exists
 import requests
 import mutagen.mp3
 import logging
+import unicodedata
 log = logging.getLogger(__name__)
 
+def safefname(s):
+    asciified = unicodedata.normalize('NFKD', s).encode('ascii', 'ignore').decode('ascii')
+    return asciified.replace('/', '_').replace(' ', '_')
+
 
 def download_track(track, args):
-    log.debug('Downloading "%s"' % track['title'])
+    log.debug('Downloading "%s"', track['title'])
     if 'album' in track:
-        fdir = join(track['artist'], track['album']).replace(' ', '_')
+        fdir = join(safefname(track['artist']), safefname(track['album']))
     else:
-        fdir = join(track['artist'])
-    fname = track['title'].replace(' ', '_') + '.mp3'
+        fdir = join(safefname(track['artist']))
+    fname = safefname(track['title'] + '.mp3')
     fpath = join(args.download_base, fdir, fname)
     os.makedirs(join(args.download_base, fdir), exist_ok=True)
     if exists(fpath):