<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,  回復  更多評論
      
    主站蜘蛛池模板: 一级毛片免费观看| 免费国产va在线观看| 99久久99久久精品免费观看 | 午夜高清免费在线观看| 亚洲一卡2卡4卡5卡6卡残暴在线| 最近中文字幕mv免费高清视频8| 亚洲AV无码一区东京热| 特级无码毛片免费视频尤物 | 亚洲av无码不卡久久| 亚洲第一成年免费网站| 亚洲中文字幕无码爆乳app| 成人免费无码大片a毛片软件| 亚洲男同gay片| 亚洲国产精品成人网址天堂| h在线看免费视频网站男男| 亚洲av综合avav中文| 57pao一国产成永久免费| 精品亚洲AV无码一区二区| 日韩在线免费播放| 国产精品成人免费观看| 久久综合日韩亚洲精品色| 国产成人福利免费视频| 亚洲中文无码卡通动漫野外| 一本色道久久88亚洲综合| 99视频在线观看免费| 91嫩草亚洲精品| 国产特级淫片免费看| av永久免费网站在线观看 | 亚洲成人影院在线观看| 久久这里只精品99re免费| 亚洲av永久无码精品三区在线4| 国产高清在线精品免费软件| 二个人看的www免费视频| 亚洲首页在线观看| 免费va在线观看| 57pao一国产成永久免费| 亚洲成av人片在线天堂无| 亚洲精品成人网站在线观看| 在线观看H网址免费入口| 高清免费久久午夜精品| 亚洲国产中文在线视频|