- 论坛徽章:
- 0
|
google_music.rar
(1.93 KB, 下载次数: 31)
网上找到的(脚本应用没有问题),但我运行了下发现有问题,改了下未果。特贴上来请大家帮忙一起看看。
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 729040 2009-03-02 22:22 /bin/bash
$ whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
也改成#!/bin/bash,但是依然不行。
这是个通过google音乐查找歌曲并播放的脚本。
- #!/bin/sh
- LANG="en.UTF-8"
- DOWNLOAD_TMP="/tmp/google_music_download"
- MUSIC_DATA="/tmp/google_music_data"
- CURRENT_PAGE=1
- MAX_PAGE=0
- KEYWORDS=""
- WGET_AGENT="Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5"
- COLOR="/tmp/google_music_color"
- echo '40;31' > $COLOR
- echo '40;33' >> $COLOR
- echo '40;32' >> $COLOR
- get_color()
- {
- head -1 $COLOR
- sed -i -e '1{h;d};$G' $COLOR
- }
- search_music()
- {
- if [ -f "$MUSIC_DATA$CURRENT_PAGE" ];then
- return "1"
- fi
- echo "loading...."
- keyword=`echo ${KEYWORDS} | uni2ascii -a J -q`
- page=`expr $CURRENT_PAGE - 1`
- page=`expr $page \* 20`
- wget -q --user-agent="$WGET_AGENT" "http://www.google.cn/music/search?q=${keyword}&cat=song&start=${page}" -O "$DOWNLOAD_TMP$CURRENT_PAGE"
- cat $DOWNLOAD_TMP$CURRENT_PAGE | sed -n -e "/class=\"SongItem/,/<\/tr>/p" | awk 'BEGIN{ORS="";spl="\t"}\
- /class=\"Title/{print gensub(/.*>([^>]*)<\/a>.*/,"\\1",1);}\
- /class=\"Artist/{getline;print spl gensub(/.*>([^>]*)<\/a>.*/,"\\1",1);}\
- /class=\"Album/{print spl gensub(/.*>([^>]*)<\/a>.*/,"\\1",1);}\
- /下载\" oncontex/{print spl gensub(/.*open\(\"(.*)\".*/,"\\1",1);print "\n";}' | ascii2uni -a D -q | ascii2uni -a 7 -q | sed -e 's/<\/\?b>//g' > "$MUSIC_DATA$CURRENT_PAGE"
- }
- has_next_page()
- {
- grep "<td class=\"next\">" $DOWNLOAD_TMP$CURRENT_PAGE
- }
- rm_data()
- {
- rm -f ${DOWNLOAD_TMP}*
- rm -f ${MUSIC_DATA}*
- }
- end()
- {
- rm_data
- rm -f $COLOR
- }
- show_menu()
- {
- echo -e "\033[2J"
-
- cat "$MUSIC_DATA$CURRENT_PAGE" | awk 'BEGIN{ORS="";FS="\t";print "序号\t曲名\t歌手\t专辑\n";}\
- {printf("%d)\t%-30s\t%-20s\t%-20s\n",NR,$1,$2,$3);}' > /tmp/google_music_menu
- echo "$KEYWORDS" | sed -e "s/\+/\n/g" | while read line
- do
- color=`get_color`
- sed -i -e "s/\(${line}\)/\\\\\\\033[${color}m\1\\\\\\\033[0m/g" "/tmp/google_music_menu"
- done
- cat /tmp/google_music_menu | xargs -i echo -e {}
- rm -f /tmp/google_music_menu
- echo ""
- echo "关键词:${KEYWORDS} 当前页:$CURRENT_PAGE"
- echo -n "[num]播放对应序号的曲目 "
- if [ ! "$CURRENT_PAGE" -eq "1" ];then
- echo -n "[p]向上翻页 "
- fi
- if [ -n "`has_next_page`" ];then
- echo -n "[n]向后翻页 "
- fi
- echo -n "[c]更换关键词 "
- echo -n "[r]刷新 "
- echo "[q]退出 "
- }
- set_keywords()
- {
- KEYWORDS=`echo "$1"|sed -e "s/ /\+/g"`
- rm_data
- refresh_all
- }
- refresh_all()
- {
- search_music
- show_menu
- }
- next_page()
- {
- if [ ! -n "`has_next_page`" ];then
- echo "木有下一页了.."
- return "1"
- fi
- CURRENT_PAGE=`expr ${CURRENT_PAGE} + 1`
- refresh_all
- }
- pre_page()
- {
- if [ "$CURRENT_PAGE" -eq "1" ];then
- echo "木有上一页了.."
- return "1"
- fi
- CURRENT_PAGE=`expr ${CURRENT_PAGE} - 1`
- echo "$CURRENT_PAGE}"
- refresh_all
- }
- get_download_url()
- {
- tmp="/tmp/google_music_get_durl"
- url=`echo $1 | sed -e "s/&/\&/g"`
- wget "http://www.google.cn${url}" --spider -o $tmp --user-agent="$WGET_AGENT"
- durl=`cat $tmp | grep "Location:" | sed -e "s/.*id=\(.*\) \[following\].*/\1/" -e "s/&/\&/g"`
- durl="http://www.google.cn/music/top100/musicdownload?id=${durl}"
- wget -q "$durl" -O $tmp --user-agent="$WGET_AGENT"
- durl=`cat $tmp | grep "/music/top100/url" | sed -e "s/.*href=\"\([^\"]*\)\".*/\1/" -e "s/&/\&/g"`
- durl="http://www.google.cn${durl}"
- wget "$durl" --spider -o $tmp --user-agent="$WGET_AGENT"
- durl=`cat $tmp | grep "Location:" | tail -1 | sed -e "s/.*Location: \(.*\) \[following\].*/\1/"`
- rm -f $tmp
- echo $durl
- }
- play()
- {
- line=$1
- url=`cat "$MUSIC_DATA$CURRENT_PAGE" | awk "BEGIN{ORS=\"\";FS=\"\\t\"}{if(FNR==${line}){print \\\$4}}"`
- url=`get_download_url $url`
- if [ -n "`which rhythmbox`" ];then
- rhythmbox-client --play-uri=$url
- rhythmbox-client --play --enqueue "$url"
- else
- echo "下载地址:"
- echo "$url"
- fi
- }
- main_loop()
- {
- while [ "s"="s" ];do
- read -p "cmd:" ac
- if [ ! -n "`echo \"$ac\" | sed -e \"s/[0-9]//g\"`" ];then
- play "$ac"
- else
- case "$ac" in
- "n")
- next_page
- ;;
- "p")
- pre_page
- ;;
- "r")
- refresh_all
- ;;
- "c")
- read -p "keywords(eg:周杰伦+夜曲):" key
- if [ -n "$key" ];then
- set_keywords "$key"
- fi
- ;;
- "q")
- end
- exit
- esac
- fi
- done
- }
- if [ ! -n "`which ascii2uni`" ];then
- echo "必须安装uni2ascii软件包:sudo apt-get install uni2ascii"
- exit
- fi
- if [ ! -n "$1" ];then
- exit
- fi
- set_keywords "$1"
- main_loop
复制代码
[ 本帖最后由 alenbull 于 2009-9-16 21:20 编辑 ] |
|