`
eidolon
  • 浏览: 40657 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

金山词霸命令行客户端

阅读更多
查单词时进了金山词霸网站,见有开放接口,且非常之简单,仅一个接口。便萌生了写一个命令行工具的想法,已经习惯了使用命令行。代码如下:(因排版的原因,对代码有些许改动,如需要直接下载文件为好。)
#! /usr/bin/python
# coding=GBK
#
# CLI client for iciba.com
#
# FileName: iciba.py

__author__="eidolon"
__date__ ="$2010-4-19 18:25:36$"

import getopt
import sys
import urllib
import xml.sax
from xml.sax.handler import ContentHandler
from getopt import GetoptError

ICIBA_URL = "http://dict-co.iciba.com/api/dictionary.php?"
SEPARATE_LINE = '--------------------------------------------------------'

class ICIBAResponseHandler(ContentHandler):
    """The ICIBA response xml handler.
    """
    def __init__(self, pron):
        self.enter_node = 0
        self.current_node = ''
        self.sentence_counter = 0
        self.pron = pron
        
    def startElement(self, name, attrs):
        self.current_node = name
        if name in ('key', 'ps', 'pos', 'acceptation', 'orig', 'trans', 'pron'):
            self.enter_node = 1
        else:
            self.enter_node = 0

        if name in ('orig'):
            self.sentence_counter += 1
            print str(self.sentence_counter) + '.',

        if name in ('acceptation'):
            print '',

        if name in ('ps'):
            print '(',

        if name in ('sent'):
            print SEPARATE_LINE

    def endElement(self, name):
        if name in ('acceptation', 'orig', 'trans'):
            print ''
        if name in ('ps'):
            print ')'
            print SEPARATE_LINE

    def characters(self, ch):
        if self.enter_node:
            if self.current_node in ('key', 'ps', 'pos', 'acceptation', 'orig', 'trans'):
                print ch,
            elif self.current_node == 'pron' and self.pron:
                print 'Pron. URL: ' + ch
            
def iciba(word, pron=False):
    response = urllib.urlopen(ICIBA_URL + urllib.urlencode({'w': word}, 'true'))
    xml.sax.parse(response, ICIBAResponseHandler(pron))
    response.close()

def usage():
    print """USAGE: iciba.py [OPTIONS] <word1>[ <word2> ...]
    
    OPTIONS
    -p --with-pron, print prononce
    """

if __name__ == "__main__":
    with_pron = False
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'p', ['with-pron'])
    except GetoptError:
        usage()
        sys.exit(1)

    if ('-p', '') in opts: with_pron = True
    if ('--with-pron', '') in opts: with_pron = True
    
    if not args:
        usage()
        sys.exit(1)
    else:
        index = 1
        for tmp in args:
            iciba(tmp, with_pron)
            if index < len(args):
                index += 1
                print '\n\n'
        sys.exit(0)

可以将 iciba.py 拷贝到 /usr/bin 目录,这样就可以在任意目录使用了。还可以将名字改成 iciba,使用时就可以少打几个字符了:D
第一次写 Python 代码,有此零乱,诸位见谅。
# iciba good
good ( ɡʊd )
--------------------------------------------------------
n.  好, 好事, 慷慨的行为, 好处, 利益 
adj.  优良的, 上等的, 虔诚的, 愉快的, 慈善的, 好心的, 有益的 
--------------------------------------------------------
1. Good. 
好。 
--------------------------------------------------------
2. Good girl. 
好孩子。 
--------------------------------------------------------
3. especially good 
尤佳 
--------------------------------------------------------
4. " Good Lord! " 
" 老天爷! " 
--------------------------------------------------------
5. Good quality 
好质量 
0
0
分享到:
评论
5 楼 eidolon 2010-04-27  
梦幻之星 写道
iciba.iciba("help") 会TraceBack

没错,是会报错,这个问题前几天已经给ICIBA的人发邮件了,不过还没得到回复。
原因是返回的XML中有特殊特殊字符未作转义。如,help的返回值是:
<dict num="219" id="219" name="219">
<key>help</key>
<ps>help</ps>
<pron>http://res.iciba.com/resource/amp3/6/5/657f8b8da628ef83cf69101b6817150a.mp3</pron>
<pos>n.</pos>
<acceptation>帮忙, 补救办法, 助手, 治疗, <美>佣工</acceptation>
<pos>vt.</pos>
<acceptation>帮助, 助长, 接济, 治疗, 款待</acceptation>
<pos>vi.</pos>
<acceptation>有用, 救 命, 招待</acceptation>
<acceptation>[计] 显示命令格式的简短概述</acceptation>
...
</dict>

<美>,这里的<>是要分别写成 &lt;&gt;
4 楼 梦幻之星 2010-04-27  
iciba.iciba("help") 会TraceBack
3 楼 eidolon 2010-04-22  
如果查的是词组、短语之类有空格分割的,可以加引号,如:
引用

# iciba "commit in"
--------------------------------------------------------
1. He would not commit himself in any way .
他不愿以任何方式做出承诺。
--------------------------------------------------------
2. After shooting his wife, he commit suicide in the bedroom.
在开枪打死妻子后,他在卧室自杀。
--------------------------------------------------------
3. Suicide is a risk: 95 percent of those who commit suicide in jail or prison have a diagnosed mental disorder.
存在着自杀的危险:拘留所或监狱中自杀的人中有95%被诊断为精神不正常。
--------------------------------------------------------
4. Using COMMIT and ROLLBACK in a server component COMMIT and ROLLBACK commands embedded in a server component may have different effects depending on the setting of the UseContextObject DBParm parameter.
那么插入的数据存在哪里?如果说新记录存在于数据库中,这和存在于硬盘中有什么区别??
--------------------------------------------------------
5. Did not Achan the son of Zerah commit a trespass in the matter of the devoted thing?
20从前谢拉的曾孙亚干,岂不是在那当灭的物上犯了罪么?
2 楼 eidolon 2010-04-21  
原来的代码有Bug,当 content 有特殊字符,如大于号、小于号等时会报错。双引号我已经做过处理,不过一直觉得处理方式太不合理了,有点头痛医头,脚痛看脚的感觉。所以又看了看代码,重构了一下。
1 楼 23号 2010-04-20  
# coding=utf-8

    def characters(self, ch):
        ch = ch.encode('utf-8')

utf8版本,谢谢。

相关推荐

    WM手机可用的金山词霸,挺好用的,下了不后悔哦!!

    【标题】中的“WM手机可用的金山词霸”指的是金山词霸在Windows Mobile(简称WM)操作系统上的版本,这是一款适用于智能手机的英语学习和翻译工具。金山词霸是一款深受用户喜爱的词典软件,它提供了丰富的词汇量和多...

    Mac版金山词霸

    【Mac版金山词霸】是专为苹果Mac操作系统设计的一款强大的英语学习软件,它免去了传统软件需要安装的步骤,用户可以直接运行程序,方便快捷。金山词霸在英语学习领域享有较高的声誉,其功能丰富,适合各类用户,无论...

    金山词霸自动添加自定义词典小工具

    【金山词霸自动添加自定义词典小工具】 在IT行业中,翻译软件是必不可少的工具,尤其是对于程序员和英语学习者来说。金山词霸作为一款知名的翻译应用,它提供了丰富的词汇和多样的功能,帮助用户高效地进行翻译工作...

    金山词霸(安卓手机离线词典包)

    《金山词霸(安卓手机离线词典包)——打造高效便捷的移动学习工具》 在信息化时代,语言学习工具的便捷性和效率至关重要。作为一款备受赞誉的移动应用,金山词霸为用户提供了一站式的词汇查询与学习服务。特别是在...

    PowerWord_2009_sp3_crack 金山词霸2009牛津版破解补丁

    金山词霸2009牛津版(简体中文界面),是运行于Windows XP/Windows Vista/Windows 7之上的高端词典翻译软件,堪称“权威、全面、专业、海量”:包括6本牛津词典,150本专业辞书,收录单词、短语及释义355,000余条;...

    金山词霸2012离线词典包1

    《金山词霸2012离线词典包1》是一款专门为用户打造的英语学习工具,它无需网络连接,即可提供全面、精准的词汇查询服务。这款离线词典包集合了丰富的词汇资源,旨在帮助用户随时随地提升英语水平,尤其对于网络环境...

    金山词霸2006屏幕取词问题研究

    根据给定的信息,本文将深入探讨金山词霸2006屏幕取词功能的问题及其解决方案。金山词霸2006是一款由金山软件公司推出的词典翻译软件,它具有屏幕取词的功能,用户可以在计算机屏幕上选取任何位置的文字进行翻译。...

    轻松解决金山词霸无法屏幕取词的故障

    金山词霸是一款在中国非常流行的词典软件,它提供屏幕取词功能,使得用户可以在不中断当前工作的情况下快速查询单词或短语的意思。但是,当遇到金山词霸无法屏幕取词的故障时,用户可能会感到非常困扰。为了解决这个...

    仿金山词霸界面,仿金山词霸界面

    仿金山词霸界面,仿金山词霸界面,仿金山词霸界面

    Dao金山词霸数据库代码

    《Dao金山词霸数据库代码详解》 在编程领域,数据库设计和实现是至关重要的环节,尤其是在开发语言如C++中,高效、稳定的数据库接口对于软件性能有着决定性的影响。"Dao金山词霸"是一个专为C++开发者设计的数据库...

    金山词霸2009破解程序Crack

    利用金山词霸2009破解程序Crack,可以激活金山词霸牛津版2009

    金山词霸 2007 激活

    金山词霸 2007 激活,修正杀毒软件与破解补丁的冲突。

    金山词霸例句API接口例子(JS+XML)

    金山词霸是一款知名的英语学习软件,它提供了API接口供开发者使用,以实现如在线翻译、例句查询等功能。本文将详细介绍如何利用金山词霸的API接口,结合JS(JavaScript)和XML(可扩展标记语言)技术来实现这些功能...

    金山词霸64位WIN7取词补丁

    【金山词霸64位WIN7取词补丁】是一个专为64位Windows 7系统设计的软件补丁,其主要目的是解决在64位操作系统环境下金山词霸的屏幕取词功能无法正常工作的问题。在传统的32位系统中,金山词霸的屏幕取词功能通常能够...

    金山词霸2016企业破解版.rar

    金山词霸2016企业破解版.rar

    金山词霸2005闪屏补丁

    《金山词霸2005闪屏补丁详解与应用》 金山词霸,作为国内知名的语言学习软件,自发布以来就受到了广大用户的喜爱。2005年版本的金山词霸更是以其丰富的词汇库、便捷的翻译功能,以及友好的用户界面赢得了口碑。然而...

    金山词霸生词本生成器

    金山词霸除了单词查词功能,大家用得比较多的是金山词霸的生词本功能。 不可否认,金山词霸是个非常棒的英文单词查询工具,但其它功能还是有很多功能不完善。如生词本功能。 每一个人学单词时,学的顺序和内容都...

    金山词霸2010牛津旗舰版安装及故障终极解决方案

    《金山词霸2010牛津旗舰版安装及故障终极解决方案》 金山词霸作为国内知名的英语学习软件,其2010牛津旗舰版集合了强大的词典资源和丰富的学习功能,深受用户喜爱。然而,软件的安装与运行过程中可能会遇到各种问题...

    金山词霸2009_Win7的64位补丁

    《金山词霸2009 64位补丁详解》 金山词霸,作为一款深受用户喜爱的中文翻译和学习软件,自2009年版本以来,一直以其丰富的词汇量、准确的翻译功能以及便捷的操作体验赢得了广大用户的认可。然而,在Windows 7 64位...

Global site tag (gtag.js) - Google Analytics