欢迎
skyaj
加入本站!
免费注册
用户登陆
汇款方式
汇款确认
产品报价
联系我们
帮助中心
加入收藏
设为首页
会员体系
申请VIP
网站首页
光盘超市
软件下载
技术文章
专题
用户中心
VIP会员
技术论坛
网站留言
娱乐中心
卓越资源
今天是:2009年01月07日 星期三 您现在位于:
首页
→
技术文章
→
百度MP3歌曲下载工具(s...
[
完全免费的源代码下载站—卓越源代码
百度MP3歌曲下载工具(shell)
作者:mars_diy 出处:Unix爱好者家园unix-cd.com 更新时间: 2005年09月28日
#!/bin/bash
##############################################
#                                                                                                              #
#                    百度MP3歌曲下载工具                                                           #
#     Reort bugs to  Martian < Martian2008@gmail.com >                        #
#                                                                                                              #
##############################################                                                         
USAGE=
"
`basename $0`:未指定参数
用法: `basename $0` [选项]\n
请尝试使用“`basename $0` -h”查看更多的选项。
"
USAGE2=
"
Getmp3 <martian2008@gmail.com>百度MP3歌曲下载工具
用法: `basename $0` [选项]\n
选项
-a top100|top500  选择下载mp3的分类 
-b 1-max   下载开始曲目数(default 1)
-e 1-max   下载结束曲目数(default max)
-g number   下载指定曲目(id编号)
-m    交互式选择下载镜像点
-o    覆盖已下载文件
-u    更新数据库
-U    更新下载镜像
-l    打印音乐数据列表
-s [strings]  查找歌曲
-S [PATH]   文件另存为
"
M=0
O=0
B=1
E=0
L=0
G=0
U=0
SEARCH=
"
"
LYNX=
"
/usr/bin/lynx
"
WGET=
"
/usr/bin/wget
"
GET_NUM=102
NUM=1
SOURCE1=
"
http://list.mp3.baidu.com/list/newhits.html
"
SOURCE2=
"
http://list.mp3.baidu.com/topso/mp3topsong.html
"
TEMP1=
"
${HOME}/.Getmp3/tmp_mp3_list
"
TEMP2=
"
${HOME}/.Getmp3/tmp_mp3_list2
"
TEMP3=
"
${HOME}/.Getmp3/tmp_mp3_down
"
SAVE1=
"
${HOME}/mp3_new100
"
SAVE2=
"
${HOME}/mp3_top500
"
export LESSCHARSET=latin1
export LC_ALL=zh_CN.gbk
export LANG=zh_CN.gbk
if [ ! -d 
"
${HOME}/.Getmp3
"
 ];then
 mkdir -p 
"
${HOME}/.Getmp3
"
fi
while getopts a:hmuUob:e:lg:s:S:  OPTION;
do
 case 
"
$OPTION
"
 in
  a) S=
"
$OPTARG
"
;
  s) SEARCH=
"
$OPTARG
"
;
  h) echo -e 
"
$USAGE2
"
 
     exit 0;;
  m) M=1;;
       o) O=1;;
       U) U=1;;
       l) L=1;;
  S) if [ -d 
"
$OPTARG
"
 -a -w 
"
$OPTARG
"
 -a -x 
"
$OPTARG
"
 ];then
          SAVE=
"
$OPTARG
"
     else 
       echo -en 
"
\\033[0;31m
"
    echo -e
    echo 
"
指定目录:${OPTARG} 权限不正确或者该目录不存在
"
         echo -en 
"
\\033[0;39m
"
    exit 1;
     fi  
  
  ;
  b)echo 
"
${OPTARG}
"
|grep -qE 
'
^[0-9]*\.?[0-9]*$
'
 && B=
"
${OPTARG}
"
 || B=1 
  ; 
  e)echo 
"
${OPTARG}
"
|grep -qE 
'
^[0-9]*\.?[0-9]*$
'
 && E=
