<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-109  評論-187  文章-25  trackbacks-0
    #!/bin/bash
    #Copyright (c) 2005 ubuntu.org.cn
    #License: GPLv2

    #需要安裝編碼轉換器
    #sudo apt-get install recode

    #mp3的地址
    SOURCE="http://list.mp3.baidu.com/list/newhits.html"

    #保存mp3的目錄
    SAVE="${HOME}/mp3100"

    #下載重試次數
    TRYCOUNT=2

    #臨時目錄
    TMP="/tmp/${USER}"

    #創建下載目錄
    if [ ! -d "${SAVE}" ];then
    ? ? mkdir -p "${SAVE}"
    fi

    #創建臨時下載目錄
    if [ ! -d "${TMP}" ];then
    ? ? mkdir -p "${TMP}"
    fi

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

    #轉換網頁編碼
    iconv -f gbk -t utf8 ${TMP}/mp3.html |\

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

    #將mp3list.txt所有開頭的空格去掉
    sed -e 's/ *//' |\

    #將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="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.*FFFFFF">//g' |\

    #刪除</a>..."_blank">
    sed -e 's/<\/a>.*_blank">/-/g' |\
    sed -e 's/<\/a>.*_blank>/-/g' |\

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

    #得到:<a 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="http://g' | sed 's/\ target.*//g' | sed 's/"http://g' | cat`
    ? ?name=`echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' |\
    ? ? ? ? sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g'? | sed -e 's/"/'\''/g'? | cat`
    ?
    ? ?#檢查是否已經下載過這首歌,如果下載過,放棄
    ? ?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 "<td height=\"28\" class=\"d\">" |\
    ? ?sed -e 's/.*<a href="http://g' | sed -e 's/" target=_blank>.*//g' |\
    ? ?sed '/mid/d' > ${TMP}/down.txt

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

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

    ? ?#得到以下形式 (下載地址 文件大小)
    ? ?#http://wma2.7t7t.com/pycs/pycs/311/370247.Wma 1.2
    ? ?#http://snakelmq.hfxyd.com/milk/babybabytellme.mp3 3.2
    ? ?#http://bbsatt2.ccmove.com.cn/download/1280590/baby%20baby%20tell%20me%28PXC%D6%C6%D7%F7%29.mp3 0.3
    ? ?#http://vod.music165.com/music/song/new02/wxl_05.07.29/3.Wma 1.6
    ? ?#http://202.107.247.54/16/0406/94/3.wma 1.6

    ? ?#排序
    ? ?sort "+1nr" ${TMP}/down_size.txt > ${TMP}/down_size_sort.txt

    ? ?#去掉后面的尺寸
    ? ?sed 's/ .*$//' ${TMP}/down_size_sort.txt > ${TMP}/temp.txt
    ? ?
    ? ?##### 析取出mp3 的下載地址或 wma的下載地址 ##############
    ? ?grep -i "mp3$" ${TMP}/temp.txt > ${TMP}/down_mp3.txt
    ? ?grep -i "wma$" ${TMP}/temp.txt > ${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`
    ? ? ? echo -e "\e[1;6m\e[1;31m正在下載${name}.mp3\e[1;6m\e[00m"
    ? ? ? wget -c --tries=$TRYCOUNT $mp3 -O "${TMP}/${name}.mp3"
    ? ? ? if [ "$?" = 0 ]; then
    ? ? ? ? ?if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then
    ? ? ? ? ? ? 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"
    ? ? ? wget -c --tries=$TRYCOUNT $wma -O "${TMP}/${name}.wma"
    ? ? ? if [ "$?" = 0 ]; then
    ? ? ? ? ?if [ `file -ib "${TMP}/${name}.wma" | sed -e 's/\/.*//g'` = "application" ]; then
    ? ? ? ? ? ? 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

    原理是用wget下載下頁面來,然后用SED來提取頁面,提取到連接后下載

    posted on 2006-10-27 15:41 小小程序程序員混口飯吃 閱讀(1160) 評論(1)  編輯  收藏 所屬分類: java

    評論:
    # re: 一段用SHELL編寫自動下載baidu MP3的教本(轉) 2008-04-17 23:57 | zhenhui
    gfhgjyhjkkgkuoli;o.jk,  回復  更多評論
      
    主站蜘蛛池模板: 人妻丰满熟妇无码区免费| 99视频精品全部免费观看| 国产美女无遮挡免费网站| 亚洲偷偷自拍高清| 好吊妞在线新免费视频| 亚洲熟妇无码AV| 国产精品免费电影| 猫咪免费人成在线网站| 亚洲国产高清精品线久久| 一级毛片**免费看试看20分钟| www.91亚洲| 一级做a爱片特黄在线观看免费看| 亚洲国产精品无码久久久久久曰| 午夜成人无码福利免费视频| 亚洲一本大道无码av天堂| 久久性生大片免费观看性| 亚洲国产精品线在线观看| 无码av免费毛片一区二区| 亚洲欧洲免费无码| 亚洲av午夜精品一区二区三区| 中国极品美軳免费观看| 亚洲免费在线视频| 成人免费a级毛片| 免费夜色污私人影院网站| 久久亚洲精品视频| 久久久久久曰本AV免费免费| 亚洲aⅴ无码专区在线观看春色| 亚洲人成色77777在线观看大| 热99RE久久精品这里都是精品免费| 亚洲一区二区影院| 青苹果乐园免费高清在线| 免费又黄又爽又猛大片午夜 | 91精品免费不卡在线观看| 中文字幕亚洲综合久久综合| 亚洲M码 欧洲S码SSS222| 日韩精品在线免费观看| 亚洲日韩乱码中文字幕| 亚洲中文字幕无码久久综合网| 99国产精品永久免费视频| 黄色免费在线网址| 亚洲午夜国产精品无卡|