本着学习shell的原则,参考benqlk那个脚本,分析了下载歌曲的原理,重新写了一个,但和他的基本功能是一样的,只是有些提取命令照自己的想法写了,增加了歌手一列,不当之处还请指正
代码: 全选
#!/bin/sh
#downmusic.sh
###Copyright (c) 2008 percy ([email protected])
# Distributed under the terms of the GNU General Public License v3
#Ctreated date:2008年 04月 06日 星期日 00:15:05 CST
#参考了benqlk:http://forum.ubuntu.org.cn/viewtopic.php?t=95073
read -p "请输入要下载歌曲的名字:" musicname
if [ -d ~/Music ];then
echo "下载的音乐将会保存到 ~/Music 文件夹下"
else
echo "~/Music 文件夹不存在 脚本将会自动创建"
mkdir ~/Music
fi
#把中文转换成16进制数字和字母不变
a=`echo "$musicname" | iconv -c -f utf-8 -t gb2312 | LANG=C sed 's/./&\n/g' | sed -n '$!l' |
while read str;do
str=${str%$}
if [ ${#str} -eq 3 ];then
printf "%%%X" "0${str}"
elif [ "X${str}" == "X" ];then
echo -n '%20'
else
echo -n $str
fi
done
echo`
wget "http://mp3.baidu.com/m?f=ms&tn=baidump3&ct=134217728&lf=&rn=&word="$a"&lm=-1" -O source_baidu #获得搜索页面
iconv -c -f gb2312 -t utf8 source_baidu > source_utf8
let m=20 #提取出有效下载链接个数
grep -m $m "M</td>" source_utf8|cut -d "<" -f2|cut -d ">" -f2 > music_size #得到文件大小
#grep -m $m "M</td>" source_utf8 |cut -b5-10|sed 's/<//g' > music_size #得到文件大小
grep -m $m "<td class=d><a href=" source_utf8|awk -F"&word" '{print $1}'|cut -d "," -f2> music_info #得到歌曲名信息
grep -m $m "[wm][mp][a3]</td>" source_utf8|cut -d "<" -f2|cut -d ">" -f2 > music_type #得到歌曲格式
grep -m $m "http://mp3.baidu.com/singerlist/" source_utf8 |cut -d ">" -f3|cut -d "<" -f1 > singername #得到歌手名字
cat music_size>all
cat music_info>>all
cat music_type>>all
cat singername>>all
awk '{a[NR]=$0}END{for(i=1;i<=NR/4;i++)printf "(%d)\t%s\t%s\t%s\t%s\n",i,a[i],a[i+40],a[i+60],a[i+20]}' all >sum #将信息打印成整齐列表
cat sum
read -p "请选择你要下载第几首:" c #输入下载歌曲序号
let line=`grep -n "class=tdn>$c</td>" source_utf8|cut -d ":" -f1` #获得源文件中歌曲代号所在的行数
let line=$line+1 #获得歌曲链接所在的行数,从源文件中可以看到歌曲代号所在的下一行就是歌曲的链接
head -n $line source_utf8 |tail -n 1 >url1 #取得真实链接存在的网页地址
cat url1 |awk -F"href=\"" '{print $2}'>url2 #取得真实链接存在的网页地址
u=`cat url2`
wget -O true_source "$u" #取得真实链接存在的网页
iconv -c -f gb2312 -t utf8 true_source >true_source_utf8 #转换编码
url=`grep ":<a href=" true_source_utf8 |awk -F"\">" '{print $1}'|awk -F"=\"" '{print $2}'` #获取真实链接
echo $url
t=`echo $url|awk -F"." '{print $NF}'`
name=`grep "($c)" sum|awk -F'\t' '{print $5}'`
singer=`grep "($c)" sum|awk -F'\t' '{print $4}'`
echo "$t"
wget -t 5 -cS "$url" -O ~/Music/"${singer}-${name}.$t" #下载音乐
rm source* url* true* music_* all sum
代码: 全选
./downmusic.sh
下载的音乐将会保存到 ~/Music 文件夹下
请输入要下载歌曲的名字:同一首歌
--01:30:54-- http://mp3.baidu.com/m?f=ms&tn=baidump3&ct=134217728&lf=&rn=&word=%CD%AC%D2%BB%CA%D7%B8%E8&lm=-1
=> `source_baidu'
正在解析主机 mp3.baidu.com... 211.94.144.102
Connecting to mp3.baidu.com|211.94.144.102|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:未指定 [text/html]
[ <=> ] 71,591 --.--K/s
01:30:54 (493.38 KB/s) - `source_baidu' saved [71591]
(1) 3.4 M mp3 蔡国庆 北京的桥
(2) 0.4 M mp3 蔡国庆 同一首歌难忘旋律四
(3) 5.5 M mp3 毛阿敏 同一首歌
(4) 3.4 M mp3 蔡国庆 北京的桥
(5) 3.4 M wma 蔡国庆 北京的桥
(6) 1.0 M mp3 毛阿敏 同一首歌
(7) 3.4 M mp3 蔡国庆 北京的桥
(8) 4.0 M wma 毛阿敏 同一首歌
(9) 1.4 M wma 群星 同一首歌
(10) 0.7 M wma 毛阿敏 同一首歌
(11) 2.1 M mp3 毛阿敏 同一首歌
(12) 5.5 M mp3 毛阿敏 同一首歌
(13) 5.5 M wma 毛阿敏 同一首歌
(14) 1.4 M mp3 毛阿敏 同一首歌
(15) 5.5 M mp3 蔡国庆 同一首歌
(16) 3.4 M mp3 蔡国庆 北京的桥
(17) 4.1 M mp3 刘畅 同一首歌
(18) 4.2 M mp3 毛阿敏 同一首歌
(19) 5.5 M wma 毛阿敏 同一首歌
(20) 0.9 M mp3 毛阿敏 同一首歌
请选择你要下载第几首:2
--01:31:03-- http://220.181.38.82/m?ct=134217728&tn=baidusg,%E5%90%8C%E4%B8%80%E9%A6%96%E6%AD%8C%20%20%E9%9A%BE%E5%BF%98%E6%97%8B%E5%BE%8B%20%E5%9B%9B&word=rm,http://www.bondsun.com/mp3/~t4F7~8N7yAx.rm,,[%CD%AC%D2%BB%CA%D7%B8%E8]&si=%CD%AC%D2%BB%CA%D7%B8%E8;;%B2%CC%B9%FA%C7%EC;;238460;;238460&lm=16777216%22%20title=%22%E8%AF%B7%E7%82%B9%E5%87%BB%E5%B7%A6%E9%94%AE%EF%BC%81%E6%9D%A5%E6%BA%90%E7%BD%91%E5%9D%80%EF%BC%9A%20%20http://www.bondsun.com%20%20%20%E8%AF%B7%E5%8F%82%E7%85%A7%E7%99%BE%E5%BA%A6%E6%9D%83%E5%88%A9%E5%A3%B0%E6%98%8E%E4%BD%BF%E7%94%A8%22%20onclick=%22return%20ow(event,this)%22%20%20target=%22_blank%22%3E%3Cfont%20style=color:
=> `true_source'
Connecting to 220.181.38.82:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
Cookie coming from 220.181.38.82 attempted to set domain to baidu.com
长度:未指定 [text/html]
[ <=> ] 2,229 --.--K/s
01:31:03 (2.80 MB/s) - `true_source' saved [2229]
http://www.bondsun.com/mp3/同一首歌.rm
rm
--01:31:03-- http://www.bondsun.com/mp3/%E5%90%8C%E4%B8%80%E9%A6%96%E6%AD%8C.rm
=> `/home/pjq/Music/蔡国庆-同一首歌难忘旋律四.rm'
正在解析主机 www.bondsun.com... 61.155.8.155
Connecting to www.bondsun.com|61.155.8.155|:80... 已连接。
已发出 HTTP 请求,正在等待回应...
HTTP/1.1 200 OK
Connection: keep-alive
Date: Sat, 05 Apr 2008 17:33:22 GMT
Content-Length: 448283
Content-Type: application/vnd.rn-realmedia
Last-Modified: Sat, 06 Jan 2007 15:44:43 GMT
Accept-Ranges: bytes
ETag: "c13c295a931c71:592b"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
长度:448,283 (438K) [application/vnd.rn-realmedia]
100%[=====================================================>] 448,283 96.86K/s ETA 00:00
01:31:07 (96.82 KB/s) - `/home/pjq/Music/蔡国庆-同一首歌难忘旋律四.rm' saved [448283/448283]