当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 利用dict.cn api的在线查询脚本,可以通过notify-send输出,支持声音,不需要w3m
帖子发表于 : 2010-12-20 23:17 
头像

注册: 2005-08-14 19:53
帖子: 4002
送出感谢: 1
接收感谢: 2
arch上没有安装w3m,也不想安装这个东西,会在家目录生成个配置文件夹,不喜欢家目录太乱,而stardict的命令行实现这点功能有些不值,因此花了点时间写了这个,写bash不是很熟悉,大家提提意见。考虑加个缓存机制,不过并不是很必要,因此没有实现。

[bash]
#!/bin/bash
help(){
echo -e "Usage: $0 [OPTIONS] STRING"
echo -e " OPTINOS:"
echo -e " -h: Show this help."
echo -e " -n: Use notify-send, use standard output by default."
echo -e " -s: Enalbe sound, use mplayer to play."
echo -e ""
}
error1(){
echo "No word attached!"
help
exit 0
}

[ -z "$1" ] && help && exit 1

for i in $@; do
if [ "x$i" != "x${i#-}" ]; then
[ "x$i" == "x-n" ] && NOTIFY=1
[ "x$i" == "x-h" ] && HELP=1
[ "x$i" == "x--help" ] && HELP=1
[ "x$i" == "x-s" ] && SOUND=1
else
WORD=$i
fi
done

[ "$HELP" == "1" ] && help && exit 1
[ -z "$WORD" ] && [ "x$NOTIFY" != "x1" ] && error1
[ -z "$WORD" ] && [ "x$NOTIFY" == "x1" ] && WORD=$(xsel)

WEBAPI="http://dict.cn/ws.php?utf8=true&q="
TMPFILE=/tmp/dict.tmp

wget "$WEBAPI""$WORD" -O $TMPFILE &> /dev/null
cache=$(cat $TMPFILE | sed '/^<?.*/d;/dict>$/d')
while IFS='<>' read _ starttag value endtag; do
case "$starttag" in
key) key+=("$value") ;;
lang) lang+=("$value");;
audio) audio+=("$value");;
pron) pron+=("$value");;
esac
done < $TMPFILE

if [ -n "$key" ]; then
if echo $pron | grep "&#" >/dev/null; then
pron=$(echo $pron | sed 's/&#658;/ʒ/g;s/&#652/ʌ/g;s/&#643;/ʃ/g;s/&#603;/ɜ/g;s/&#601;/ə/g;s/&#596;/ɔ/g;s/&#593;/ɑ/g;s/&#331;/ŋ/g;s/&#240;/ð/g;s/&#230;/æ/g')
fi

sent=$(echo "$cache" | grep '<sent>' | sed 's/<sent>//g;s/<\/sent>//g;s/<orig>//g;s/<\/orig>//g;s/<trans>//g;s/<\/trans>//g;s/&lt;em&gt;//g;s/&lt;\/em&gt;//g')
#FIXME
cache1=$(echo "$cache" | sed -n '/<sent>/,/<\/sent>/!p')
def=$(echo "$cache1" | sed '/<def>/,/<\/def>/!d;s/<def>//;s/<\/def>//')
else
sugg=$(echo "$cache" | sed 's/<sugg>//g;s/<\/sugg>//g')
fi

if [ "x$NOTIFY" == "x1" ];then
[ -n "$key" ] && notify-send -i accessories-dictionary "$key" "[$pron]\n$def"
[ -z "$key" ] && notify-send -i dialog-warning "$WORD" "未找到!"
else
echo ""
if [ -n "$key" ]; then echo "======== $key ========"; else echo "$WORD Not found!"; fi
[ -n "$pron" ] && echo "[$pron]"
[ -n "$def" ] && echo "$def"
[ -n "$sent" ] && echo -e "\n$sent"
[ -n "$sugg" ] && echo "Maybe you mean:" $sugg
echo ""
fi
[ "x$SOUND" == "x1" ] && [ -n "$audio" ] && mplayer -really-quiet $audio &>/dev/null
[/bash]

效果:
代码:
$./dict.sh game
========  game  ========
[geim]
n.游戏, 运动会, 比赛
v.赌博

Who'll climb up to get it?' I'm game (to try).'`谁愿意爬上去把它拿下来?'`我来(试试).'
John only pretends to do his share of the work; he's just not playing the game.约翰只是装成做他那份工作,实际上并不真心好好干。
The little boy was shocked by the fall, but he was game enough to get up and try again.这个小男孩因摔倒而受到惊吓,但他勇敢地站起来准备再试。


附件:
screenshot1.jpg
screenshot1.jpg [ 11.62 KiB | 被浏览 1364 次 ]


最后由 jarryson 编辑于 2010-12-20 23:49,总共编辑了 1 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: 利用dict.cn api的在线查询脚本,可以通过notify-send输出,支持声音,不需要w3m
帖子发表于 : 2010-12-20 23:21 
头像

注册: 2005-08-14 19:53
帖子: 4002
送出感谢: 1
接收感谢: 2
-h和--help都是现实帮助
-n是使用notify-send显示结果
-s是启用声音,使用mplayer播放

需要带参数运行,-n模式可以查询鼠标框选单词,方便绑定快捷键

./dict.sh game

./dict.sh -n

./dict.sh -n game

都是可以的


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 利用dict.cn api的在线查询脚本,可以通过notify-send输出,支持声音,不需要w3m
帖子发表于 : 2010-12-21 0:39 
头像

注册: 2006-09-10 22:36
帖子: 10670
地址: 北京
送出感谢: 1
接收感谢: 16
发现jarryson一个习惯,喜欢半夜发技术帖


_________________
看破、放下、自在、随缘、念佛
真诚、清净、平等、正觉、慈悲


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 利用dict.cn api的在线查询脚本,可以通过notify-send输出,支持声音,不需要w3m
帖子发表于 : 2010-12-21 9:14 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
代码窗口太小。
没看出api?
只建议play代替mplayer


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 利用dict.cn api的在线查询脚本,可以通过notify-send输出,支持声音,不需要w3m
帖子发表于 : 2010-12-21 10:41 
头像

注册: 2008-04-26 12:41
帖子: 11000
送出感谢: 11
接收感谢: 38
:em09


_________________
[新手必读]wubi安装常见问题(FAQ)
[分享]装双系统的同学必看——Windows与Linux系统共享交换分区的方法
kde下唯美的暗黑内透主题(无需编译)
无穷老机上的Trinity Desktop Environment


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 利用dict.cn api的在线查询脚本,可以通过notify-send输出,支持声音,不需要w3m
帖子发表于 : 2010-12-21 13:48 
头像

注册: 2005-08-14 19:53
帖子: 4002
送出感谢: 1
接收感谢: 2
我这里木有play,没有alsa,而且那东西可以播放mp3音频?因为dictcn传过来的是mp3

WEBAPI是http://dict.cn/ws.php?utf8=true&q=,是一个xml,只需要对应处理一下就可以了。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译