从中科大音乐站抓MP3的一个脚本

由于南京大学的 COS 音乐 FTP 被关闭了,原来很喜欢 COS 按歌手和专辑分门别类的风格,现在就不知道到哪里去下歌了。今天发现了一个好的音乐网站:中国科学技术大学音乐站,[href: http://music2.ustc.edu.cn ],按歌手和专辑分类,在教育网内速度算是相当快的,可以在线听。我就动了心思,想把专辑自动下下来。

中科大音乐站是这样的,你先选择歌手、专辑和歌曲,点击"播放"会下载下来一个 music@ustc.m3u 文件,使用播放软件打开就可以在线播放选中的歌曲。其 music@ustc.m3u 文件中每首歌的条目如下例:

#EXTM3U 双节棍
http://music2.ustc.edu.cn:8088/6e6bbc6495aec1f5fc719dcbc826ab4c%2F64%2Ff05523485d63a9c422393215c676f194.mp3

可以看出,中科大音乐站在存储 mp3 音乐文件的时候采取了某种文件名加密方法,很难直接猜出文件名,而且在提交 form 的时候采取 post 方式,不知道它的 action 文件接受什么样的参数,所以想在这一步上减少工作量是很难的。而且从网站上拿下来这个列表并不算很麻烦,因为每个人基本只会对某些专辑感兴趣嘛。那么下面要做的工作就是自动处理这个列表,将歌曲下载下来存在应该的位置和保存为正确的文件名。

Linux Bash Shell 脚本如下:

for album in $(ls *.m3u)
do
# Test the encoding of music list file.
  encode=$(file -i $album | awk ’{print $3}’ | sed -n ’s/charset=//p’)
if [ $encode != "utf-8" ]
then
  iconv -f gbk -t utf8 $album > ${album}.1
  mv ${album}.1 $album
fi
# Test if the album already exists.
if [ ! -d ${album%.*} ]
then
  mkdir -p ${album%.*}
fi
# Get the url list.
urls=(`grep -v "#" $album`)
# Download the song.
N=0
for song in $(grep "#" $album | sed -n ’s/#EXTM3U //p’ | sed ’s/ /_/g’)
do
  echo "Processing $song..."
  if [ ! -f ${album%.*}/${song}.mp3 ]
  then
    wget -O ${album%.*}/${song}.mp3 ${urls[$N]}
  fi
N=`expr $N + 1`
done
done

这个脚本所做的工作是:
1.找到当前目录下所有的以 m3u 为后缀名的专辑播放列表文件,循环处理它们。
2.检查专辑列表文件的编码方式,如果不是 utf-8 格式编码,将文件编码转换成 utf-8(为了处理歌曲文件名需要)。
3.去掉专辑列表文件后缀名 .m3u,以此为名字建立专辑目录。
4.得到专辑中歌曲的 url 列表。
5.下载歌曲到专辑目录中,并以对应的文件名命名,歌曲文件名中的空格被转化为下划线。

使用方法,先手动下载希望下载的每个专辑的播放列表(.m3u 文件),并将其文件名改为对应的专辑名,放到与脚本同一目录下,运行脚本,就会将每个专辑中的歌曲下载到以专辑名命名的目录下。

《从中科大音乐站抓MP3的一个脚本》上有2条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注