"
${OPTARG}
"
 || E=0 
  ; 
  g)echo 
"
${OPTARG}
"
|grep -qE 
'
^[0-9]*\.?[0-9]*$
'
 && G=
"
${OPTARG}
"
 || G=0 
  ;
         u) rm -rf  
"
${HOME}
"
/.Getmp3/tmp_mp3*
  echo -en 
"
\\033[0;36m
"
     echo 
"
开始下载数据
"
     while [ ! -f 
"
${TEMP1}_top100
"
 ]
     do
      $LYNX -source ${SOURCE1} >
"
${TEMP1}_top100
"
     done
     
     while [ ! -f 
"
${TEMP1}_top500
"
 ]
     do
     $LYNX -source ${SOURCE2} >
"
${TEMP1}_top500
"
        done
cat 
"
${TEMP1}_top500
"
 |grep --after-context=1 
"
<tr bgcolor=\
"
#FFFFFF\
"
><td width=\
"
20%\
"
><font color=\
"
#3333CC\
"
>1.
"
 |\
 sed -e 
'
s/<\/a>/\n/g
'
 -e 
'
s/<\/td>//g
'
 -e 
'
s/<\/tr><tr>//g
'
 -e 
'
s/<\/tr><tr bgcolor=\
"
#FFFFFF\
"
>//g
'
\
     -e 
'
s/<td width=\
"
20%\
"
><font color=\
"
#3333CC\
"
>[0-9]*\.<\/font><a href=\
"
/http:\/\/list.mp3.baidu.com\/topso\//g
'
\
     -e 
'
s/\
"
 target=_blank>/ /g
'
 -e  
'
/^$/d
'
|sed  -e 
'
/<td/d
'
  >
"
${TEMP2}_top500
"
     
 while [ ${GET_NUM} -gt  0 ] 
 do
 cat  
"
${TEMP1}_top100
"
 |grep --after-context=1 
"
<div align=\
"
center\
"
><font color=\
"
#3333CC\
"
>${NUM}.</font>
"
 | \
 grep --after-context=1 
"
a href
"
 |sed 
'
s/^$//
'
| sed  -e 
'
s/<[^>][^>]*>//
'
 -e 
'
s/<\/td>//
'
 -e 
'
s/^ *//
'
| \
 sed -e 
'
s/<a href=
"
//g
'
 -e  
'
s/
"
 target=
"
_blank
"
>/ /g
'
  -e 
'
s/<\/a>*/ /g
'
   >> 
"
${TEMP2}_top100
"
 NUM=$((${NUM}+1))
 GET_NUM=$((${GET_NUM}-1))
 done
     echo 数据更新完毕
     echo -en 
"
\\033[0;39m
"
     exit 0 
     ;
     \?) echo -e 
"
$USAGE
"
       exit 1;;
 esac
done
if [ 
"
$#
"
 -eq 0 ] then
 echo -e 
"
${USAGE}
"
 exit 1
fi
case 
"
${S}
"
 in
 top100) SOURCE=
"
${SOURCE1}
"
 
  : ${SAVE:=${SAVE1}}
  ;
 top500) SOURCE=
"
${SOURCE2}
"
 
  : ${SAVE:=${SAVE2}}
  ;
esac
if [ -z 
"
$SOURCE
"
  ] then
        echo -e 
"
${USAGE}
"
        exit 1
fi
TEMP1=${TEMP1}_${S}
TEMP2=${TEMP2}_${S}
TEMP3=${TEMP3}_${S}
if [ ! -d 
"
${SAVE}
"
 ];then
 echo -en 
