免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1726 | 回复: 1
打印 上一主题 下一主题

更新! Auto-download Yahoo Hot 600 Music Shell Script v0.2 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-29 09:29 |只看该作者 |倒序浏览
加了几行,在v0.1脚本基础上可以自动选择大小>2Mbyts的文件下载,下载后检查并删除小于1Mbytes的文件。
不过显然还是缺了点什么功能。

--------------------------------------------------------------------------------------------------------------------------------------------------
#!/bin/bash
#License: GPLv2

#Welcome~!
cat << EOF
###########################################################
#                                                         #
#          Auto-download mp3 music script v0.2            #
#           Music from YAHOO MP3_新歌TOP600               #
#             http://music.cn.yahoo.com                   #
#              Save files:/mp3download/                   #
#           Temporary files:/tmp/tmp_dlmp3/               #
#                                                         #
###########################################################
EOF

#需要安装编码转换器
#sudo apt-get install recode
i=1

#mp3的地址
MP3SOURCE="http://music.cn.yahoo.com/mp3list_top.php?pid=ysearch&sub1=%B8%E8%C7%FA&sub2=%C8%C8%CB%D1%B8%E8%C7%FA&origin=onesearch&source=ysmt_lbuzz_r"

#保存mp3的目录
SAVE="~/mp3download"

#下载重试次数
TRYCOUNT=2
#重复链接时间
TIMEOUT=8

#临时目录
TMP="/tmp/tmp_dlmp3"

#文件格式编号
FORMATNUM=1
#文件大小编号
let "SIZENUM=${FORMATNUM}+1"
#文件地址编号
PATHNUM=1

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

#创临时下载目录
if [ ! -d "$TMP" ];then
mkdir "$TMP"
fi

echo "---------------开始下载YAHOO最热600首歌曲列表------------------------"
wget -q -O ${TMP}/yahoo.html $MP3SOURCE | 1>/dev/null
echo
echo "---------------下载YAHOO最热600首歌曲列表完成------------------------"
#转换网页编码
iconv -f gbk -t utf8 ${TMP}/yahoo.html | grep -i '<td class="z_h2".*href' >${TMP}/mp3page.html

#过滤空行和行首空格
#sed -e '/^$/d' ${TMP}/mp3page.html |\
#sed -e 's/  +//g' |\
#获取音乐URLlist
sed -e 's/"//g' ${TMP}/mp3page.html |\
sed -e 's/<\/span><\/a>//g' |\
sed -e 's/target=.*class=p20>//g' |\
sed -e 's/<td class.*href=//g' >${TMP}/mp3list.txt

echo "--------------------本地下载列表转换完成---------------------------"
#获得要下载歌曲的总数
line=`awk 'END {print NR}' ${TMP}/mp3list.txt`
while [ "$i" -le "$line" ]  ;do
mp3access=`awk 'FNR=='"$i"'{print $0}' ${TMP}/mp3list.txt`
url=`echo "$mp3access" | cut -d" " -f1`
name=`echo "$mp3access" | cut -d" " -f2`
#echo $url
#echo $name
#break

#检查是否已经下载过这首歌,如果下载过,放弃
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++))
FORMATNUM=1
PATHNUM=1
continue;
fi

#链接下载列表
echo
echo "链接到下载页面url"
echo
wget -q -O ${TMP}/mp3down.html $url
echo
echo "--------------------获得 $name 下载页面--------------------------"
#获得文件链接地址数目
sed 's/"//g' ${TMP}/mp3down.html |\
sed 's/  +//g' |\
egrep -i '<td class=m_song.*</td>' |\
sed 's/^.*href=//g' |\
sed 's/ onclick.*<\/td>$//g' >${TMP}/mp3down.txt
numdown=`awk 'BEGIN {
COUNT=0
}
$1~/http:\/\/.*/ {
COUNT++
}
END {
if(COUNT==NR)
print COUNT
else
print 0
}' ${TMP}/mp3down.txt`
if (("$numdown"<=0)) ;then
echo -e "\e[1;6m\e[1;31m ${name}未获取有效链接,忽略,继续下一首。\e[1;6m\e[00m"
((i++))
FORMATNUM=1
PATHNUM=1
continue
fi
echo -e "\n歌曲name,共获得$numdown个有效链接地址。"

