当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 21 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 百度新歌top 100下载脚本,欢迎试用!
帖子发表于 : 2007-01-07 22:40 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
程序于2007-10-14更新
百度页面修改格式后,导致无法下载,更正
程序于2008-04-03更新
修正下载的文件末尾会多一个tab符号的问题
===============
不多说了,脚步的功能就是自动下载百度新歌top 100列表里面的歌曲,另外自己修改一下地址也可以用于下载歌曲TOP500等其他列表,本脚本源自oneleaf的:
http://forum.ubuntu.org.cn/viewtopic.php?t=2391
由本人修改,欢迎试用和指教!
解压后直接运行即可。


附件:
文件注释: 新版本的在这里(2008-04-03更新)
dlmp3.tar [20 KiB]
被下载 332 次


_________________
关注我的blog: ε==3


最后由 bones7456 编辑于 2008-04-03 17:24,总共编辑了 6 次
页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-01-07 22:50 

注册: 2006-07-09 12:22
帖子: 1331
地址: 南京
送出感谢: 0 次
接收感谢: 1
楼主好人! :lol:

不过,发到shell版比较适合吧。呵呵


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-01-08 9:51 

注册: 2007-01-07 14:24
帖子: 19
送出感谢: 0 次
接收感谢: 0 次
直接执行没有反应 :shock:


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-01-08 12:05 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
xiaowl 写道:
直接执行没有反应 :shock:


最好在终端里执行,不然可能看不到状态。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-01-08 12:08 
头像

注册: 2005-05-19 18:38
帖子: 1991
地址: 湖南永州
送出感谢: 0 次
接收感谢: 1
经试,可以下载,只是 axel 经常死了,可能是多线程的原故


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-01-08 18:26 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
gnix_oag 写道:
经试,可以下载,只是 axel 经常死了,可能是多线程的原故


是的,经常弹出“检查到程序崩溃”什么的,但好像又可以继续下载,没什么影响,是我的脚本有问题吗?该怎么解决呢?


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-01-11 0:15 
头像

注册: 2006-12-14 21:35
帖子: 60
地址: qinhuangdao
送出感谢: 0 次
接收感谢: 0 次
能不能给axel设个定时器,如果下载文件3~5分钟没下完就自动放弃,使用下一个地址下载?


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-05-06 22:17 

注册: 2006-02-07 15:05
帖子: 26
送出感谢: 0 次
接收感谢: 0 次
更改SOURCE页面可以下载其它MP3集吗?比如儿歌、民歌等等


_________________
激水之疾,至于漂石者,势也;鸷鸟之疾,至于毁折者,节也。故善战者,其势险,其节短。


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-05-11 15:24 
头像

注册: 2007-04-17 13:23
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
本来想在cygwin中用Vim打开看看
不过竟然打开后中文乱码~

windows版本的gvim中打开是可以的
同样vimrc设定~

还没有搞明白~


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-05-12 9:16 

注册: 2007-03-01 15:22
帖子: 22
地址: 广州
送出感谢: 0 次
接收感谢: 0 次
更改SOURCE页面可以下载其它MP3集吗?比如儿歌、民歌等等

应该可以的,baidu的mp3搜索网页源文件一个样的。


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2007-11-23 21:33 
头像

注册: 2006-12-21 17:54
帖子: 369
送出感谢: 0 次
接收感谢: 0 次
能给注释最好,方便新手


_________________
代码:
 
传说中,他有着绝对精彩和浪漫的身手


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2007-12-12 17:27 
头像

注册: 2007-12-08 20:21
帖子: 66
地址: 广州
送出感谢: 0 次
接收感谢: 0 次
今天改了一下脚本,可以下,e文和轻音乐了
#!/bin/bash
#Copyright (c) 2006 bones7456 (bones7456@gmail.com)
#License: GPLv2
#非常感谢ubuntu社区和oneleaf老兄
#强烈建议安装axel(多线程下载工具)和mid3v2(包含在python-mutagen里,用于修改歌曲的id3信息)

#mp3的地址

#新歌100首
#SOURCE="http://list.mp3.baidu.com/list/newhits.html?id=1?top1"
#欧美专辑
SOURCE="http://list.mp3.baidu.com/list/oumei.html"
#歌曲top500
#SOURCE="http://list.mp3.baidu.com/topso/mp3topsong.html"
#轻音乐
#SOURCE="http://list.mp3.baidu.com/list/qingyinyue.html?top19"

#保存mp3的目录
SAVE="${HOME}/music/baidump3"

#下载重试次数
TRYCOUNT=2

#用axel下载时的线程数
AXELNUM=7

#临时目录
TMP="/tmp/baidump3-${USER}"

#是否需要暂停
PAUSE=0

if [ x`which axel` = x"" ];then
PAUSE=1
cat << EOF
您的系统中没有安装axel多线程下载工具,这将导致只能使用wget进行单线程下载,将会影响下载速度。
如果是ubuntu用户,可以直接使用 sudo apt-get install axel 进行安装,其他系统请访问axel主页:http://wilmer.gaast.net/main.php/axel.html 进行下载、安装。

EOF
fi
if [ x`which mid3v2` = x"" ];then
PAUSE=1
cat << EOF
您的系统中没有安装mid3v2工具,使用该工具可以修改mp3歌曲的标签信息(如歌手、歌名等),并去掉可能包含于其中的广告信息。
如果是ubuntu用户,可以直接使用 sudo apt-get install python-mutagen 进行安装,其他系统请访问其主页:http://www.sacredchao.net/quodlibet/wiki/Development/Mutagen 进行下载、安装。

EOF
fi
if [ "$PAUSE" = 1 ];then
echo "是否继续(y|n)?"
read KEYVAR
case "$KEYVAR" in
"Y" | "y" )
echo 略过。
;;
* )
exit 0
;;
esac
fi

#创建下载目录
if [ ! -d "${SAVE}" ];then
mkdir -p "${SAVE}"
fi

#创建临时下载目录
if [ -d "${TMP}" ];then
rm -rf "${TMP}"
fi
mkdir -p "${TMP}"

echo "开始下载百度最新100首歌曲列表"
wget -O ${TMP}/mp3.html ${SOURCE}
echo "下载百度最新100首歌曲列表完成。"

#转换网页编码
iconv -f gbk -t utf8 ${TMP}/mp3.html |\

grep " href=\"http://mp3.baidu.com/m" |\

#将mp3list.txt所有开头的空格去掉
sed -e 's/ *//' |\

#将mp3list.txt所有开头的tab去掉
sed -e 's/\t*//' |\

#将mp3list.txt所有全角空格去掉
sed -e 's/ //g' |\

#将所有的回车符去掉
#sed ':a;N;$!ba;s/\n/,/g' |\

#在td>,后面加上回车符,一行表示一个mp3文件。
sed -e 's/,<td/\n<td/g' |\
sed -e 's/td>,/td>\n/g' |\

#删除<td width="30%"> <td> </td> <td...FFFFFF"> <p> </p>
sed -e 's/<td width="17%">//g' |\
sed -e 's/<td width="17%" >//g' |\
sed -e 's/<td width="17%" height="28" >//g' |\
sed -e 's/<td width="30%">//g' |\
sed -e 's/<td>//g' |\
sed -e 's/<\/td>//g' |\
sed -e 's/<p>//g' |\
sed -e 's/<\/p>//g' |\
sed -e 's/<td.*"border">//g' |\

#删除</a>..."_blank">
sed -e 's/<\/A>\/<A.*_blank>/、/g' |\
sed -e 's/<\/A>/<\/a>/g' |\
sed -e 's/<\/a>.*_blank>/-/g' |\
#sed -e 's/<\/a>.*_blank">/-/g' |\
#删除)
sed -e 's/<\/a>)/<\/a>/g' |\

#删除&amp;
sed -e 's/\&amp\;/\//g' >${TMP}/mp3list.txt

#得到:<a href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=2&word=Baby%20Baby%20tell%20me%20%CD%F5%D0%C4%C1%E8" target="_blank">Baby ,Baby tell me-王心凌</a>

#取得行号,循环
line=$(awk 'END{print NR}' ${TMP}/mp3list.txt)
i=1;
while((i<=line));do
downed=0;
mpline=`awk 'NR=='"$i"'' ${TMP}/mp3list.txt`
url=`echo $mpline |sed -e 's/<A href="//g' | sed -e 's/<a href="//g' | sed 's/\ target.*//g' | sed 's/"//g' | cat`
name=`echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' | sed -e 's/<\/b>//g' |sed -e 's/<b>//g' |\
sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g' | sed -e 's/"/'\''/g' | cat`
title=`echo $name | sed -e 's/-.*//g'`

#检查是否已经下载过这首歌,如果下载过,放弃
if [ -e "${SAVE}/${name}.mp3" ] || [ -e "${SAVE}/${name}.wma" ]; then
echo -e "\e[1;6m\e[1;31m发现 ${name} 下载过,忽略,继续下一首。\e[1;6m\e[00m"
((i++))
continue;
fi

echo "开始通过 $url 下载 $name";
wget -O ${TMP}/down.html $url
echo "获取 $name 下载列表完成。";

#down.txt为有效的下载地址
iconv -f gbk -t utf8 -c ${TMP}/down.html | grep "onclick=\"return ow(event,this)\"" |\
sed -e 's/.*<a href="//g' | sed -e 's/" target="_blank".*//g' > ${TMP}/down.txt

#size.txt为有效的下载文件大小
iconv -f gbk -t utf8 -c ${TMP}/down.html | grep "M<\/td>" |\
sed -e 's/<td>//g' | sed -e 's/ M<\/td>//g' > ${TMP}/size.txt

#down.txt与size.txt合并而在的down_size.txt文件中字段之间以"`"作为分隔符
paste -d '`' ${TMP}/size.txt ${TMP}/down.txt > ${TMP}/down_size.txt

#排序
sort -n -r ${TMP}/down_size.txt > ${TMP}/down_size_sort.txt

#去掉后面的尺寸
sed 's/.*`//' ${TMP}/down_size_sort.txt > ${TMP}/temp.txt

##### 析取出mp3 的下载地址或 wma的下载地址 ##############
grep -i "word=mp3" ${TMP}/temp.txt | grep "$title" > ${TMP}/down_mp3.txt
grep -i "word=wma" ${TMP}/temp.txt | grep "$title" > ${TMP}/down_wma.txt

downline_mp3=$(awk 'END{print NR}' ${TMP}/down_mp3.txt);
downline_wma=$(awk 'END{print NR}' ${TMP}/down_wma.txt);
echo -e "\e[1;6m\e[1;31m发现 ${downline_mp3} 个名为 ${name}.mp3 下载地址。\e[1;6m\e[00m"
echo -e "\e[1;6m\e[1;31m发现 ${downline_wma} 个名为 ${name}.wma 下载地址。\e[1;6m\e[00m"
# 初始化计数器
j=1;
# 优先下载mp3格式的歌曲
while((j<=downline_mp3)); do
mp3=`awk 'NR=='"$j"'' ${TMP}/down_mp3.txt | sed -e 's/ /\\ /g'`
echo -e "\e[1;6m\e[1;31m正在下载${name}.mp3\e[1;6m\e[00m"
#echo -e "\e[1;6m\e[1;31m中转页面地址为${mp3}\e[1;6m\e[00m"
wget -O "${TMP}/transit.html" "$mp3"
realURL=`iconv -f gbk -t utf8 -c ${TMP}/transit.html | grep "<li class=\"li\" style=\"margin-right:10px;\">" | sed 's/.*href="//' | sed 's/" target="_blank">.*//'`
#echo -e "\e[1;6m\e[1;31m真实下载地址为${realURL}\e[1;6m\e[00m"
if [ x`which axel` != x"" ];then
axel -n $AXELNUM -a -o "${TMP}/${name}.mp3" "${realURL}"
else
#wget太慢了。但是如果没有安装axel,可以把上面一行注释掉,用下面一行代替
wget -c --tries=$TRYCOUNT $realURL -O "${TMP}/${name}.mp3"
fi
if [ "$?" = 0 ]; then
if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then
if [ x`which mid3v2` != x"" ];then
title=`echo $name | sed -e 's/-.*//g'`
artist=`echo $name | sed -e 's/.*-//g' | sed -e 's/.mp3//g' | sed -e 's/.wma//g'`
mid3v2 -D "${TMP}/${name}.mp3"
mid3v2 -t "${title}" -a "${artist}" "${TMP}/${name}.mp3"
fi
mv "${TMP}/${name}.mp3" "${SAVE}/${name}.mp3"
downed=1;
break;
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.mp3 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.mp3";
((j++))
fi
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.mp3 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.mp3";
((j++))
fi
done

