文本内批量搜索?
时间:2011-07-21
来源:互联网
很长时间没听歌,最近心血来潮打算听听,发现以前听歌最佳伴侣--lrcdis(感谢几位大牛贡献)不好用了,貌似是网站版式更新了下载不到歌词?具体不记得了。
gnome-osd显示歌词一直很喜欢,可是它在我电脑上用不了。
gnome-osd挂了,意味着以前用过的osd-lyrics也不能用了,没有跟MPD配套的歌词显示插件,搜也没搜到好用的脚本,自己拿shell整了一个,终端显示,凑活用着。
大概效果就是这样了,比较土,本人菜鸟,欢迎拍砖
2011-07-21-22-49-00.png [ 118.79 KiB | 被浏览 6 次 ]
gnome-osd显示歌词一直很喜欢,可是它在我电脑上用不了。
gnome-osd挂了,意味着以前用过的osd-lyrics也不能用了,没有跟MPD配套的歌词显示插件,搜也没搜到好用的脚本,自己拿shell整了一个,终端显示,凑活用着。
代码:
[liwei@myhost ~] $ >>_ cat bin/mpdlyric
#!/bin/bash
# Show lyric when playing music with mpd
# 2011/07/17
# wiewi,[email protected]
# Download function!! # Finished on July 20,Wednesday
# Lyric dir
LYRIC=$HOME/.lyrics
# Temp files
SEARCH=$HOME/tmp/search
# Notify timeout
TIMEOUT=1000
# Player Status
STATUS=$(mpc status| sed -n '2p' | awk '{print $1}' | sed 's/[^a-zA-Z]//g')
GetInfo(){
# Song info
SONG=$(mpc --format %title% | sed -n '1p')
ARTIST=$(mpc --format %artist% | sed -n '1p')
NAME=$(echo $SONG | sed "s/$ARTIST//" | sed 's/\-//g'|sed 's/(.*)//g')
# LRC file
FILE=$LYRIC/`echo $NAME | tr -d ' '`.lrc
}
Download(){
# 从gougou搜索歌词文件并下载
#gougou will lead to the site used below
GetInfo;
PERIOD=''
[ -f "$SEARCH" ] && rm -f $SEARCH
# “歌曲名 歌手” 搜索 管道写法参考lrcdis脚本
wget -c -T 10 "http://www.lrc123.com/?keyword=$NAME $ARTIST&" -O $SEARCH > /dev/null 2>&1 | iconv -f GBK
URL=`cat $SEARCH | grep -B1 '下载' | grep color | sed -n '1p'| sed 's/<[^>]*>//g' | tr -d ' '|sed 's/\\r//'`
# 第一种方式搜索不到,使用“歌曲名” 搜索
if [ -z "$URL" ];then
wget -c -T 10 "http://www.lrc123.com/?keyword=$NAME&" -O $SEARCH > /dev/null 2>&1 | iconv -f GBK
fi
URL=`cat $SEARCH | grep -B1 '下载' | grep color | sed -n '1p'| sed 's/<[^>]*>//g' | tr -d ' '|sed 's/\\r//'`
if [ -z "$URL" ];then
# 两种方式都搜索不到
echo "LRC not found!" # && exit 1
SONG_PREV=$(mpc --format %title% | sed -n '1p')
Wait;
else
# 有搜索结果,那么下载歌词文件
wget -c -T 10 $URL -O "$FILE" > /dev/null 2>&1| iconv -f GBK
fi
}
Wait(){
# 对于下载不到歌词的曲目,每隔1秒重新读取播放器信息,一旦切换到下首,则重新尝试Download歌词
while :
do
sleep 1
SONG=$(mpc --format %title% | sed -n '1p')
if [ "$SONG_PREV" != "$SONG" ];then
SONG_PREV=$SONG
Download;
ShowLyric;
fi
done
}
ShowLyric(){
# [ -f "$FILE" ] || Download;
#eval "$CMD" "\n$NAME - $ARTIST\n"
echo -e "\n$NAME - $ARTIST\n"
notify-send "$NAME - $ARTIST"
while :
do
if [ ! "`file $FILE | grep -i utf-8`" ];then
iconv -f GBK -t UTF-8 $FILE -o $FILE
fi
TIME=$(mpc status | grep '/' | awk -F '/' '{print $2}' | awk '{print $2}')
TEXT=$(cat "$FILE" | grep $TIME | sed 's/\[[^]]*]//g')
CURRENT=$(mpc current)
if [ -z "$PREV" -o "$CURRENT" = "$PREV" ];then
PREV=$CURRENT
# 换到下一句歌词
if [ -n "$TEXT" -a "$TEXT" != "$TEXT_PREV" ];then
# Notify 方式还没完善
# notify-send -t $TIMEOUT -- "$TEXT"
sleep 0.5
eval "$CMD"
TEXT_PREV="$TEXT"
fi
# 歌曲切换
else
PREV=''
GetInfo
# eval "$CMD" "\n$NAME - $ARTIST\n"
echo -e "\n$NAME - $ARTIST\n"
notify-send "$NAME - $ARTIST"
[ -f "$FILE" ] || Download;
continue
fi
sleep 0.3
done
}
case $1 in
-n) CMD='notify-send -t $TIMEOUT -- $TEXT'
;;
*) CMD='echo $TEXT'
;;
esac
while :
do
case $STATUS in
playing) GetInfo
[ -f "$FILE" ] || Download;
ShowLyric;;
*) echo "MPD not running!" && exit 1;;
esac
done
#!/bin/bash
# Show lyric when playing music with mpd
# 2011/07/17
# wiewi,[email protected]
# Download function!! # Finished on July 20,Wednesday
# Lyric dir
LYRIC=$HOME/.lyrics
# Temp files
SEARCH=$HOME/tmp/search
# Notify timeout
TIMEOUT=1000
# Player Status
STATUS=$(mpc status| sed -n '2p' | awk '{print $1}' | sed 's/[^a-zA-Z]//g')
GetInfo(){
# Song info
SONG=$(mpc --format %title% | sed -n '1p')
ARTIST=$(mpc --format %artist% | sed -n '1p')
NAME=$(echo $SONG | sed "s/$ARTIST//" | sed 's/\-//g'|sed 's/(.*)//g')
# LRC file
FILE=$LYRIC/`echo $NAME | tr -d ' '`.lrc
}
Download(){
# 从gougou搜索歌词文件并下载
#gougou will lead to the site used below
GetInfo;
PERIOD=''
[ -f "$SEARCH" ] && rm -f $SEARCH
# “歌曲名 歌手” 搜索 管道写法参考lrcdis脚本
wget -c -T 10 "http://www.lrc123.com/?keyword=$NAME $ARTIST&" -O $SEARCH > /dev/null 2>&1 | iconv -f GBK
URL=`cat $SEARCH | grep -B1 '下载' | grep color | sed -n '1p'| sed 's/<[^>]*>//g' | tr -d ' '|sed 's/\\r//'`
# 第一种方式搜索不到,使用“歌曲名” 搜索
if [ -z "$URL" ];then
wget -c -T 10 "http://www.lrc123.com/?keyword=$NAME&" -O $SEARCH > /dev/null 2>&1 | iconv -f GBK
fi
URL=`cat $SEARCH | grep -B1 '下载' | grep color | sed -n '1p'| sed 's/<[^>]*>//g' | tr -d ' '|sed 's/\\r//'`
if [ -z "$URL" ];then
# 两种方式都搜索不到
echo "LRC not found!" # && exit 1
SONG_PREV=$(mpc --format %title% | sed -n '1p')
Wait;
else
# 有搜索结果,那么下载歌词文件
wget -c -T 10 $URL -O "$FILE" > /dev/null 2>&1| iconv -f GBK
fi
}
Wait(){
# 对于下载不到歌词的曲目,每隔1秒重新读取播放器信息,一旦切换到下首,则重新尝试Download歌词
while :
do
sleep 1
SONG=$(mpc --format %title% | sed -n '1p')
if [ "$SONG_PREV" != "$SONG" ];then
SONG_PREV=$SONG
Download;
ShowLyric;
fi
done
}
ShowLyric(){
# [ -f "$FILE" ] || Download;
#eval "$CMD" "\n$NAME - $ARTIST\n"
echo -e "\n$NAME - $ARTIST\n"
notify-send "$NAME - $ARTIST"
while :
do
if [ ! "`file $FILE | grep -i utf-8`" ];then
iconv -f GBK -t UTF-8 $FILE -o $FILE
fi
TIME=$(mpc status | grep '/' | awk -F '/' '{print $2}' | awk '{print $2}')
TEXT=$(cat "$FILE" | grep $TIME | sed 's/\[[^]]*]//g')
CURRENT=$(mpc current)
if [ -z "$PREV" -o "$CURRENT" = "$PREV" ];then
PREV=$CURRENT
# 换到下一句歌词
if [ -n "$TEXT" -a "$TEXT" != "$TEXT_PREV" ];then
# Notify 方式还没完善
# notify-send -t $TIMEOUT -- "$TEXT"
sleep 0.5
eval "$CMD"
TEXT_PREV="$TEXT"
fi
# 歌曲切换
else
PREV=''
GetInfo
# eval "$CMD" "\n$NAME - $ARTIST\n"
echo -e "\n$NAME - $ARTIST\n"
notify-send "$NAME - $ARTIST"
[ -f "$FILE" ] || Download;
continue
fi
sleep 0.3
done
}
case $1 in
-n) CMD='notify-send -t $TIMEOUT -- $TEXT'
;;
*) CMD='echo $TEXT'
;;
esac
while :
do
case $STATUS in
playing) GetInfo
[ -f "$FILE" ] || Download;
ShowLyric;;
*) echo "MPD not running!" && exit 1;;
esac
done
大概效果就是这样了,比较土,本人菜鸟,欢迎拍砖
附件:
2011-07-21-22-49-00.png [ 118.79 KiB | 被浏览 6 次 ]
作者: wiewi 发布时间: 2011-07-21
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28