"
\\033[0;36m
"
 echo 
"
创建目录
"
 echo -en 
"
\\033[0;39m
"
 mkdir -p ${SAVE}
fi
clear
echo -e
echo -en 
"
\\033[0;36m
"
echo 
"
正在下载/分析数据
"
echo -en 
"
\\033[0;39m
"
#rm -rf ${TEMP1}
while [ ! -f ${TEMP1} ]
do
${LYNX} -source ${SOURCE} >${TEMP1}
done
#rm -rf ${TEMP2}
if [ 
"
${S}
"
 = 
"
top500
"
 ]; then
while [ ! -f 
"
${TEMP2}
"
 ]
do
cat ${TEMP1} |grep --after-context=1 
"
<tr bgcolor=\
"
#FFFFFF\
"
><td width=\
"
20%\
"
><font color=\
"
#3333CC\
"
>1.
"
 |\
 sed -e 
'
s/<\/a>/\n/g
'
 -e 
'
s/<\/td>//g
'
 -e 
'
s/<\/tr><tr>//g
'
 -e 
'
s/<\/tr><tr bgcolor=\
"
#FFFFFF\
"
>//g
'
\
     -e 
'
s/<td width=\
"
20%\
"
><font color=\
"
#3333CC\
"
>[0-9]*\.<\/font><a href=\
"
/http:\/\/list.mp3.baidu.com\/topso\//g
'
\
     -e 
'
s/\
"
 target=_blank>/ /g
'
 -e  
'
/^$/d
'
|sed  -e 
'
/<td/d
'
  >${TEMP2} 
done
elif   [ 
"
${S}
"
 = 
"
top100
"
 ]; then
      while [ ! -f 
"
${TEMP2}
"
 ]
 do
 while [ ${GET_NUM} -gt  0 ] 
 do
 cat  ${TEMP1} |grep --after-context=1 
"
<div align=\
"
center\
"
><font color=\
"
#3333CC\
"
>${NUM}.</font>
"
 | \
 grep --after-context=1 
"
a href
"
 |sed 
'
s/^$//
'
| sed  -e 
'
s/<[^>][^>]*>//
'
 -e 
'
s/<\/td>//
'
 -e 
'
s/^ *//
'
| \
 sed -e 
'
s/<a href=
"
//g
'
 -e  
'
s/
"
 target=
"
_blank
"
>/ /g
'
  -e 
'
s/<\/a>*/ /g
'
   >> ${TEMP2}
 NUM=$((${NUM}+1))
 GET_NUM=$((${GET_NUM}-1))
 done
     done
fi
unset NUM
: ${NUM:=${B}}
if [ 
"
${G}
"
  -gt 0 ];then
 NUM=
"
${G}
"
 E=
"
${G}
"
fi 
while [ -n 
"
`cat ${TEMP2} |sed  -n 
"
${NUM}p
"
`
"
 ]
do
 if [ 
"
${E}
"
 -gt 0  -a 
"
${NUM}
"
 -gt 
"
${E}
"
 ] then
  if [ 
"
${L}
"
 -eq 1 -o  -n 
"
${SEARCH}
"
 ];then
   echo -e 
"
${LIST}
"
 |less  
  fi 
  exit 0
 fi
 PRE=`cat ${TEMP2} |sed  -n 
"
${NUM}p
"
`
 PRE=(`echo $PRE`)
  if [ -n 
"
${PRE[0]}
"
 -a  -n 
"
${PRE[1]}
"
 ];then
  if [ -n 
"
${PRE[3]}
"
 ] then
   MP3=${PRE[3]}-${PRE[1]}
  else
   MP3=${PRE[1]}
  fi
 MP3=`echo ${MP3} |sed  
'
s/\//_/g
'
`  
 if [ 
"
${L}
"
 -eq 1 -o  -n 
"
${SEARCH}
"
  ];then
  if [ -n 
"
${SEARCH}
"
 ];then
   SEARCH2=` echo  
"
${NUM} .${MP3}
"
 |grep 
"
${SEARCH}
"
`
   if [ -n 
"
${SEARCH2}
"
 ];then
    LIST=
"
${LIST}\n ${SEARCH2}
"
   fi
   unset SEARCH2
   NUM=$((${NUM}+1))
   continue
  fi
  LIST=
"
${LIST}\n ${NUM}. ${MP3}
"
  NUM=$((${NUM}+1))
  continue
 fi
  
 echo -en 
"
\\033[0;36m
"
 echo 
"
正在处理数据 ${NUM}. ${MP3}
"
 echo -en 
"
\\033[0;39m
"
 if [ 
"
${U}
"
 -eq 1 ];then
  rm -rf  
"
${TEMP3}_${NUM}
"
 fi
 while [ ! -f 
"
${TEMP3}_${NUM}
"
 -o ! -s 
"
${TEMP3}_${NUM}
"
 ]
 do
 ${LYNX} -source 
"
${PRE[0]}
"
 > 
"
${TEMP3}_${NUM}
"
 
 cat 
"
${TEMP3}_${NUM}
"
 |grep --before-context=0  --after-context=1 
"
<td class=r1>
"
 | \
 sed -e 
'
/<\/
script
>*/d
'
 -e 
'
/--/d
'
| \
        sed -e 
'
s/<font[^>][^>].*//g
'
 -e 
'
s/
"
 target=.*//g
'
 -e 
'
s/^.*<a href=
"
//g
'
 >
"
${TEMP3}_${NUM}
"
 done 
 
 NUM2=1
 
 echo -en 
"
\\033[0;34m
"
 echo 
"
该文件目前有`cat 
"
${TEMP3}_${NUM}
"
 |wc -l`个下载镜像
"
 echo -en 
"
\\033[0;39m
"
 #交互式下载
 if [ 
"
${M}
"
 -eq 1 ];then
  NUM3=1
  SELECT=
"
"
  while [ -n 
"
`cat 
"
${TEMP3}_${NUM}
"
 |sed  -n 
"
${NUM3}p
"
`
"
 ]
  do
    SELECT=${SELECT}
"
`cat 
"
${TEMP3}_${NUM}
"
 |sed  -n 
"
${NUM3}p
"
` 
"
    NUM3=$((${NUM3}+1))
  done
  echo -en 
"
\\033[0;33m
"
  echo 
"
请选择下载镜像
"
  echo -en 
"
\\033[0;39m
"
  select COMPONENT in $SELECT
  do
   if [ -z 
"
${COMPONENT}
"
 ];then
          echo 
"
该镜像地址不存在
"
 
          echo -en 
"
\\033[0;33m
"
          echo 
"
请选择下载镜像 按回车继续
"
                        echo -en 
"
\\033[0;39m
"
          continue
         else
     echo -en 
"
\\033[0;36m
"
     echo 
"
开始从镜像站点${REPLY}下载载歌曲 ${NUM}.  ${MP3}
"
      echo -en 
"
\\033[0;33m
"
     echo 
"
文件保存在${SAVE}
"
     echo -en 
"
\\033[0;39m
"
    
    TYPE=`basename ${COMPONENT} |awk -F. 
'
{print $2}
'
`
    if [ 
"
${O}
"
 -eq 1 ];then
          rm -rf 
"
${SAVE}/${MP3}.${TYPE}
"
          fi                            
   fi
                  
    if [ -f 
"
${SAVE}/${MP3}.${TYPE}
"
 ];then
     echo -en 
"
\\033[0;31m
"
     echo 
"
文件已存在,下载中止
"
     echo -e
     echo -en 
"
\\033[0;39m
"
     unset  TYPE
     break
    fi
    ${WGET} -t 1 -N  -O ${SAVE}/${MP3}.${TYPE} ${COMPONENT} 
           ret=$?
           if [ $ret -eq 0 ]; then
     unset TYPE
     break
    else
     rm -rf ${SAVE}/${MP3}.${TYPE}
     echo -en 
"
\\033[0;31m
"
     echo 
"
下载失败!
"
     echo -e
     echo -en 
"
\\033[0;39m
"
            echo -en 
"
\\033[0;33m
"
            echo 
"
请选择下载镜像 按回车继续
"
                          echo -en 
"
\\033[0;39m
"
     unset TYPE
     continue
    fi
         
  done
 else         
 
 while [ -n 
"
`cat 
"
${TEMP3}_${NUM}
"
 |sed  -n 
"
${NUM2}p
"
`
"
 ]
 do
  URL=`cat 
"
${TEMP3}_${NUM}
"
|sed  -n 
"
${NUM2}p
"
`
  TYPE=`basename ${URL} |awk -F. 
'
{print $2}
'
`
  echo -en 
"
\\033[0;36m
"
  echo 
"
开始下载歌曲 ${NUM}.  ${MP3}
"
 
  echo -en 
"
\\033[0;33m
"
  echo 
"
文件保存在${SAVE}
"
  echo -en 
"
\\033[0;39m
"
  if [ 
"
${O}
"
 -eq 1 ];then
   rm -rf 
"
${SAVE}/${MP3}.${TYPE}
"
  fi
  if [ -f 
"
${SAVE}/${MP3}.${TYPE}
"
 ];then
   echo -en 
"
\\033[0;31m
"
   echo 
"
文件已存在,下载中止
"
   echo -e
   echo -en 
"
\\033[0;39m
"
   unset URL TYPE
   break
  fi
  ${WGET} -t 1 -N  -O ${SAVE}/${MP3}.${TYPE} ${URL} 
         ret=$?
         if [ $ret -eq 0 ]; then
   unset URL TYPE
   break
  else
   rm -rf ${SAVE}/${MP3}.${TYPE}
   echo -en 
"
\\033[0;31m
"
   echo 
"
下载失败!
"
   echo -e
   echo -en 
"
\\033[0;39m
"
   unset URL TYPE
  fi
   NUM2=$((${NUM2}+1))
  done
    fi
    
 fi
 NUM=$((${NUM}+1))
 unset PRE MP3
done 
if [ 
"
${L}
"
 -eq 1 -o -n 
"
${SEARCH}
"
 ];then
        echo -e 
"
${LIST}
"
 |less 
fi 
(本文已被浏览 3403 次)
发布人:
sdccf
→ 推荐给我的好友
上篇文章:
一个删除无效连接的脚本
下篇文章:
sed学习笔记
相关文章:
没有相关文章
相关搜索
查看百度中关于
百度MP3歌曲下载工具(shell)
的更多内容
查看google中关于
百度MP3歌曲下载工具(shell)
的更多内容
文章分类
|
操作系统
|
SCO_UNIX
Sun_Solaris
IBM_AIX
HP_UX
Linux
BSD
Tru64_UNIX
通用UNIX知识
Windows
Minix
|
程序设计
|
Shell编程
C/C++
汇编
PHP
JAVA
Perl
Python
ASP/HTML
XML
中间件
|
数据库
|
Oracle
Informix
Sybase
Fox
DB2
SQL
MySQL
PostgreSQL
|
网络应用
|
网络应用
|
计算机硬件
|
计算机主机
打印机
路由器
交换机
终端
磁带机
MO
刻录机
终端服务器
调制解调器
文章评论
→
评论内容
(点击查看)
共
1
条评论,每页显示
5
条评论
浏览所有评论
2007-06-04
xh
评:
谁能解释解释这源代码啊
→
发表我的评论
您的姓名:
您的Email:
评论内容:
250字内
发表评论:
发表评论须知 →
尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
本站有权保留或删除您发表的任何评论内容;
关于我们
┋
网站留言
┋
网站地图
┋
友情链接
┋
与我在线
┋
汇款确认
┋
管理
┋
TOP
Unix爱好者家园
http://www.unix-cd.com/
联系我们:sdccf@163.com
腾讯QQ: 7644599
备案序号:鲁ICP备05000455号
Copyright (c) 2001-2008 Unix-cd.com. All Rights Reserved.