声明:1 程序很脆弱,各种问题、bug、漏洞,楼主不善编程,请轻拍。
2 巨鲸网提供海量正版免费音乐,据说姚明有投资,楼主很土前段时间才知道。
3 目前已知的问题中比较严重的一个是有时候下载需要验证码,我这里没办法处理,结果就是下载到一堆的html。用浏览器打开巨鲸,随便点首歌下载,输入一次验证码,脚本就可以下载到了
4 符合某个条件的结果如果排列超过一页,默认只下载第一页的,后面的不做处理。比如搜索‘周杰伦’的歌,会有很多页,程序只下载第一页的将近100首。
5 关于wget,为防止下载中文曲目乱码,一开始使用的是--local-encoding=UTF-8,需要支持IRI的wget,那个blog的链接暂时打不开了;后来搜到别人说的--restrict-file-names选项,改成现在这样。
[bash]
[root@new-host-13 ~]# cat downmp3
#!/bin/bash
# Download top100 songs in http://www.top100.cn
# 11/07/22, First Edition
# 11/07/24, 按歌名、歌手搜索完成,按专辑搜索完成
# Author: Wei Li, [email protected]
# Mail: [email protected]
# Site
SITE='www.top100.cn'
LINK='www.top100.cn/download/download.aspx?Productid='
DIR=$HOME/tmp/downmp3
PACK=$DIR/package
LIST=$DIR/list
PAGE=$DIR/page
VALUE=$DIR/value
DOWN=$DIR/download
DOWNDIR=$HOME/music
Usage(){
cat << USAGE
======================================================================
Usage: Get MP3 files from http://www.top100.cn
`basename $0` option [keywords]
`basename $0` -h / --help Show help information
`basename $0` -t / --top Get top classic songs
`basename $0` -p / --pop Get top 100 pop songs
`basename $0` -c / --country Get top 100 country songs
`basename $0` -r / --rock Get top 100 rock songs
`basename $0` -s / --search [ -a | -S | -A ] keywords
Search songs with keywords of artist | song | album
=======================================================================
USAGE
exit 0
}
GetHtml(){
# Get html names and generate full url for different packages
wget "http://$SITE/packages/" -O $PACK 2>/dev/null | iconv -f GBK
cat "$PACK" | grep 'info-pk'| awk -F'><' '{print $2}' | awk '{print $2}' | awk -F '/' '{print $3}' | sed 's/.$//' | uniq > $LIST
sed -i 's/^/http:\/\/www.top100.cn\/packages\//g' $LIST
}
GetValue(){
# Get mp3 links from a package
wget $1 -O $PAGE | iconv -f GBK
cat $PAGE | sed -n '/value/{/checksong/p}' | awk '{print $9}' | awk -F '"' '{print $2}' | sed 's/^m//g' >> $VALUE
}
GetMp3(){
while read line
do
wget $LINK$line -O $DOWN | iconv -f GBK
url=`cat $DOWN | sed -n '/href="http/p' | awk -F '"' '{print $2}' | uniq`
# 有防盗链接,且启用IRI支持,否则下载后文件名乱码;-nc跳过已存在文件不下载。
wget -c $url --ref=$LINK$line --restrict-file-names=nocontrol -nc
done < $VALUE
}
Clear(){
# for i in `ls $DIR`
# do
# rm -f $DIR/"$i"
# echo
# done
rm -f $DIR/*
#exit 0
}
GetTop100()
{
GetHtml
[ -f "$VALUE" ] && rm -f "$VALUE"
while read line
do
GetValue $line
done < $LIST
mkdir -pv $DOWNDIR && cd $DOWNDIR
GetMp3
Clear
exit 0
exit 0
}
GetSong(){
case $1 in
pop)
DEST=$DOWNDIR/pop
FILE=$DIR/pop
WEBPAGE='http://www.top100.cn/categories/allsong-69.shtml'
;;
rock)
DEST=$DOWNDIR/rock
FILE=$DIR/rock
WEBPAGE='http://www.top100.cn/categories/allsong-84.shtml'
;;
country)
DEST=$DOWNDIR/country
FILE=$DIR/country
WEBPAGE='http://www.top100.cn/categories/allsong-67.shtml'
;;
esac
[ -d "DEST" ] || mkdir -pv $DEST
cd $DEST
[ -f "$FILE" ] && rm -f "$FILE"
wget -c $WEBPAGE -O $FILE | iconv -f GBK
[ -f "$VALUE" ] && rm -f "$VALUE"
cat $FILE | sed -n '/argument/{/checkbox/p}' | awk -F '"' '{print $8}' | sed 's/^m//g' >> $VALUE
GetMp3
Clear
exit 0
}
Search()
{
case $1 in
-a | --artist)
# 默认只下载搜索结果的第一页
SEARCH="http://www.top100.cn/search/allartist.aspx?keyword=$2"
NAME=`echo $2 | tr -d ' '`
wget "$SEARCH" -O $DIR/$NAME | iconv -f GBK
RESULT="www.top100.cn/artist/`cat $DIR/$NAME | grep "所有单曲" | awk -F '/' '{print $3}' | awk -F '"' '{print $1}'`"
GetValue $RESULT
mkdir -pv $DOWNDIR/$NAME && cd $DOWNDIR/$NAME
unset NAME
GetMp3
Clear
exit 0
;;
-S | --song)
IFS=$'\n'
NAME=`echo $2 | tr -d ' '`
SEARCH="http://www.top100.cn/search/allsong.aspx?keyword=$2"
wget $SEARCH -O $DIR/$NAME | iconv -f GBK ; sed -i '1,75d' $DIR/$NAME # 删除文件头部
SONGS=(`cat "$DIR"/$NAME | sed -n "/"$2"/{/javascript/p}" | sed 's/<[^>]*>//g' | sed 's/^...//g'| sed 's/\\r//'`)
ARTISTS=(`cat $DIR/$NAME | grep 'artist' | sed 's/<[^>]*>//g' | sed 's/^...//g'| sed 's/\\r//'`)
ALBUMS=(`cat $DIR/$NAME | grep 'album' | sed 's/<[^>]*>//g' | sed 's/^...//g'| sed 's/\\r//'`)
i=0
while [ ! -z "${SONGS}" ]
do
echo -e "$[i+1]: ${SONGS} | ${ARTISTS} | ${ALBUMS}\n"
((i=i+1))
done
echo "Enter your choice(1 for Default):"
read choice
if [ -z "$choice" ];then
choice=1
fi
CODE=`cat $DIR/$NAME | sed -n "/$2/{/title/p}" | sed 's/.*(.//' | sed 's/.).*//' | sed 's/^m//' | sed -n "$choice"p`
wget $LINK$CODE -O $DOWN | iconv -f GBK
url=`cat $DOWN | sed -n '/href="http/p' | awk -F '"' '{print $2}' | uniq`
cd $DOWNDIR
# 有防盗链接,且启用IRI支持,否则下载后文件名乱码;-nc跳过已存在文件不下载。
wget -c $url --ref=$LINK$line --restrict-file-names=nocontrol -nc
Clear
exit 0
;;
-A | --album)
IFS=$'\n'
SEARCH="http://www.top100.cn/search/allalbum.aspx?keyword=$2"
NAME=`echo $2 | tr -d ' '`
wget "$SEARCH" -O $DIR/$NAME
ALBUMS=(`cat $DIR/$NAME | grep '语种' | sed 's/<[^>]*>/ /g' | awk -F ':' '{print $2}'|sed 's/艺术家//g'`)
ARTISTS=(`cat $DIR/$NAME | grep '语种' | sed 's/<[^>]*>/ /g' | awk -F ':' '{print $3}'|sed 's/语种//g'`)
i=0
while [ -n "${ALBUMS}" ];
do
echo -e ""$[i+1]": "${ALBUMS}" | "${ARTISTS}"\n"
((i=i+1))
done
echo "Enter your choice(1 for Default):"
read choice
if [ -z "$choice" ];then
choice=1
fi
CODE=`cat $DIR/$NAME | grep '语种' | sed -n "$i"p | awk -F '"' '{print $4}' | awk -F '/' '{print $3}'`
URL="http://www.top100.cn/album/$CODE"
GetValue $URL
mkdir -pv $DOWNDIR/${ALBUMS[$choice-1]} && cd $DOWNDIR/${ALBUMS[$choice-1]}
GetMp3
Clear
exit 0
;;
*)
Usage
;;
esac
}
[ -d "$DIR" ] || mkdir -pv "$DIR"
[ -d "$DOWNDIR" ] || mkdir -pv "$DOWNDIR"
Clear
case $1 in
-h | --help) Usage;;
-t | --top) GetTop100;;
-p | --pop) GetSong pop;;
-c | --country) GetSong country;;
-r | --rock) GetSong rock;;
-s | --search) shift; Search "$@";;
*) Usage;;
esac
[/bash]
图片一张,公司电脑上截的,全屏,没处理。
[裹脚布一样]从巨鲸网下载MP3的shell[/裹脚布一样]
- wiewi
- 帖子: 628
- 注册时间: 2008-11-20 22:50
- 系统: ArchLinux
[裹脚布一样]从巨鲸网下载MP3的shell[/裹脚布一样]
===我的小窝===
无聊吗?点我吧,楼主迫切期待你的光临~~
又一个轮子
------------------------------------
这年头,没有1000贴都不好意思见人了
------------------------------------
献丑不如藏拙
------------
无聊吗?点我吧,楼主迫切期待你的光临~~
又一个轮子
------------------------------------
这年头,没有1000贴都不好意思见人了
------------------------------------
献丑不如藏拙
------------
-
- 帖子: 442
- 注册时间: 2010-09-08 23:33
- 月下叹逍遥
- 论坛版主
- 帖子: 33994
- 注册时间: 2010-10-07 14:23
- 系统: Archdows10
- 来自: 某系某星某洲某国某省某市
- 联系:
- liuerfire
- 帖子: 145
- 注册时间: 2010-04-24 21:57
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 3173
- 注册时间: 2010-01-13 23:26
-
- 帖子: 4
- 注册时间: 2011-07-23 3:29
Re: [裹脚布一样]从巨鲸网下载MP3的shell[/裹脚布一样]
搞的什么东东!!不要搞破坏哦!!
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: [裹脚布一样]从巨鲸网下载MP3的shell[/裹脚布一样]
发现个语法错误,不是 for default,是 by default