#获得下载文件大小和格式
iconv -t utf8 -c ${TMP}/mp3down.html |\
sed -e 's/"//g' |\
sed -e 's/   *//g' |\
grep -i '<td>.*<\/td>' |\
sed -e 's/^.*<td>//g' |\
sed -e 's/<\/td>$//g' |\
egrep '^([wm][mp][a3])|(.*M)$' >${TMP}/mp3size.txt

#选择文件SIZE>=2MBytes的链接地址
SUMNUM=`awk 'END {print NR}' ${TMP}/mp3size.txt`
while (("$FORMATNUM"<"$SUMNUM")  ;do
format=`awk 'FNR==ARGV[2] {print $1}' "${TMP}/mp3size.txt"  ${FORMATNUM}  2>/dev/null`
size=`awk 'FNR==ARGV[2] {print $1}' "${TMP}/mp3size.txt"  ${SIZENUM}  2>/dev/null`
intsize=`echo $size | sed 's/\..*M//g'`
if [ "$format"=="wma" ] || [ "$format"=="mp3" ] ;then
if (("$intsize">=2)) ;then
echo -e "\n获得音乐格式:$format"
echo -e "\n获得文件大小: $size"
break
else
((FORMATNUM+=2))
continue
fi
else
((FORMATNUM+=2))
continue
fi
done

#判断地址的文件SIZE是否<2MBytes
if (("$intsize"<2)) ;then
echo -e "\e[1;6m\e[1;31m 歌曲:${name},所有链接文件大小均<2M,忽略,继续下一首。\e[1;6m\e[00m"
((i++))
FORMATNUM=1
PATHNUM=1
continue
fi

#开始下载音乐
echo
echo "-----------------获得下载链接,开始音乐下载-------------------------"
echo
if (("$FORMATNUM">=3)) ;then
((PATHNUM=${FORMATNUM}-2))
else
PATHNUM=1
fi
link=`awk 'FNR==ARGV[2] {print $1}' "${TMP}/mp3down.txt" "$PATHNUM" 2>/dev/null`
wget -q -O ${TMP}/downpage.html ${link}
iconv -f gbk -t utf8 ${TMP}/downpage.html |\
egrep -i '</b><a href=.*blank>' |\
sed 's/"//g' |\
sed 's/target=.*>//g'  |\
sed 's/<b>.*href=//g' >${TMP}/downpage.txt
downpath=`awk 'FNR==1 {print $1}' ${TMP}/downpage.txt`
wget -c -t "$TRYCOUNT" -T "$TIMEOUT" -O "${SAVE}/${name}.${format}" $downpath

#判断下载后文件大小
zerosize=`du -m ${SAVE}/${name}.${format} | awk 'END {print $1}' | sed 's/\..*//g'`
if (($zerosize<1)) ;then
echo -e "\e[1;6m\e[1;31m 检查下载歌曲:${name},文件大小为1M,删除,继续下一首。\e[1;6m\e[00m"
sudo rm -f ${SAVE}/${name}.${format}
else
echo "--------------------下载成功,开始新下载---------------------------"
fi
FORMATNUM=1
PATHNUM=1
((i++))
done

#删除网页临时文件
sudo rm -f ${TMP}/*.txt ${TMP}/*.html
echo "------------------------下载链接结束-------------------------------"
exit 0

[ 本帖最后由 linuxleio 于 2009-5-29 10:31 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-05-29 09:54 |只看该作者
不好意思,刚漏了2行我补上去了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP