Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103682669
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 22:50:10

作者:mars_diy   
#!/bin/bash
##############################################
#                                                                                                              #
#                    百度MP3歌曲下载工具                                                           #
#     Reort bugs to  Martian < Martian2008@gmail.com >                        #
#                                                                                                              #
##############################################                                                         

USAGE="`basename $0`:未指定参数
用法: `basename $0` [选项]\n
请尝试使用“`basename $0` -h”查看更多的选项。"
USAGE2="Getmp3 ?百度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=""
SOURCE2=""
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 ""#FFFFFF\">"20%\">"#3333CC\">1." |\
 sed -e 's/<\/a>/\n/g' -e 's/<\/td>//g' -e 's/<\/tr>
//g' -e 's/<\/tr>"#FFFFFF\">//g'\
     -e 's/"20%\">"#3333CC\">[0-9]*\.<\/font>"/http:\/\/list.mp3.baidu.com\/topso\//g'\
     -e 's/\" target=_blank>/ /g' -e  '/^$/d'|sed  -e '/
//g' -e 's/<\/tr>"#FFFFFF\">//g'\
     -e 's/"20%\">"#3333CC\">[0-9]*\.<\/font>"/http:\/\/list.mp3.baidu.com\/topso\//g'\
     -e 's/\" target=_blank>/ /g' -e  '/^$/d'|sed  -e '/
'  >"${TEMP2}_top500"
     
 while [ ${GET_NUM} -gt  0 ] 
 do
 cat  "${TEMP1}_top100" |grep --after-context=1 ""center\">"#3333CC\">${NUM}." | \
 grep --after-context=1 "a href" |sed 's/^$//'| sed  -e 's/<[^>][^>]*>//' -e 's/<\/td>//' -e 's/^ *//'| \
 sed -e 's/"//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 ""#FFFFFF\">"20%\">"#3333CC\">1." |\
 sed -e 's/<\/a>/\n/g' -e 's/<\/td>//g' -e 's/<\/tr>
'  >${TEMP2} 
done
elif   [ "${S}" = "top100" ]; then
      while [ ! -f "${TEMP2}" ]
 do
 while [ ${GET_NUM} -gt  0 ] 
 do
 cat  ${TEMP1} |grep --after-context=1 ""center\">"#3333CC\">${NUM}." | \
 grep --after-context=1 "a href" |sed 's/^$//'| sed  -e 's/<[^>][^>]*>//' -e 's/<\/td>//' -e 's/^ *//'| \
 sed -e 's/"//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 "" | \
 sed -e '/<\/script>*/d' -e '/--/d'| \
        sed -e 's/][^>].*//g' -e 's/" target=.*//g' -e 's/^.*"//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 

阅读(556) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~