`
eidolon
  • 浏览: 39992 次
  • 性别: 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版本,谢谢。

相关推荐

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

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

    Mac版金山词霸

    Mac版金山词霸,免安装,直接运行,读英文文档遇到不认识的单词查查。

    金山词霸生词本生成器

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

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

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

    金山词霸本地词典 使词典本地化

    金山词霸本地词典, 在没有网络连接的情况下, 你同样可以使用金山词霸的各项功能. 简单的说就是把网络词典本地化!!! 金山词霸本地词典 金山词霸本地词典

    金山词霸助手2003

    《金山词霸助手2003》 帮你管理金山词霸中金山生词本的单词 不知你在使用金山词霸学习英语或阅读一些外文书时,是否经常习惯将一些英语生单词在用金山词霸翻译的同时就把它放进金山词霸自带的生词本中。但...

    微电子学专业词典for金山词霸

    今天看科技英语的课件,太多单词不懂了,就开金山词霸用屏幕取词功能。我发现有好多专业词汇的翻译都不是专业术语,于是在网上找。但是找到的都是PDF或TXT什么的,不方便查,于是想自己做。找了好多资料,终于把格式...

    金山词霸2009牛津版SP3无限试用补丁

    官方网站: ...最新版本:V2009.05.25.3.272 下载地址: ...试用期限:30天 网上有很多破解版本,但都对SP3都无效,即使用不了最新的划词翻译... 运行“金山词霸2009牛津版无限试用(by Kigen).exe”即可获取无限试用功能

    金山词霸java手机版

    金山出品:手机版金山词霸3.2版(JAR格式) 支持整句翻译+情景例句 V3.2版本更新: 1.增加17个分类近1500组精品情景会话内容; 2.优化查词数据加载策略; 3.优化程序性能,软件启动及运行速度大幅提升; 4.优化用户...

    金山快盘客户端

    金山快盘客户端,可以向文件夹一样使用资源,同步资源。

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

    久经考验的金山词霸,本人已验证并还在使用中

    android通过json获取金山词霸每日一句

    利用金山词霸开放性api,通过异步处理类访问网络 获取到json,再通过Gson解析json,获取到金山词霸 的每日一句数据.

    谷歌金山词霸谷歌金山词霸

    谷歌金山词霸谷歌金山词霸谷歌金山词霸谷歌金山词霸谷歌金山词霸谷歌金山词霸谷歌金山词霸谷歌金山词霸谷歌金山词霸谷歌金山词霸

    金山词霸 2011

    金山词霸 2011免破解版本PowerWord2011.25269.3066

    金山词霸 mac 版本

    金山词霸 mac 版本金山词霸 mac 版本金山词霸 mac 版本

    黑莓8700金山词霸英汉词典

    黑莓手机金山词霸黑莓手机金山词霸黑莓手机金山词霸黑莓手机金山词霸黑莓手机金山词霸黑莓手机金山词霸黑莓手机金山词霸

    金山词霸授权文件金山词霸授权文件

    金山词霸2010的授权文件,里面有详细的使用说明。 不用再怕用不到好软件而发愁了!

    金山词霸的DIC词典导出程序

    本程序可以解密金山词霸的DIC词库,通过它,开发自己的中英词典软件就不成问题了!

    金山词霸生词批量导入工具.rar

    金山词霸生词批量导入的工具和操作方法

    金山词霸2016个人版V1.3.6官方免费绿色版

    金山词霸是一款功能强大而又全面的词典软件,金山词霸采用更年轻,时尚的UI设计风格,界面简洁清新,在保证原有词条数目不变基础上,将安装包压缩至原来的1/3,运行内存也大大降低,金山词霸完整收录柯林斯高阶英汉词典;...

Global site tag (gtag.js) - Google Analytics