#如果下载成功继续下其余的歌
#continue用于跳过循环体中的后续命令
if [ "$downed" = 1 ] ; then
((i++))
echo -e "\e[1;7m\e[1;41m下载 $name 成功\e[1;7m\e[00m"
continue;
fi

# 如果没有mp3格式的则下载wma格式的歌
j=1;
while((j<=downline_wma)); do
wma=`awk 'NR=='"$j"'' ${TMP}/down_wma.txt`
echo -e "\e[1;6m\e[1;31m正在下载${name}.wma\e[1;6m\e[00m"

#echo -e "\e[1;6m\e[1;31m中转页面地址为${mp3}\e[1;6m\e[00m"
wget -O "${TMP}/transit.html" "$wma"
realURL=`iconv -f gbk -t utf8 -c ${TMP}/transit.html | grep "<li class=\"li\" style=\"margin-right:10px;\">" | sed 's/.*href="//' | sed 's/" target="_blank">.*//'`
#echo -e "\e[1;6m\e[1;31m真实下载地址为${realURL}\e[1;6m\e[00m"
if [ x`which axel` != x"" ];then
axel -n $AXELNUM -a -o "${TMP}/${name}.wma" "${realURL}"
else
#wget太慢了。但是如果没有安装axel,可以把上面一行注释掉,用下面一行代替
wget -c --tries=$TRYCOUNT $realURL -O "${TMP}/${name}.wma"
fi
if [ "$?" = 0 ]; then
if [ `file -ib "${TMP}/${name}.wma" | sed -e 's/\/.*//g'` = "application" ]; then
#title=`echo $name | sed -e 's/-.*//g'`
#artist=`echo $name | sed -e 's/.*-//g' | sed -e 's/.mp3//g' | sed -e 's/.wma//g'`
#mid3v2 -D "${TMP}/${name}.wma"
#mid3v2 -t "${title}" -a "${artist}" "${TMP}/${name}.wma"
mv "${TMP}/${name}.wma" "${SAVE}/${name}.wma"
downed=1;
break;
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.wma 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.wma";
((j++))
fi
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.wma 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.wma";
((j++))
fi
done

((i++))
if [ "$downed" = 1 ] ; then
echo -e "\e[1;7m\e[1;41m下载 $name 成功\e[1;7m\e[00m"
else
echo -e "\e[1;7m\e[1;41m下载 $name 失败\e[1;7m\e[00m"
fi
done
rm -fr ${TMP}
exit 0


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2007-12-13 21:19 

注册: 2007-09-09 10:41
帖子: 11
送出感谢: 0 次
接收感谢: 0 次
楼主辛苦了,顶你是无比的光荣 :) :) :)


页首
 用户资料  
 
14 楼 
 文章标题 : but i get this error,why
帖子发表于 : 2007-12-14 16:34 

注册: 2007-09-08 12:51
帖子: 65
送出感谢: 0 次
接收感谢: 0 次
I run this shell script,and wish I get some mp3 file to listen,but ....
I get this error message:

下载百度最新100首歌曲列表完成。
dlmp3: 249: cannot open =line: No such file
dlmp3: 249: i: not found


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2007-12-14 17:00 
头像

注册: 2007-12-08 20:21
帖子: 66
地址: 广州
送出感谢: 0 次
接收感谢: 0 次
你是运行哪一个的?我这个只是添加了几个sed,以适应其他百度的下载子页,但是我运行n次都没发现这问题。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 21 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译